2017-02-14 5 views
-1

Ich habe ein Problem mit diesemgehen einige Zeilen in Textdatei C-Programmierung

in Cursorposition zurück von ein paar Zeilen

I fseek getestet haben (fp, -127, -4 // zurück vier Zeilen) - aber es hat nicht funktioniert können Sie mir bitte helfen.

+2

Können Sie Ihren Code zeigen und genau erklären, was nicht funktioniert hat? – Marievi

+0

'fseek' wirkt sich nur auf die Ansicht der Bibliothek aus, wo der nächste Speicherort der Datei zu lesen/schreiben ist. Dies wirkt sich nicht auf die Ausgabe aus, die bereits auf dem Bildschirm angezeigt wird. Sie können '' \ '' ausdrucken, um bereits geschriebene Zeichen zu löschen. Wenn Sie jedoch den Anfang einer Zeile lesen, gibt es keine Garantie, dass die Zeichen in der vorherigen Zeile weiterhin gelöscht werden. Um das zu tun, was Sie benötigen, benötigen Sie Fähigkeiten, die über die Standardbibliothek hinausgehen (z. B. sollten Sie sich mit 'Curses' beschäftigen). –

Antwort

3

Zunächst scheinen Sie nicht die richtigen Argumente an fseek übergeben (genauer gesagt das letzte Argument). Zweitens haben Zeilen in Textdateien selten eine feste Breite, Sie können also keine bestimmte Zahl verwenden, um "vier Zeilen" zurückzugehen.

Stattdessen müssen Sie rückwärts um jeweils ein Zeichen nach dem richtigen Punkt suchen. Dies ist nicht sehr effektiv Funktionen suchen, und je nach der Datei mögen Sie vielleicht entweder

  1. sie alle in einen Speicherpuffer gelesen, wo es leicht ist,
  2. Als Alternative zu dem oben genannten Speicher zu „suchen“ Karte die gesamte Datei
  3. Speichern Sie die Positionen aller Anfänge der Linien, so dass Sie leicht um
  4. springen
0

fseek kann also nicht wieder durch ein oder zwei Linien? Könnten Sie mir ein einfaches Beispiel geben

fp= fopen("liste.txt", "r"); // this is where i have list of names and ages and and ... 
new_fp=fopen("sec_list.txt","w");// this is where i will stock new infos 
    do { 
     fgets(ligne, 100, fp); 
     if (strcmp(tel, ligne)!=0) // if "Tel" isnt the same content as "Ligne" 
      {                                  
       fputs(ligne, new_adherent); 
    }   
    else { 
printf("\n the adherent is founded \n"); 
fseek (fp, -124, -4);// back by 124 caractere and 4 lines or something like that 

    do{ 
     ch = fgetc(fp); 
     if(ch == '\n'){ 
     lines++; 
} 
}while (lines<7); 

printf("\n\t DELETED \n"); 
} 


    }while(!feof(fp)); 

    fclose(fp); 
    fclose(new_fp); 
    remove("liste.txt"); 
    rename("new_liste.txt", "liste.txt"); 
+1

Willkommen bei Stack Overflow. Das Code-Layout ist entsetzlich - bitte korrigieren. Seien Sie vorsichtig bei der Verwendung von 'feof()' - der Code hier verwendet es in einer 'do ... while (! Feof (fp));' -Schleife, die korrekt sein könnte, aber es ist normalerweise nicht notwendig, sie überhaupt zu verwenden. Bedeutender ist, was soll die "-4" tun? Es ist 100% nicht koscher. –

Verwandte Themen