βοήθεια με fstream

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
tzenni
Δημοσιεύσεις: 7
Εγγραφή: 21 Ιαν 2009 23:08

βοήθεια με fstream

Δημοσίευση από tzenni » 20 Νοέμ 2009 14:47

Βασικά έχω ένα αρχείο .txt το οποίο έχει μια σειρά από διευθύνσεις και θέλω να διαβάζω τυχαία από αυτό μία διεύθυνση και να την δίνω σε ένα αντικείμενο που έχω να φτιάξω.
#include <iostream>
#include <fstream>
using namespace std;

int main () {
int length,i;
i=0;
char * buffer;


ifstream is;
is.open ("streets.txt", ios::binary );

// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
unsigned seed=time(NULL);

// allocate memory:
buffer = new char [length];

// read data as a block:
is.read (buffer,length);
srand(seed);
int x=rand()%length;
is.seekg (x,ios::beg);

is.close();

cout << endl<<endl;
cout.write (buffer,length)<<endl;
cout<<length<<endl;
cout<<x<<endl;
system("PAUSE");
return EXIT_SUCCESS;

}
προσπαθώ κάπως έτσι να το κάνω αλλά δεν βγάζω άκρη και έχω χάσει τη μπάλα.
ευχαριστώ!! :D

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

βοήθεια με fstream

Δημοσίευση από virxen75 » 20 Νοέμ 2009 14:54

για στείλε το αρχείο streets.txt που αναφέρεις να δούμε την δομή του.

tzenni
Δημοσιεύσεις: 7
Εγγραφή: 21 Ιαν 2009 23:08

βοήθεια με fstream

Δημοσίευση από tzenni » 20 Νοέμ 2009 15:02

Απλά έχω μπερδευτεί με τα fstream είμαι και άσχετη!
Συνημμένα
streets.rar
streets
(1.54 KiB) Μεταφορτώθηκε 300 φορές

tzenni
Δημοσιεύσεις: 7
Εγγραφή: 21 Ιαν 2009 23:08

βοήθεια με fstream

Δημοσίευση από tzenni » 21 Νοέμ 2009 16:33

Τελικά νομίζω τα κατάφερα!
// read a file into memory
#include <iostream>
#include <fstream>
using namespace std;

int main () {
int length,i;
i=0;
char * buffer;
char ch;
//char y[10];
ifstream is;
is.open ("streets.txt", ios::binary );

// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);


// allocate memory:
//buffer = new char [length];

// read data as a block:
unsigned seed=time(NULL);
//is.read (buffer,length);
srand(seed);
int x=rand()%length;
is.seekg (x,ios::cur);
do {
is.get(ch);

i++;
}while(ch!='\n');
do {
is.get(ch);
cout << ch;
i++;
}while(ch!='\n');
is.close();
cout << endl<<endl;
cout<<length<<endl;
cout<<x<<endl;
system("PAUSE");
return EXIT_SUCCESS;

}
Απλά θέλω μια βοήθεια ακόμα εγώ θέλω το όνομα αυτό που παίρνω από το αρχείο μου να το έχω σε string και να το δίνω σαν όρισμα για να φτιάχνω ένα αντικείμενο!
Αλλά δεν ξέρω καθόλου πως γίνεται! :D

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

βοήθεια με fstream

Δημοσίευση από virxen75 » 22 Νοέμ 2009 10:41

ο κώδικας σου έχει λάθος
δεν λαμβάνει την περίπτωση το χ να ανήκει στην τελευταία γραμμή του αρχείου
δοκίμασε στο αρχείο με τις οδούς να έχεις μόνο 2 για να το διαπιστώσεις
έπειτα δεν διαλέγεις την εγγραφή που ανήκει το χ αλλά την επόμενη γι αυτό
και το παραπάνω λάθος

tzenni
Δημοσιεύσεις: 7
Εγγραφή: 21 Ιαν 2009 23:08

βοήθεια με fstream

Δημοσίευση από tzenni » 23 Νοέμ 2009 19:28

Ναι το είδα!Αλλά δεν ξέρω πως να το διορθώσω! :-? Πρέπει να αλλάξω κάτι στην while?

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

βοήθεια με fstream

Δημοσίευση από virxen75 » 24 Νοέμ 2009 00:00

πρέπει να βρεις το πρώτο '\n' πριν την θέση του χ
πηγαίνοντας τον δείκτη του αρχείου προς τα πίσω μέχρι να τα καταφέρεις
(αλλαγή στο πρώτο while δηλαδή)

ειδικές περιπτώσεις
χ--->στην πρώτη γραμμή

tzenni
Δημοσιεύσεις: 7
Εγγραφή: 21 Ιαν 2009 23:08

βοήθεια με fstream

Δημοσίευση από tzenni » 26 Νοέμ 2009 14:05

Μάλλον τα μπέρδεψα τελείως!εγω νομίζω ότι κάνω τα παρακάτω
βρίσκω το μέγεθος του αρχείου:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
Μετά τυχαία μια θέση στο αρχείο:
unsigned seed=time(NULL);
srand(seed);
int x=rand()%length;
is.seekg (x,ios::cur);
Μετά νομίζω ότι από την τυχαία θέση και μετά ψάχνω να βρω το πρώτο \n
do {
is.get(ch);
i++;
}while(ch!='\n');
και τέλος παίρνω την επόμενη λέξη από το \n εως να βρώ πάλι \n

do {
is.get(ch);
cout << ch;
i++;
}while(ch!='\n');
έχω σίγουρα πρόβλημα όταν είναι η τελευταία αλλά δεν ξέρω να το διορθώσω!

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

βοήθεια με fstream

Δημοσίευση από virxen75 » 26 Νοέμ 2009 19:18

το λάθος είναι ότι ψάχνεις μετά
πρέπει να ψάχνεις πριν το x για να βρεις το \n (ή την αρχή του αρχείου
αν το χ ανήκει στην πρώτη γραμμή.)

να διαβάζεις δηλαδή το αρχείο προς τα πίσω

έτσι βρίσκεις την γραμμή που ανήκει το x και όχι την επόμενη.

tzenni
Δημοσιεύσεις: 7
Εγγραφή: 21 Ιαν 2009 23:08

βοήθεια με fstream

Δημοσίευση από tzenni » 27 Νοέμ 2009 02:27

Ναι αλλά με την get() πάμε μπροστά έτσι δεν είναι?Δεν ξέρω καθόλου πως να πάω πίσω.Αν κατάλαβα καλά αντί να πηγαίνω για το χ που έχω μπροστά μέχρι να βρω το \n να πηγαίνω πίσω να βρω \n! :-?

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

βοήθεια με fstream

Δημοσίευση από virxen75 » 27 Νοέμ 2009 03:03

Κώδικας: Επιλογή όλων


// read a file into memory
#include <iostream>
#include <fstream>
using namespace std;

int main &#40;&#41; &#123;
int length,i;
i=0;
char * buffer;
char ch;
//char y&#91;10&#93;;
ifstream is;
is.open &#40;"streets.txt", ios&#58;&#58;binary &#41;;

// get length of file&#58;
is.seekg &#40;0, ios&#58;&#58;end&#41;;
length = is.tellg&#40;&#41;;
length--;
is.seekg &#40;0, ios&#58;&#58;beg&#41;;
srand&#40;time&#40;NULL&#41;&#41;;
int x=rand&#40;&#41;%length;
cout << endl<<endl;
cout<<length<<endl;
cout<<"x="<<x<<endl;
is.seekg &#40;x,ios&#58;&#58;cur&#41;;
is.get&#40;ch&#41;;

if &#40;ch=='\n'&#41; &#123;
    //printf&#40;"\n yes enter!!!\n"&#41;;
    x--;
    is.seekg &#40;x,ios&#58;&#58;beg&#41;;
    ch='1';
&#125;
i=1;
while&#40;ch!='\n' && x-i>=0&#41;&#123;

is.seekg &#40;x-i,ios&#58;&#58;beg&#41;;
is.get&#40;ch&#41;;
i++;
&#125;

if &#40;ch=='\n'&#41; ch='a';

if &#40;x-i<=0&#41; is.seekg &#40;0,ios&#58;&#58;beg&#41;;


do &#123;
    is.get&#40;ch&#41;;
    cout << ch;
&#125;while&#40;ch!='\n'&#41;;

is.close&#40;&#41;;
return EXIT_SUCCESS;

&#125; 

tzenni
Δημοσιεύσεις: 7
Εγγραφή: 21 Ιαν 2009 23:08

βοήθεια με fstream

Δημοσίευση από tzenni » 27 Νοέμ 2009 12:59

Ευχαριστώ πάρα πολύ!!! :D

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες