2012-01-10 5 views
7

textscan()を使用してテーブルからデータを読み込んでいます。テーブルには90個のカラムがあり、各カラムの値を浮動小数点数として読みたいと思います。ドキュメントを見て、私は指定%fを使用する必要があります - 私はそれを90回使用する必要があるようですので、私はこれで終わる:基本的に動作します`textscan`の大きなテーブルの各カラムに変換指定子を入力しないでください

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'); 

を、私はいくつかの方法があるかどうかを疑問に思って私のテーブルにあるすべての列の型指定子を避けるためです。

答えて

11

利用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); 
+0

優秀、これは私が必要とするものです、歓声! –

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');

+0

うーんを私はセル配列にそれを読む必要があるとも 'FIDを使用しながら、このソリューションは、行列にデータを読み込みます'識別子(' textscan'がします)。 –

+0

関数[mat2cell](http://www.mathworks.fr/help/techdoc/ref/mat2cell.html)を使用して、行列をセル配列に変換することができます。ファイル識別子に関しては、ファイル名も利用可能である場合が多く、問題のコンテキストに含まれていない場合は、Andrew JankeとOliの答えがうまくいきます。これは単なる代替手段です。 – Aabaz

2

あなただけの唯一の「%fを」との関数textscanを行い、その後、あなたが望むようにそれを再構築することができますあなたが好きなもしくは細胞への変換:

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

私は使用を示唆している:。

fileId=fopen('fileloc.txt'); 
formatSpec='%f'; 
N=90; 
data=textscan(fileId,formatSpec,N); 
+0

このコードは最初の行でのみ読み込まれます。ファイルのすべての行を読み込むには、それをループする必要があります。 – goryh