freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

βοήθεια με fstream


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [12 Μηνύματα]       Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
tzenni


Μέλος από: 21 Ιαν 2009
Μηνύματα: 7

View users profile
ΜήνυμαΣτις: 20 Νοε 2009 14:47    Θέμα: βοήθεια με fstream Απάντηση με παράθεση  Mark this post and the followings unread

Βασικά έχω ένα αρχείο .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;

}


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


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 20 Νοε 2009 14:54    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


Μέλος από: 21 Ιαν 2009
Μηνύματα: 7

View users profile
ΜήνυμαΣτις: 20 Νοε 2009 15:02    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Απλά έχω μπερδευτεί με τα fstream είμαι και άσχετη!



streets.rar
 Description:
streets

Download
 Filename:  streets.rar
 Filesize:  1.54 KB
 Downloaded:  289 Time(s)

tzenni


Μέλος από: 21 Ιαν 2009
Μηνύματα: 7

View users profile
ΜήνυμαΣτις: 21 Νοε 2009 16:33    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Τελικά νομίζω τα κατάφερα!
παράθεση:

// 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 και να το δίνω σαν όρισμα για να φτιάχνω ένα αντικείμενο!
Αλλά δεν ξέρω καθόλου πως γίνεται!
virxen75


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 22 Νοε 2009 10:41    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


Μέλος από: 21 Ιαν 2009
Μηνύματα: 7

View users profile
ΜήνυμαΣτις: 23 Νοε 2009 19:28    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 24 Νοε 2009 00:00    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

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


Μέλος από: 21 Ιαν 2009
Μηνύματα: 7

View users profile
ΜήνυμαΣτις: 26 Νοε 2009 14:05    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Μάλλον τα μπέρδεψα τελείως!εγω νομίζω ότι κάνω τα παρακάτω
βρίσκω το μέγεθος του αρχείου:
παράθεση:

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


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 26 Νοε 2009 19:18    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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

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

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


Μέλος από: 21 Ιαν 2009
Μηνύματα: 7

View users profile
ΜήνυμαΣτις: 27 Νοε 2009 02:27    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 27 Νοε 2009 03:03    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

κώδικας:


// 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();
length--;
is.seekg (0, ios::beg);
srand(time(NULL));
int x=rand()%length;
cout << endl<<endl;
cout<<length<<endl;
cout<<"x="<<x<<endl;
is.seekg (x,ios::cur);
is.get(ch);

if (ch=='\n') {
    //printf("\n yes enter!!!\n");
    x--;
    is.seekg (x,ios::beg);
    ch='1';
}
i=1;
while(ch!='\n' && x-i>=0){

is.seekg (x-i,ios::beg);
is.get(ch);
i++;
}

if (ch=='\n') ch='a';

if (x-i<=0) is.seekg (0,ios::beg);


do {
    is.get(ch);
    cout << ch;
}while(ch!='\n');

is.close();
return EXIT_SUCCESS;

}
tzenni


Μέλος από: 21 Ιαν 2009
Μηνύματα: 7

View users profile
ΜήνυμαΣτις: 27 Νοε 2009 12:59    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ευχαριστώ πάρα πολύ!!!
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [12 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 06 Δεκ 2016 02:47 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos