在Matlab中检索文本文件内容信息
我有一个包含300行的.txt文件。例如,第一行是:在Matlab中检索文本文件内容信息,matlab,Matlab,我有一个包含300行的.txt文件。例如,第一行是: ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16 或者第二行是: ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18 只有“时间”和“文件”值是数字,其他值是字符串 我想将整个300行的“correct”、“time”、“guess”、“ac
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
或者第二行是:
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
只有“时间”和“文件”值是数字,其他值是字符串
我想将整个300行的“correct”、“time”、“guess”、“action”和“file”的值存储在不同的变量中(比如一些数组)
如何在Matlab中执行此操作?使用
fgetl
获取文件的一行,同时循环读取所有行
对于每一行,使用regexp
将字符串按:
和,
分隔符划分为单元格。然后,使用strip
删除每个单元格的前导空格和尾随空格
以下是解决方案:
f = fopen('a.txt');
aline = fgetl(f);
i = 1;
while ischar(aline)
content = strip(regexp(aline,':|,','split'));
correct{i} = content{3};
time(i) = str2double(content{5});
guess{i}= content{7};
action{i} = content{9};
file(i) = str2double(content{11});
i = i + 1;
aline = fgetl(f);
end
fclose(f);
例如:
假设一个.txt文件如下所示
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
执行脚本后,将显示结果
correct =
1×2 cell array
'yes' 'no'
time =
6.8807 7.1504
guess =
1×2 cell array
'Lay' 'Put on top'
action =
1×2 cell array
'Lay' 'Stir'
file =
16 18
使用fgetl
获取文件的一行,使用while
循环读取所有行
对于每一行,使用regexp
将字符串按:
和,
分隔符划分为单元格。然后,使用strip
删除每个单元格的前导空格和尾随空格
以下是解决方案:
f = fopen('a.txt');
aline = fgetl(f);
i = 1;
while ischar(aline)
content = strip(regexp(aline,':|,','split'));
correct{i} = content{3};
time(i) = str2double(content{5});
guess{i}= content{7};
action{i} = content{9};
file(i) = str2double(content{11});
i = i + 1;
aline = fgetl(f);
end
fclose(f);
例如:
假设一个.txt文件如下所示
ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
执行脚本后,将显示结果
correct =
1×2 cell array
'yes' 'no'
time =
6.8807 7.1504
guess =
1×2 cell array
'Lay' 'Put on top'
action =
1×2 cell array
'Lay' 'Stir'
file =
16 18
备选案文1:
您可以使用以下选项:
其中,fileID
是通过获取的文件标识符
备选案文2:
另一个选项是使用上述格式(直接使用文件名,无文件ID):
结果(忽略这些值,因为我在玩这个示例时稍微弄乱了它):
选项2的优点是表格比单元格数组(是textscan
的输出)更能保存这些数据。选项1:
您可以使用以下选项:
其中,fileID
是通过获取的文件标识符
备选案文2:
另一个选项是使用上述格式(直接使用文件名,无文件ID):
结果(忽略这些值,因为我在玩这个示例时稍微弄乱了它):
选项2的优点是表格比单元格数组(它是textscan
的输出)更能保存这些数据。学到了一些新东西。textscan
非常优雅。谢谢你的回答。当我使用“选项1”时,数据将以这样的形式出现:data={1x1 cell}[6.8807]{1x1 cell}{1x1 cell}[0x1 double],但如何从这些数据中检索时间、正确性等信息?首先,最好使用选项2。其次,您应该为数据中的每个字段键入:correct=data{1}
,time=data{2}
等等,直到5(文件)。非常感谢您的帮助和建议:)您必须检查您的数据格式是否正确,与上面所写的格式完全相同。另一个选择是编码问题,但从这个错误中的信息很难判断。学到了一些新的东西。textscan
非常优雅。谢谢你的回答。当我使用“选项1”时,数据将以这样的形式出现:data={1x1 cell}[6.8807]{1x1 cell}{1x1 cell}[0x1 double],但如何从这些数据中检索时间、正确性等信息?首先,最好使用选项2。其次,您应该为数据中的每个字段键入:correct=data{1}
,time=data{2}
等等,直到5(文件)。非常感谢您的帮助和建议:)您必须检查您的数据格式是否正确,与上面所写的格式完全相同。另一个选择是编码问题,但很难从这个错误中的信息来判断。