2017-02-14 8 views
-1

でいくつかの行を戻って、 -4 //後ろ4行) - それはうまくいきませんでした。いくつかの私はfseek関数をテストした行</p> </blockquote> <p>(FP、-127で私は、カーソルの位置に戻っている</p> <blockquote> <p>に問題が発生したテキストファイルをCプログラミング

+2

コードを表示し、何がうまくいかなかったか説明できますか? – Marievi

+0

'fseek'は、読み書きする次のファイルの場所を考えるライブラリのビューにのみ影響します。すでに画面に表示されている出力には影響しません。既に書いた文字を削除するには ''\ b' 'を表示することができますが、行の先頭を読むときに前の行の文字を消去し続けるという保証はありません。あなたが欲しいものを確実に行うためには、標準ライブラリが提供する以上の能力が必要です(例えば、 'curses'を使用して調べることができます)。 –

答えて

3

まず、fseek(より具体的には最後の引数)に正しい引数を渡しているようには見えません。第2に、テキストファイルの行は固定幅であることはめったにないため、特定の番号を使用して「4行」に戻ることはできません。

代わりに、正しい位置を見つけるために一度に1文字ずつ後方に検索する必要があります。これは、機能を求めて使用して非常に効果的ではなく、ファイルに応じて、あなたは

  1. のいずれかにそれは上記、メモリの代替として
  2. 「を追求」するのは簡単ですメモリバッファにそれをすべて読むことがありますファイル全体
  3. ストアあなたは簡単に周りにジャンプすることができます
0

のでfseekは、1つのまたは2つの行で戻って行くことができないので、ラインのすべての始まりの位置をマッピングしますか?

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

ようこそスタックオーバーフロー。コードレイアウトは面倒です - 修正してください。 'feof()'の使用には注意してください。ここでのコードは正しいことができるdo ... while(!feof(fp));ループで使用しますが、通常は使用する必要はありません。より重要なことに、 '-4'は何をするつもりですか?それは100%非公式です。 –

関連する問題

 関連する問題