Bestimmte Werte aus txt auslesen

Teilzeitphilosoph

Erfahrenes Mitglied
Moinz.
Ich hab hier ne wunderschöne txt-Datei, mit solchen Inhalten:

01;1234;Eins
02;567;Zwei
03;9999999;Drei

und das immer so weiter.
Jetzt will ich mit C nur die mittleren Werte auslesen und eine Datei zu öffnen ist ja nich das Problem. Ich brauch aber nicht den ersten und dritten Wert und hab mir sagen lassen, dass man mit fseek() den Pointer auf ne gewisse Stelle springen lassen kann, ausliest und weiter springt...aber ich weiß -noch- nicht wie. Oder geht das alles auch anders? Ich bin da für jeden Vorschlag offen.

-bedank-
TZP
 
Hi.

Nein, fseek ist dafür unnütz, da du nicht weißt an welcher Position in der Datei eine Zeile beginnt usw.

Du könntest die Datei zeilenweise mit fgets verarbeiten und die Zeilen dann z.B. mit strtok oder sscanf verarbeiten. :google:

Gruß
 
Mmm...ich bin mir nich sicher, ob ich das richtig verstanden habe aber in der Datei beginnt jede neue Zeile an der ersten Position...also quasi immer ganz links am Rand.
 
Mmm...ich bin mir nich sicher, ob ich das richtig verstanden habe aber in der Datei beginnt jede neue Zeile an der ersten Position...also quasi immer ganz links am Rand.
In einer Datei gibt es keine Ränder. Das was du auf dem Bildschirm siehst, wenn du die Datei in einem Editor öffnest, ist nur eine Representation der Daten in der Datei wobei Zeilenendemarkierungen (CRLF, CR bzw LF) als "Zeilenumbruch" interpretiert werden.

Eine Datei besteht aus einer Folge von Bytes. Du kannst nicht wissen an welcher Stelle z.B. ein \n Zeichen steht, ohne die Datei zu lesen.

Gruß
 
Zuletzt bearbeitet:
Ach so, dann hab ich mir das immer falsch vorgestellt. Also zieh ich mir jede Zeile rein, springe mit scanf zum ersten ';' und lese bis zum nächsten ';' und gehe dann zur nächsten Zeile und und und. Ah...wieder was gelernt. :)

-bedank-
TZP
 
So....zur Hälfte hab ich´s.

Code:
char *result;
char content[2000];

....
while(fscanf(myfile, "%s", content) != EOF){
    result = strtok(content ,";");   
    if( result == "9999999") {
        printf ("%s\n","gefunden" );
    }
    printf ("%s\n",result );
}
fclose(myfile);
....

Das Problem: Wenn ich ne Datei wie mein Beispiel hab, dann gibt er mir am Ende nur "Drei" aus und das war´s. Ich hätte aber gerne die Ausgabe "gefunden" aber das passiert nich. Das ist gewiss wieder nur so ne Kleinigkeit, die mich für den Rest meines Lebens verfolgen wird. :/
 
Hi.

Warum nimmst du fscanf? Warum nimmst du nicht einfach fgets?

Strings kann man mit der Funktion strcmp vergleichen.

Gruß
 
Das mit fgets war doch die bessere Lösung. Allerdings kann ich mich mit strcmp nich wirklich anfreuden. Wenn ich das richtig sehe, kann man damit nur ganze Strings vergleichen. Ich möchte aber, dass er nur den mittleren Teil ausgibt, wenn er wirklich gefunden werden sollte.
Wobei ich gerade feststelle, dass ich mich eh total falsch formuliert habe. :-(

Die Idee ist, dass jemand eine Zahl eingibt...sagen wir mal 2612345. Eine txt-Datei könnte dann so aussehen.

01;36;Test1
02;2612;Test2
03;345;Test3

Jetzt soll mit der Usereingabe in der txt-Datei gesucht werden und wenn ein oder mehrere Teile in den mittleren Einträgen gefunden wurden, soll der/die ganz rechten Einträge zurück kommen. In dem Fall wäre das dann Test2 und Test3. Ich bin doch der Meinung, dass strtok da nich verkehrt ist aber fummel mir noch die genaue Funktionsweise zusammen, bin aber guter Dinge. :)
 
Hmhm...wieder einen Schritt weiter aber immer noch nich am Ziel. Momentan sieht es so aus:

Code:
while((fgets(content, 40, myfile)) != NULL){

    result = strtok(content, ";");
    result = strtok(NULL, ";");
    if(*result == *"04567830"){
        printf ("%s\n",result );
        break;
    }
}

Das Lustige daran ist, dass er so "36" ausgibt und wenn ich den Break weglasse, kommt er zu "345"...so als ob die Abfrage innerhalb der If-Anweisung keine Wirkung hat. Sehr strange. :confused:
 
Zuletzt bearbeitet:
Das Lustige daran ist, dass er so "36" ausgibt und wenn ich den Break weglasse, kommt er zu "345"...so als ob die Abfrage innerhalb der If-Anweisung keine Wirkung hat. Sehr strange. :confused:
Natürlich hat die if-Abfrage eine Wirkung. Du prüfst ob der erste Buchstabe von result (das hoffentlich nicht NULL ist!) gleich dem Zeichen '0' ist.

Um Strings zu vergleichen mußt du eine der Stringvergleichsfunktionen verwenden (z.B. strncmp) oder was soll die Bedingung des if bedeuten?

Gruß
 
Zurück