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

ερώτηση για 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)?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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 άρα μπορείς να βρεις μόνος σου ποια θα είναι η έξοδος της συνάρτησης

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

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

 

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

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

 

-

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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