Bestimmte Werte aus txt auslesen

Je nach Dateiformat (Whitespaces etc.) müsste doch auch einfach dieses hier funktionieren.

C++:
fscanf(myfile,"%*d;%d;%*s\n",&ivar);

Das '*' unterdrückt die Zuweisung ungewünschter Felder an Variablen.
 
Ich hab´s jetzt so lösen können.

Code:
while((fgets(content, 50, myfile)) != NULL){
        prefix = strtok( content, ";");
        prefix = strtok( NULL, ";");
        result = strstr("2612345",prefix);
        if(result){
            printf ("%s\n",result);
            break;
        }else{
            printf ("%s\n", "Nüscht");
        }
}

Das sieht soweit gut aus. :)
 
Das hier müsste auch funktionieren
C++:
while( fscanf(myfile,"%*ld;%ld;%s\n",&lvar,str) == 2){
        if(lvar == 2612345 ){
            printf ("%s\n",str);
            break;
        }else{
            printf ("%s\n", "Nüscht");
        }
 
Mit fscanf hab ich noch n paar Probleme, da ich die Syntax nich komplett kapiere. Ma gucken, ob ich es hinkriege. Korrigiere mich bitte. :)
myfile ist klar. Dann gebe ich n Pointer auf ne long int aus, noch n longint und dann nen String...also meine drei Werte aus der txt, gefolgt von einem Zeilenumbruch.
lvar und str...mhm..gute Frage. Und das 2 müsste für die zweite Stelle stehen. Würde das auch klappen, wenn ich z.B.

1009;234;Bla

hätte? Ja, ich bin noch kein Pro aber ich will es lernen. :)
 
Zuletzt bearbeitet:
So ähnlich, aber anders.;)

fscanf funktioniert wie scanf, nur eben auf Files. Der erste Parameter ist der Dateizeiger, richtig. Der zweite Parameter ist der Formatstring. Dort werden drei Felder mit dem %-Zeichen deklariert, aber das erste Feld wurde mit %*ld deklariert; das Sternchen weist die Funktion an, dieses Feld nicht einer Variablen zuzuweisen, deswegen sind nur zwei Variablen in der Parameterliste. Es wird also das erste Feld ignoriert, das zweite Feld an lvar zugewiesen, und das dritte Feld landet im String str. Der Returnwert von fscanf ist EOF oder die Anzahl der erfolgreich zugewiesenen Variablen.
Zur letzten Frage: ja.

Genaueres über den Formatstring und seine Möglichkeiten findest du in dieser fscanf-Doku.
 
Hi.

Man sollte wenn eine Datei ein bestimmtes Format hat, auch immer beim Einlesen prüfen ob das Format eingehalten wurde. Wenn eine Datei zeilenweise aufgebaut ist, dann sollte man sie auch zeilenweise verarbeiten. Und eben Zeilen die nicht dem Format entsprechen überspringen (und eine Fehlermeldung ausgeben). Das kann man mit fscanf nicht erreichen, da dies z.B. nicht mehr richtig funktioniert falls im 3. Feld Leerzeichen enthalten sind.

Gruß
 
Du hast völlig recht. Aber ich war der Meinung, dass nur ein ad-hoc-Programm auf die Schnelle gewünscht war. Kugelsicher ist meine Methodik garantiert nicht, aber wenn die Datei im Format den passenden Aufbau hat, funktioniert es; vor allem hat es den Vorteil, schön kurz zu sein und Zahlen auch als Zahlen bereitzustellen. Und die Stärken und Schwächen von Formatstrings kennzulernen, ist bestimmt auch nicht falsch.
Die Verwendung von strtok zähle ich schon zur fortgeschrittenen Vorgehensweise. Ich freue mich, dass Teilzeitphilosoph sie so schnell beherrscht. Und die Umwandlung von Strings in Zahlen oder anderes kann man mit sscanf machen. Allerding muss dann Feldtrenner wählen, die nicht in einer Zeichenkette vorkommen (was schwierig sein kann).
Als Profi würde man das noch anders machen. Man würde beispielsweise eine Grammatik definieren und einen passenden Parser erstellen. Mit lexx und yacc ist das relativ problemlos möglich, aber das sind UNIX-Tools (gibt es die eigentlich auch für andere Betriebssysteme?).
Oder man würde die csv-Datei mit Hilfe von Datenbankklassen in eine Tabelle einlesen.
Oder man würde ein Dateiformat wählen, z.B. XML, für das entsprechende Hilfsbibliotheken existieren, und diese dann verwendem.
Es ist eben alles eine Frage dessen, wie fehlertolerant oder -empfindlich das Programm sein soll.
 
Zurück