2012-03-28 3 views
-1

データファイル内の文字列を削除しようとしています。ANSI Cを使用してファイル内の文字列を削除する方法は?

データの形式は、ちょうど次のレコードのようなものです:

4253 1 

3119 1 

5709 1 

576 1 

857 1 

5859 1 

5896 1 

116 1 

2396 1 

1088 1 

4180 1 

者は、IMGを送信する権利はないfile.Iの一部です。 各レコードは、スペースで区切られた2つの数字を構成し、目に見えない文字 '\ n'で区切ります。 ファイルには何千ものレコードがありますが、ファイルをスキャンすると無駄なレコードをいくつか削除したいだけです。 C言語を使用して実装する必要があります。

大変申し訳ございませんが、データの詳細なフォーマットは提供していません。

+2

あなたはunixで簡単にすることができます。なぜCのために行くのですか? – Teja

+1

@Venkだから、もしプログラムが移植可能であれば? – cnicutar

+0

詳細を記入してください。レコードはどのように分かれていますか?改行文字ですか?役に立たない記録はどのようにして識別されますか?特定のデータまたは特定の形式ですか?あなたは本当にCでそれを必要としますか?これはPerlの1つのライナーにすることができます。 – sidyll

答えて

2

Cのファイルはシーケンシャルエンティティです。 自身の構造体にNUL文字を存在しないものとして扱うなどしない限り、文字や行を削除する唯一の方法は、ファイルの一部を前方に少しずらして上書きすることです。

これは、fseektruncate(最後はISO Cではありません)、または1つのファイルを読み込んで別のファイルに書き込むことで行うことができます。

#include <stdio.h> 

int main (void) { 
    char buff[1024]; 
    while (fgets (buff, sizeof(buff), stdin) != NULL) 
     if (strcmp (buff, "11\n") != 0) 
      printf ("%s", buff); 
    return 0; 
} 

は、入力バッファの長すぎる通常警告線行に注意:

は、例えば、次のプログラムは、標準入力から11を含む行を削除します。

+0

OPはUNIXに言及していませんでしたが、なぜ誰もがUNIXについて話し始めます。 mp3プレーヤーの中のmp3ファイルでもよく、プログラムはファームウェアであってもよい。それにUNIXをインストールすることを幸運にします。 – Lundin

+0

良い点、@ Lundin、それは私の脳神経術だった。それは私の意図だったので、 "Cのファイル"と言うことにしました。 – paxdiablo

+0

提供を考えています。私はここに新しいです。私は自分の質問を編集しました。 – user1298367

関連する問題