Datei Position!



  • Ich nochmal!

    Ich hab hier in der Foren Suche schon viele ähnliche Posts gesehen aber mir konnte keiner wirklich eine antwort geben!

    Meine Frage ist wie kann man in einer Datei (textDatei) von variabler Größe die Postion verändern???
    Die Datei enthält Strings die unterschiedlich lang sind!
    Die erste Zeile kann ich ausgeben, also ist der Zeiger in der Datei auf Anfang!
    Wie bekomme ich ihn auf Anfang-Ende???

    *THX*
    😡 😡



  • Dazu hast du zwei Funktionen zur Verfügung: fseek() (setzt den Dateizeiger relativ zu Anfang, aktueller Position oder Ende) oder fsetpos() (setzt den Dateizeiger auf eine vorher ausgelesene Position).



  • Sry aber das versteh ich nicht!

    Kann man nicht sagen "Spring zum Anfang zweite zeile" oder "Spring an das Ende der ersten Zeile"

    Ich versteh nicht wirklich wie ich nun jede Zeile einzeln verarbeiten kann??



  • Man kann nicht an die Position einer Zeile springen (außer die sind alle gleich lang). Man kann nur die Position (Byteoffset) in der Datei angeben.

    Wahlfrei Zeilen in einer reinen Textdatei zu suchen, geht IMHO nur durch Lesen der Datei von Anfang an.



  • Die Dateien sind nicht wirklich zeilenweise aufgebaut - die Zeilenstruktur ergibt sich indirekt aus der Lage der \n in der Datei. Das heißt, wenn du zur x-ten Zeile springen willst, mußt du von vorne x-1 Zeilen überlesen.

    wenn du das öfter brauchst, kannst du auch einmal durch die Datei laufen und alle Zeilenanfänge mit fgetpos() holen und in ein Array schreiben:

    fpos_t lines[MAX_LINES];
    fgetpos(file,&lines[0]);
    int last_line=1;
    int last_char;
    while((last_char==fgetc(file))!=EOF)
    {
      if(last_char=='\n')
      {
        if(fgetpos(file,&lines[last_line])!=0) break;
        ++last_line;
        if(last_line>=MAX_LINES)break;
      }
    }
    

Anmelden zum Antworten