2012-04-15 7 views
0

Ich bin in einer TXT-Datei zu lesen, die von etwas entlang der Linien aussehen:Überprüfung auf eingehenden Datentyp aus der Datei

int string string string 
int string string 
int string string string string string 

wo die Zahl der string Typen nach jedem int unbekannt ist. Jede Zeile repräsentiert eine neue Gruppe von Werten und jede Gruppe muss in ihren eigenen Array-Wert oder was auch immer sein (weiß nicht, ob ich das richtig formuliert habe, aber ich hoffe du verstehst was ich meine).

Gibt es eine Überprüfung, die ich durchführen kann, so sehen Sie, ob die eingehenden Daten aus der Datei ein int ist, so dass, wenn dies wahr ist und kann meinem Programm eine neue Gruppe von Daten?

Ich habe

versucht
int check 
if(check = file1.peek()){//start new group assignment} 

aber dies scheint nicht zu funktionieren. Ich muss in der Lage sein, den int Wert zu verwenden, sobald ich festgestellt habe, dass es der nächste Datentyp ist, der eingelesen wird.

Vielen Dank im Voraus.

+0

Warum nicht einfach für neue Zeilen überprüfen? Wenn das nächste Zeichen ein Zeilenumbruch ist, konsumiere es und lese ein int. Ansonsten lies eine Zeichenfolge. – dtech

Antwort

1

Es gibt mehrere Möglichkeiten, dies zu tun, aber ich würde vorschlagen, dass Ihre Gruppen möglicherweise in separaten Zeilen sind und die Leerzeichen innerhalb einer Zeile Elemente innerhalb einer Gruppe korrekt abgrenzen?

Also würde ich die Datei Zeile für Zeile lesen und dann jede Zeile auf Leerzeichen aufteilen.

Lassen Sie mich wissen, ob das obige passt und dann können wir erklären, wie es geht.

Ok, so dass Sie getline verwenden können:

while (cin.good()) // reading from standard input until EOF 
{ 
    String line_str; 
    getline(cin, line_str); // get next line from standard input 
    istringstream line(line_str); // put line into string stream 

    if (line.good()) // read from string stream until EOF 
    { 
     int x; 
     line >> x; // read an integer from string stream 

     while (line.good()) // read from string stream until EOF 
     { 
      string s; 
      line >> s; // read strings from string stream 
      /// process s 
     } 
    } 
} 
+0

Ja, das ist richtig. Jede Gruppe ist auf einer eigenen Linie mit Leerzeichen, die die Werte innerhalb jeder Zeile trennen (sie sind eigentlich nicht alle Zeichenketten, aber ich sollte in der Lage sein, es auszuarbeiten, wenn wir davon ausgehen, dass sie es sind). – QuantumO

+0

@ user1331900: Okay, das obige sollte tun, was Sie wollen. –

+0

Würdest du den Code ein wenig kommentieren können? Ich bin mir nicht ganz sicher, was genau los ist. Wenn es hilft, sieht meine Funktion zum Importieren der Datei so aus: void fileinput (string datafile, Datensatz zuordnen) { \t fstream file1 (Datendatei); while (! File1.eof()) {.... – QuantumO

Verwandte Themen