2016-08-23 7 views
-1

matlabにインポートするテキストファイルが多すぎます。 129013個のファイル!変数番号129013を受け入れない、もちろんMATLABにインポートするデータが多すぎます

for i=1:129013 
k=importdata('filename.txt') 
eval(['A', num2str(i) , ' = ' ,k) ,';']); 
end 
whos 

: iは、次のコードを使用していました。

問題はコードですか?どのように多くの変数が定義されていますか?

ありがとうございます!あなたはが本当にeval(あなたはいけない)を使用してを主張すれば

+0

これは、各ファイルをループの極端な恐ろしいプロセスである、あなたが前に、CMD/bashのを使用して1つのファイルにすべてのTXTファイルを結合しない理由その1ファイルをロードしていますか? – GameOfThrows

+1

まず最初に、同じファイルを何度も何度もインポートしています。なぜここでevalを使用しますか?セルに入れるか行列を追加するか、ユースケースは何でも... – Algar

+0

ファイルは独立しており、組み合わせるべきではありません。 私は 'eval'の変数を定義するために使用しました。 ????はどのように使用しますか? – farideh

答えて

3

まず第一に、あなたは文字列でk(データ)を連結しようとしているので、問題を持ってしようとしています。

['A', num2str(i) , ' = ' ,k) ,';'] 

あなたは代わりに、あなたがロードされたkを参照するk文字列を連結します。

eval(['A', num2str(i), '= k;']); 

はまた、多分あなたの本当のコードが異なっているが、あなたが何度も同じファイルfilename.txt)をロードしていることが表示されます。

このように、evalを使用してワークスペースに何千もの変数を作成することは非常に貧弱なアプローチであり、これらの変数を使用したい場合はさらにevalの使用が必要になります。 また、R2015bより古いMATLABのバージョンでは、MATLABが2^16変数に制限されているため、作成しようとする変数をいくつでも作成することはできません。

セル配列を使用してデータを保存するほうがずっと良いでしょう。

for k = 1:129013 
    A{k} = importdata(sprintf('filename%d.txt', k)); 
end 
+0

NOT RUN ::警告:エスケープシーケンス 'u'は無効です。有効なエスケープ シーケンスについては、 'help sprintf'を参照してください。 importdataを使用しているエラー(行216) ファイルを読み込めません。 より複雑な形式の場合は、TEXTSCANまたはFREADを使用します。 原因: フリーダを使用しているエラー 無効なファイル識別子です。有効なファイル識別子を生成するには、fopenを使用します。 – farideh

0

次のように問題が解決されました:

for k = 1:129013 
fid=sprintf('%d.txt', k); 
    A{k} = importdata(['filename',fid]); 
end 
関連する問題