THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => C / C++ / C# => Topic started by: Niobe on October 10, 2016, 01:40:34 am



Title: C++ διάβασμα από .txt
Post by: Niobe on October 10, 2016, 01:40:34 am
Yo, έχω τον παρακάτω κώδικα. Το αρχειο .txt περιέχει γραμμές με στοιχεία integers μεταβλητού μήκους (η μια γραμμη εχει 8, η επόμενη 10, κ.ο.κ), οπότε θέλω να περνάω γραμμή-γραμμή στο vector και στο τέλος να βάζω ένα flag (pref. flag = -1 γιατί όλοι οι ints μου είναι >=0), για να ξέρω πόσα στοιχεία έχει η κάθε γραμμή και που αρχίζει η επόμενη και να τα χρησιμοποιήσω στον κώδικα.
Γίνεται;

Νομίζω η c++ διαβάζει 2 χαρακτήρες /r/n στο τέλος της γραμμής. Αν κάποιος έχει μια ιδέα ας τη ρίξει. Θένκ

Code:
std::vector<int> Address;

ifstream infile("C:\\...\\aaaa.txt");

if (infile.is_open()){
cout << "File Opened successfully!!! Reading from file into array" << endl;
// Check if exists and then open the file.
    if (inputFile.good()) {
        // Push items into a vector
        int current_number = 0;
        while (infile >> current_number){
                Address.push_back(current_number);
        }
        Address.shrink_to_fit();
        }
    }
else {
cout << "File not opened" << endl;
system("pause");
return 0;
}


Title: Re: C++ διάβασμα από .txt
Post by: zisis00 on October 10, 2016, 02:13:51 am
Το \r\n είναι χαρακτήρες στα Windows που δείχνουν το τέλος της γραμμής. Δεν έχει σχέση με τη C++. Στο Unix είναι απλά \n.

Αφου δεν ξέρεις πόσα elements έχει η κάθε γραμμή θα σου πρότεινα να αφήσεις τον operator >> για να διαβάσεις από το αρχείο.

Δοκίμασε να διαβάζεις κάθε γραμμή σε ένα string (με την getline πχ) και μετά να ψάχνεις για whitespaces ώστε να ξεχωρίζεις
πόσα elements υπάρχουν στην γραμμή. Και για το tokenizing υπάρχουν έτοιμες συναρτήσεις στην C++ (πχ istreamstring). Κάνε λίγο googling για ποιά σε βολεύει.

Έτσι γλυτώνεις και τη χρήση του flag. Το οποίο, κατ'εμε, βάζει πολυπλοκότητα χωρις να χρειάζεται.

Αν δεν απάντησα στην ερώτηση σου προσπάθησε να δώσεις λίγο πιο αναλυτικά λεπτομέριες για το τι ακριβώς θέλεις να κάνεις.


Title: Re: C++ διάβασμα από .txt
Post by: Niobe on October 10, 2016, 02:42:33 am

Την ειδα τη λύση που λες και ξέρω πως το flag απλά θα προσθέτει "βάρος". Θα το χρησιμοποιούσα γιατί στο πρόγραμμά μου θέλω να περάσω τον address σε συνάρτηση και χρησιμοποιώ και τον αριθμό των στοιχείων ανα σειρά και τα στοιχεία καθ'αυτά οπότε είναι σχετικά απλός ο έλεγχος.

googling
και αγιος ο θεος


Title: Re: C++ διάβασμα από .txt
Post by: zisis00 on October 10, 2016, 02:57:17 am
Δεν εννοώ ότι το flag θα σου μειωσει τις επιδοσεις στο προγραμμα σου. Ούτος η άλλως αυτό που θες να κάνεις είναι αρκετά απλό. Απλα η λύση με το negative flag δεν είναι τόσο... κομψή!

Αφου εχεις διαβάσει τα δεδομένα μιας γραμμής σε ενα buffer, μπορείς εύκολα να καταλάβεις ποσους integers έχεις απλά μετρώντας τα κενά (whitespaces) που υπάρχουν στην γραμμη που μολις διαβασες.