1

次のようなデータについて:

学生ID | テスト1 | テスト2 | テスト3

1 91.5 89.2 77.3

2 88.0 67.8 91.0

3 76.3 78.1 92.5

4 96.4 81.2 84.6

私が使用する場合

fileID = fopen('grades.txt');
formatSpec = '%s';
N = 4;
C_text = textscan(fileID, formatSpec, N, 'delimiter', '|');

次に、 Matlab はフォーマットを使用して列ヘッダーを'%s'4 回読み取ります。

しかし、どうすれば次のような簡単な方法で書くことができますか

textscan(fileID, '%f %f %f %f %f %f %f %*f %f %f %f %f %f %f %f', 'delimiter', '|'); 最初の 7 つの浮動小数点数を読み取り、8 番目を無視して最後の 7 つの浮動小数点数を読み取りたいのはどこですか?

4

1 に答える 1

2

1 つの方法は、フォーマット文字列をハードコーディングするのではなく、動的に生成することです。

formatSpec = [repmat('%f', 1, 7), '%*f', repmat('%f', 1, 7)];

その後、このフォーマット文字列を に渡すことができますtextscan

別のアプローチは、数値を含む行を文字列として読み取り、 を使用してそれらを数値に変換し、str2num不要な列を破棄することです。次のようになります。

C = textscan(fileID, '%s', 'delimiter', '\n');
vals = cell2mat(cellfun(@str2num, C{:}, 'UniformOutput', false));
vals(:, 8) = [];

PSファイルの先頭の行をスキップするオプションがある
ことをご存知ですか?textscanHeaderLines

于 2013-07-08T15:18:38.427 に答える