これを試して:
FID = fopen('datafile.dat');
data = textscan(FID,'%f %f %f %f', 'headerLines', 6);
fclose(FID);
data
1x4 セル配列になります。各セルには、データの各列の値である double 値の 3x1 配列が含まれます。
data{2}
と を実行すると、データの 2 列目と 4 列目にアクセスできますdata{4}
。
元のコードの主な問題は、データ ファイルに6 つのヘッダー行があることですが、指定したのは4 つだけです。
さらに、ただし、formatSpec に一致する回数の指定で問題が発生します。たとえば、次のコードを見てください
data = textscan(FID,'%f',4);
これは、浮動小数点値の照合を 4 回試行することを指定します。4 つの値を一致させた後、textscan
停止することに注意してください。簡単にするために、データ ファイルにデータのみが含まれている (つまり、ヘッダー行がない) と仮定して、そのコードを複数回実行すると、次の結果が得られます。
>> FID = fopen('datafile_noheaders.dat');
>> data_line1 = textscan(FID,'%f', 4)
data_line1 =
[4x1 double]
>> data_line1{1}'
ans =
1 2 3 4
>> data_line2 = textscan(FID,'%f', 4)
data_line2 =
[4x1 double]
>> data_line2{1}'
ans =
5 6 7 8
>> data_line3 = textscan(FID,'%f', 4)
data_line3 =
[4x1 double]
>> data_line3{1}'
ans =
9 10 11 12
>> data_line4 = textscan(FID,'%f', 4)
data_line4 =
[0x1 double]
>> fclose(FID);
textscan は、呼び出されるたびに「中断」したところから再開することに注意してください。この場合、textscan が呼び出される最初の 3 回で、データ ファイルから 1 行が返されます (4x1列のデータを含むセルの形式で)。4 番目の呼び出しは空のセルを返します。あなたが説明したユースケースでは、この形式は特に役に立ちません。
一番上に示した例は、あなたが達成しようとしているものに対して、より扱いやすい形式でデータを返す必要があります。この場合、データの各行の 4 つの浮動小数点値に一致し、このパターンに一致しなくなるまでテキストの各行を続行します。