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()。

例如,从 shell 提示符:

grep ^I_NEED_THIS_STRING infile > outfile

在matlab中:

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

有关详细信息,请参阅textscan 文档

于 2010-09-01T16:24:48.143 回答
3

另一种方法是使用IMPORTDATA将整个文件读入字符串单元格数组(每个单元格一行),然后使用STRMATCH查找包含字符串的单元格'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 中的大量内存。您可以通过使用循环和函数FGETS一次加载和解析一行来避免这种情况:

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 回答