「textscan」の大きなテーブルのすべての列の変換仕様を入力しないでください

StackOverflow https://stackoverflow.com/questions/8805685

  •  26-10-2019
  •  | 
  •  

質問

私は使用してテーブルからデータを読んでいます 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');

これは基本的に機能しますが、テーブルにあるすべての列のタイピング仕様を避けるために何らかの方法があるかどうか疑問に思っています。

役に立ちましたか?

解決

使用する 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);

他のヒント

既知の区切り文字によって区切られた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');

「%f」のみでテキストスカンを実行してから、必要に応じて再シャープするか、必要に応じてセルに変換できます。

fid=fopen('bla.txt','r');
M=textscan(fid,'%f')
M=reshape(M{1},[],5)
M=num2cell(M,1)
fclose(fid);

使用をお勧めします:

fileId=fopen('fileloc.txt');
formatSpec='%f';
N=90;
data=textscan(fileId,formatSpec,N);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top