2

形式が不明なmatlabでtxtファイルを読み取ることに関して質問がありますが、txtファイルの各行は常に次のように始まります。

2012-11-01 00:00:00.00 XX YY  00.000s  

次に、いくつかの異なるものがログに記録され、txt ファイルが異なって見える場合があります。たとえば、

Ex1:    2012-11-01 00:00:00.00 XX YY  00.000s  000.00deg  0.00rpm  0.00rpm
Ex2:    2012-11-01 00:00:00.00 XX YY  00.000s  000.00deg  0.00rpm   
Ex3:    2012-11-01 00:00:00.00 XX YY  00.000s  0.00deg 0.00rpm 0.00rpm 0.0deg      
Ex4:    2012-11-01 00:00:00.00 XX YY  00.000s  0.00rpm

私はこれを処理しtextscanて使用します:

Fid = fopen('text.txt');
initfrm = {'%s%s%s%s %.3f %s'};
frm = repmat('%.2f %s',1,NCol);
frm = strcat(initfrm, frm);
Tmp = textscan(fid,frm{1});
Fclose(fid);

ファイルには、ログに記録した col ( NCol) の数が計算されていますが、ここには表示されていません

ただし、テキスト ファイルに次のような が含まれている場合があります0.0%

Ex1:    2012-11-01 00:00:00.00 XX YY  00.000s 000.00deg   0.00rpm  0.00rpm  0.0%

'%.2f'はうまくいきません。ログがいつこうなったかわかりません。float と string を一緒に印刷するときに分離するより良い方法はありますか? プロットできるように、データ(フロート)を収集したいだけです。

%.2f と %.1f で変化する場合、すべての float 値を取得するにはどうすればよいですか? あなたはそのパターンを知りません。

4

2 に答える 2

0

あなたの質問を正しく解釈したかどうか確信が持てません。テキストの各行に、N または N+1 (おそらく N+m?) の可変数のトークンがあるように思えます。

もしそうなら、各行からトークンを抽出することに基づくアプローチをお勧めします。

このことを考慮:

  1. fgets ファイルから各行を抽出するために使用します。
  2. strtokトークンを繰り返し分離するために使用します(つまり、文字列をトークン化' 'します。トークン区切り文字として使用します)。
  3. 固定された初期パターンがあるため、最初の N トークンを再マージして、既に行っているように解析することができます。次に、位置 N+1 のトークンが存在するかどうかを確認し、最終的に解析することができます。
于 2012-11-09T09:49:17.843 に答える