2009-06-03 12 views
4

ファイルをワークスペースにロードせずに.datファイルの長さを(行単位で)調べる方法はありますか?MATLABでファイルの長さを取得する方法は?

+2

方法をこのファイル形式に対して定義された「行」ですか? 1行に1行、\ nで終了するテキストファイルですか?または固定長のバイナリレコード?または、他の何か? –

答えて

12

私はあなたが行の数を見つけることに言及しているので、あなたがテキストファイルを扱っていると仮定しています。 ここでは一つの解決策だ:

fid = fopen('your_file.dat','rt'); 
nLines = 0; 
while (fgets(fid) ~= -1), 
    nLines = nLines+1; 
end 
fclose(fid); 

は、これは、読み込み線の数を数え、それぞれの行を読み取るためにFGETSを使用しています。ファイルからのデータは決してワークスペースに保存されず、単にwhileループの条件チェックで使用されることに注意してください。 Linux上で、あなたが(返されたテキストからの行数を取得し、その後

[s,w] = system('wc -l your_file.dat'); 

をコマンドを使用してできるよう

3

それは、また、あなたのファイルシステムの内蔵コマンドを使用することができ念頭に価値がどのwに格納されます)。 (私はWindowsで同等のコマンドがないと思う。)

+2

そのようにすれば、コマンドwcの戻り値(つまり、0または0の異なる)を取得し、ファイル名と連結した行数の文字列を返します。 [nlines fname] = strtok(w、 '') –

18

行カウンタ - だけの行ごとに1文字読み込みます:

Nrows = numel(textread('mydata.txt','%1c%*[^\n]')) 

またはファイルの長さ(Matlabの):

datfileh = fopen(fullfile(path, filename)); 
fseek(datfileh, 0,'eof'); 
filelength = ftell(datfileh); 
fclose(datfileh); 
+0

この行カウンターはきれいです。投稿ありがとう! – ephsmith

+5

testreadは将来のMatlab版で削除されます。対応するバージョンのtextscanは* nrows = numel(cell2mat(textscan(fid、 '%1c%* [^ \ n]')))*です。 –

+0

@ YantaoXie、Alex K.、このメソッドは、 'fgets()'で行を数えるよりもはるかに高速です。 1Mラインのテレメトリファイルを処理する場合、数秒で保存されます。 – ysap

関連する問題