2016-05-22 9 views
0

文字列と数字の組み合わせを含むテキストファイルがあります。例えば、次のように:MATLABでのテキストファイルの操作

*予稿集、エコー= NO、モデル= NO、履歴= NO、接点= NO

*エレメント、タイプ= S4R

1、1、9、189、84

2、9、10、190、189

3、10、11、191、190

4、11、12、192、191

*面、タイプ= ELEMENT、名前=サーフ-1

私は削除する>> 2、9、10、190、189 私は新しいファイルに次のようにしたいわけ:

*プレプリント、エコー= NO、モデル= NO、履歴= NO、接点= NO

*エレメント、タイプ= S4R

1、1、9、189、84

3、10、11 、191,190

4、11、12、192、191

*面、タイプ= ELEMENT、名前=サーフ-1

私は、これらのデータが変更されていることに気付くべきであり、それらについて私が知っている唯一のことは、そのあります上記の例の行4のために。

私は多くの時間を特別な行からスキップして別のものからテキストファイルを書くことができました。

いずれかの提案をいただければ幸いです。

答えて

1

fgets関数を使用すると、1行ずつASCIIファイルを読み取ることができます。

clc; 
close all; 
clear all; 

input = fopen('input.txt','r'); 
output = fopen('output.txt','w'); 
line = fgets(input); 
fprintf(output,'%s',line); 
cpt=0; 
offset = 3; 

while ischar(line) 
    cpt=cpt+1; 
    if (cpt==offset) 
     line = fgets(input); 
     continue; 
    end 
    line = fgets(input); 
    fprintf(output,'%s',line); 
end 

fclose(input); 
fclose(output); 

最初fgetsあなたは、メモリ内の入力ファイルから最初の行をコピーすることができます:あなたは(あなたが言ったようにその番号を知っている)スキップする行が発生したときだけ反復をスキップするcontinueステートメントを使用します。

次のfprintfは、出力ファイルに書き込みます。

次に、ゼロに初期化されたカウンタを定義し、オフセットを定義します。つまり、最初の行を読み終えているので、スキップしたい行が1です。

ループを使用して、入力ファイルの各行をfgets関数で読み取って、出力ファイルに直接書き込みます。ファイルの最後に達すると、fgetsは文字ではない-1を返し、ループが終了します。

あなたはcptが繰り返されると、それはオフセットに等しいならば、あなたが行をスキップしなければならないので、あなたがそれを読んでいますが、それを書いていないとcontinue文はあなたがスキップし、ループの次の繰り返しにジャンプすることができますことに気づきます残りの指示。

改行文字を削除する場合は、fgetsの代わりにfgetlを使用できます。

入力ファイル:

*予稿集、エコー= NO、モデル= NO、履歴= NO、接点= NO

*エレメント、タイプ= S4R

1、1、 9、189、84

2、9、10、190、189

3、10、11、191、190

4、11、12、192、191

*表面タイプ= ELEMENT、名前=サーフ-1

出力ファイル:

*予稿集、エコー= NO、モデル= NO、履歴= NO、接点= NO

*エレメント、タイプ= S4R

1、1、9、189、84

3、10、11、191、190

4、11、12、192、191

*表面タイプ= ELEMENT、名前=サーフ-1

関連する問題