0

処理のために多数のファイルをMatlabにインポートしようとしています。一般的なファイルは次のようになります。

    mass      intensity
 350.85777         238
 350.89252        3094
 350.98688        2762
 351.87899         468
 352.17712         569
 352.28449         426
Some text and numbers here, describing the experimental setup, eg  
Scan 3763 @ 81.95, contains 1000 points:

2列の数字は8つのスペースで区切られています。ただし、実験がうまくいかず、マシンが次のようなデータファイルを生成する場合があります。

mass      intensity

Some text and numbers here, describing the experimental setup, eg  
Scan 3763 @ 81.95, contains 1000 points:

単一のヘッダー行を持つスペースで区切られたファイルを使用していることがわかりました。

importdata(path_to_file,' ',  1);

通常のファイルに最適です。ただし、すべての異常ファイルで完全に失敗します。これを修正する最も簡単な方法は何でしょうか?importdataを使い続ける必要がありますか(すでにすべての可能な設定を試しましたが、機能しません)、または独自のパーサーを作成してみる必要がありますか?理想的には、これらの値を、正常なファイルの場合はNx2マトリックスで、異常なファイルの場合は[00]で取得したいと思います。

ありがとう。

4

2 に答える 2

4

独自のパーサーを作成する必要はないと思います。また、これはそれほど異常なことでもありません。ここでは、textscanを使用するのが最善のオプションです。

fid = fopen('input.txt', 'rt');
data = textscan(fid, '%f %u', 'Headerlines', 1);
fclose(fid);

mass = data{1};
intensity = data{2};

収量:

mass =
  350.8578
  350.8925
  350.9869
  351.8790
  352.1771
  352.2845

intensity =
         238
        3094
        2762
         468
         569
         426

最初のファイルと:

    mass =
       Empty matrix: 0-by-1

    intensity =
       Empty matrix: 0-by-1

あなたの空のもののために。

デフォルトでは、テキストスキャンは空白を区切り文字として読み取り、それができなくなるまで、指示した内容のみを読み取ります。したがって、ファイルの最後の行は無視されます。これらの追加フィールドを取得する場合は、このテキストの後に2番目のテキストスキャンを実行することもできます。

fid = fopen('input.txt', 'rt');
data = textscan(fid, '%f %u', 'Headerlines', 1);

mass = data{1};
intensity = data{2};

data = textscan(fid, '%*s %u %*c %f %*c %*s %u %*s', 'Headerlines', 1);

scan = data{1};
level = data{2};
points = data{3};

fclose(fid);

質量と強度のデータとともに、次のようになります。

    scan =
            3763

    level =
       81.9500

    points =
            1000
于 2010-08-31T23:48:27.487 に答える
1

「異常なファイルで完全に失敗する」とはどういう意味ですか?

importdataがデータを検出するかどうかを確認するには、たとえば

>> imported = importdata(path_to_file,' ',  1);
>> isfield(imported, 'data')
于 2010-08-31T11:57:26.460 に答える