2017-02-14 41 views
-1

一些行。我在那回去的文本文件C編程

一個問題,光標的位置會回來我測試過FSEEK幾行

(FP,-127, -4 //後退四行) - 但它不起作用,請你幫助我。

+2

你可以顯示你的代碼,並解釋到底什麼是行不通的? – Marievi

+0

'fseek'隻影響圖書館認爲讀取/寫入的下一個文件位置的位置。它不會影響屏幕上已有的輸出。你可以打印出''\ b''來刪除已經寫好的字符,但是當你讀到一行的開頭時,不能保證它會繼續刪除前一行的字符。爲了可靠地做你想做的事情,你需要超出標準庫提供的功能(例如,你可能想用'curses'來看看)。 –

回答

3

首先,您似乎沒有將正確的參數傳遞給fseek(更具體地說是最後一個參數)。其次,文本文件中的行很少有固定的寬度,所以你不能使用特定的數字來返回「四行」。

相反,您必須一次尋找一個字符以找到正確的位置。這是不使用查找功能,並根據該文件,你可能會想要麼

  1. 閱讀這一切到內存緩衝區,其中可以很容易地「求」
  2. 作爲替代以上,內存非常有效映射整個文件
  3. 商店行萬事開頭的位置,所以你可以很容易地跳來跳去
0

所以fseek不能由一個或兩行回去?你能給我一個簡單的例子嗎?

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

歡迎來到Stack Overflow。代碼佈局令人震驚 - 請修復。小心使用'feof()' - 這裏的代碼在'do ... while(!feof(fp));'循環中使用它可能是正確的,但通常根本沒有必要使用它。更重要的是,'-4'打算做什麼?它是100%非猶太教徒。 –