1

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 つの数値を配列に読み込む必要があります。

助けてください。

ありがとう

4

2 に答える 2

5

ファイルの大部分がアプリケーションに関係がない場合は、お気に入りのスクリプト言語またはコマンド ライン ツールで前処理して関連する行を見つけ、その上で textscan() を使用することをお勧めします。

たとえば、シェルプロンプトから:

grep ^I_NEED_THIS_STRING infile > outfile

マトラブで:

fid = fopen('outfile');
C = textscan(fid, 'I_NEED_THIS_STRING = %f %f %f')
fclose(fid)

詳細については、textscan のドキュメントを参照してください。

于 2010-09-01T16:24:48.143 に答える
3

別の方法は、 IMPORTDATAを使用してファイル全体を文字列のセル配列(セルごとに1行)に読み込み、STRMATCHを使用して文字列を含むセルを検索し、SSCANF'I_NEED_THIS_STRING'を使用してそのセルから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のメモリを大量に消費する可能性があります。これを回避するには、ループと関数FGETSを使用して一度に1行ずつロードおよび解析します。

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
于 2010-09-01T17:00:05.060 に答える