2

列がスペースで区切られた多数のデータ行を含むテキスト ファイルがあります。このデータを MATLAB で読み取るにはどうすればよいですか? 次のコードを試してみましたが成功しませんでした:

fid = fopen('file.txt');

M = textscan(fid, '%f %f %f');

x = M{1};

y = M{2};

z = M{3};

データは次のとおりです (列は等間隔ではありません)。

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha
4

2 に答える 2

3

まず、データ ファイルについて考えてみましょう。各行には 10 個の数字と 3 個の文字列が含まれます。10 個の数字と 1 個の文字列が含まれていると考えるのは簡単ですが、スペースが区切り文字として使用され、文字Iron - Alphaが引用符で囲まれていないため、1 個ではなく 3 個の文字列になります。

Next,textscanは、フォーマット仕様で入力行の完全な説明を提供した場合にのみ、希望どおりに動作します。たとえば、次の

 M = textscan(fid, '%f %f %f %f %f %f %f %f %f %f %s %s %s')

私にとってはうまくいきます。データの最初の 5 列のみが必要であり、これによりすべてのデータが読み取られるため、不要な列を簡単に削除できます。

不要なデータの読み取りを回避したい、または回避する必要がある場合は、もう少し賢くする必要があります。textscan次のように、特定のフィールドを無視するように指示できます。

 M = textscan(fid, '%f %f %f %f %f %*f %*f %*f %*f %*f %*s %*s %*s')

各行の最初の 5 フィールドのみを読み取ります。ドキュメントは、読書ルーチンをさらに改善する方法を示します。

于 2012-10-01T14:15:57.267 に答える
2

dlmread を試してください。

data = dlmread('file.txt');

セパレーターがスペースかどうかを確認します。非表示の文字 '\t' が含まれている可能性があります。

于 2012-10-01T08:26:54.910 に答える