9

を使用してテーブルからデータを読み取っていますtextscan()。テーブルには 90 列あり、各列の値を浮動小数点数として読み取りたいと考えています。ドキュメントを見ると、指定子を%f使用する必要がありますが、90回使用する必要があるようです。

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

これは基本的には機能しますが、テーブルにあるすべての列に指定子を入力しないようにする方法があるかどうか疑問に思っています。

4

4 に答える 4

12

repmat列数に基づいてフォーマット文字列を作成するために使用します。

nCols = 60;
format = repmat('%f', [1 nCols]);
c = textscan(fid, format);

これは、たとえばいくつかの文字列列が混在している場合に使用するのに十分柔軟です。

nNumberCols = 58;
format = ['%s%s' repmat('%f', [1 nNumberCols])];
c = textscan(fid, format);
于 2012-01-10T16:17:31.893 に答える
3

既知の区切り文字で区切られた 90 列の浮動小数点数で構成される非常に単純な ASCII ファイルの場合、Matlab 関数を使用する方が簡単かもしれませんdlmread

たとえば、ファイル rand.txt が次の場合:

0.8147    0.0975    0.1576    0.1419    0.6557
0.9058    0.2785    0.9706    0.4218    0.0357
0.1270    0.5469    0.9572    0.9157    0.8491
0.9134    0.9575    0.4854    0.7922    0.9340
0.6324    0.9649    0.8003    0.9595    0.6787

以下を使用できます。randmat=dlmread('rand.txt');

于 2012-01-10T15:27:32.570 に答える
2

「%f」を1つだけ使用してテキストスキャンを実行し、必要に応じて形状を変更したり、必要に応じてセルに変換したりできます。

fid=fopen('bla.txt','r');
M=textscan(fid,'%f')
M=reshape(M{1},[],5)
M=num2cell(M,1)
fclose(fid);
于 2012-01-10T16:12:12.930 に答える
1

私は使用をお勧めします:

fileId=fopen('fileloc.txt');
formatSpec='%f';
N=90;
data=textscan(fileId,formatSpec,N);
于 2014-10-20T09:46:28.013 に答える