Προς το περιεχόμενο
  • 0

ερώτηση για getline


Vasilis89

Ερώτηση

έχω αυτό

string ReadFile(char *FileName, vector<string> &Var) {
    string line;
    string Result;
    
    ifstream TextReader;
    TextReader.open(FileName);
    
    getline(TextReader, line );

    if (line != "")
    {
        Result = line;
        Var.push_back(line);

        while ( TextReader.good() ) {
            getline(TextReader, line);
            Result += "\n" + line;
            Var.push_back(line);
        }
    }


    TextReader.close();

    return Result;
}

και ένα αρχείο με αριθμούς χωρσμένους με κόμματα "1231,2342,1231,1423,23...."

πιο θα είναι το αποτέλεσμα του υποπρογράμματος? 1231,2342,1231,1423,23/n ;h 1231/n2342/n klp

τι κάνει το var.push_back(line)?

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

7 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

  • 0

getline(TextReader, line )
Result = line;

Φέρε μια γραμμή από το αρχείο

Βάλτο στο result

 

Var.push_back(line);

Η μεταβλητή Var δεν ορίζεται κάπου μέσα στο κομματι κώδικα που παραθέτεις.Οπότε το τι μπορεί να κάνει η push_back είναι άγνωστο.

 

     while ( TextReader.good() ) {
           getline(TextReader, line);
           Result += "\n" + line;
           Var.push_back(line);
     }

Όσο ο textreader φέρνει γραμμές και δεν έχει βρει το τέλος του αρχείου

κάνει αυτό Result += "\n" + line.Ο τελεστής += μπορεί να ερμηνευτεί ως εξής

 

Result = Result + "\n" + line άρα μπορείς να βρεις μόνος σου ποια θα είναι η έξοδος της συνάρτησης

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

 Η μεταβλητή Var είναι ένας vector απο strings:

string ReadFile(char *FileName, vector<string> &Var)

Η εντολή:

Var.push_back(line);

προσθέτει στο τέλος του vector την μεταβλητή (string) line.

  • Like 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

το αρχείο είναι αριθμοί χωρισμένοι με κόμματα.. δηλαδή "13,13,123,123,1234,123..."

με το getline θα πάρει όλη την γραμμή μαζί η θα λαμβάνει κάθε κόμμα ως άλλη γραμμή?

Πως μπορούν αυτά τα στοιχεία να μεταφερθούν σε έναν πίνακα?

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Getline σταματά να διαβάζει όταν δει τον χαρακτήρα newline (\n) οπότε ναι θα φέρει όλη την γραμμή.

 

Θες να μεταφέρεις όλη την γραμμή σε ένα πίνακα ή να βάλεις σε ένα πίνακα την τιμή του result που επιστρέφει η ReadFile?

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δεδομένου ότι θέλεις να κάνεις τη μετατροπή από fortran σε C++ που ρωτάς αλλού,
το απόσπασμα της C++ που παραθέτεις εδώ (μάλλον από κάπου το έκανες copy-paste)
είναι γενικά ακατάλληλο για να αντικαταστήσει την read(*,*) της fortran.
Eίναι υπερβολικά πολύπλοκο για κάτι απλό.

 

Εφόσον ξέρεις πόσοι είναι οι αριθμοί που θέλεις να εισάγεις στον πίνακα,
δοκίμασε με την fscanf() της C/C++. Είναι πιο κοντά στην read() της fortran.
Υπάρχει και τρόπος να εισάγεις τα στοιχεία χωρίς να ξέρεις το πλήθος τους
αλλά αυτό είναι μεταγενέστερο βήμα.

 

Πρέπει να προσέξεις κάπως με τον χαρακτήρα \n (αλλαγή γραμμής) διότι αυτές oι εντολές

της C/C++ έχουν κάποιες ιδιοτροπίες.
Εγώ όταν είχα κάνει κάτι παρόμοιο είχα χρησιμοποιήσει και την _gettc() για να ελέγχω τον "\n".
Άλλη παρόμοια γι αυτή τη δουλειά είναι και η fgetc().
Η fortran δεν έχει τέτοια προβλήματα.

 

-

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Μα ήδη η μεταβλητή Result που επιστρέφεται απο την μέθοδο, έχει υπο μορφή πίνακα (string = sequence of characters) όλο το αρχείο και το μονο που χρειάζαται είναι να την σαρώσεις και να πετάξεις τα σκουπίδια ('\n', ',')

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε έναν λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι εύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.