ファイルの大部分がテキストである場合、MATLAB の「Textscan」を使用して一連の数値を読み取るにはどうすればよいですか?
質問
MATLAB に読み込む必要がある 3 つの数値の文字列を含むテキスト ファイルがあります。
例えば:
#######################
#
#
# Text Text Text
#
#
#######################
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
I_NEED_THIS_STRING = 1234.5 6789.0 1234.5 !Comment blah blah blah
これら 3 つの数値を配列に読み取る必要があります。
助けてください。
ありがとう
解決
ファイルのほとんどは、アプリケーションとは無関係であるならば、私はその上)(関連する行を見つけ、textscanを使用するためにあなたの好きなスクリプト言語やコマンドラインツールを使用して前処理をお勧めします。
例えば、シェルからのプロンプト:ます。
grep ^I_NEED_THIS_STRING infile > outfile
MathWorks社のMATLABでの
fid = fopen('outfile');
C = textscan(fid, 'I_NEED_THIS_STRING = %f %f %f')
fclose(fid)
の詳細については、関数textscanドキュメントを参照してください。ます。
他のヒント
代わりに使用するのは、 インポートデータ ファイル全体を文字列のセル配列 (セルごとに 1 行) に読み取り、次を使用します。 ストラマッチ 文字列を含むセルを見つけるには 'I_NEED_THIS_STRING'
, 、次に使用します SSCANF そのセルから 3 つの値を抽出するには:
>> data = importdata('mostly_useless_text.txt','\n'); %# Load the data
>> index = strmatch('I_NEED_THIS_STRING',data); %# Find the index of the cell
%# containing the string
>> values = sscanf(data{index},'I_NEED_THIS_STRING = %f %f %f') %# Read values
values =
1.0e+003 *
1.2345
6.7890
1.2345
ファイルに潜在的な可能性がある場合は、 たくさん 関心のある行の前後に無駄なテキストが含まれている場合、それをすべて変数に読み込むことで MATLAB のメモリを大量に消費する可能性があります。これを回避するには、ループと関数を使用して一度に 1 行をロードして解析します。 FGET:
fid = fopen('mostly_useless_text.txt','r'); %# Open the file
newLine = fgets(fid); %# Get the first line
while newLine ~= -1 %# While EOF hasn't been reached
if strmatch('I_NEED_THIS_STRING',newLine) %# Test for a match
values = sscanf(newLine,'I_NEED_THIS_STRING = %f %f %f'); %# Read values
break %# Exit the loop
end
newLine = fgets(fid); %# Get the next line
end
fclose(fid); %# Close the file
所属していません StackOverflow