我有一个文本文件,其中包含3个数字的字符串,我需要读入MATLAB。
例如:
#######################
#
#
# 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个数字读入数组。
请帮助。
由于
答案 0 :(得分: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 documentation。
答案 1 :(得分:3)
另一种方法是使用IMPORTDATA将整个文件读入字符串的单元格数组(每个单元格一行),然后使用STRMATCH查找包含字符串{{1}的单元格然后使用SSCANF从该单元格中提取3个值:
'I_NEED_THIS_STRING'
如果文件在你感兴趣的行之前或之后可能有很多的无用文本,那么你可以通过将它们全部加载到变量中来消耗大量内存。您可以通过使用循环和函数FGETS一次加载和解析一行来避免这种情况:
>> 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