如何读取文本文件并将数据加载到数组?

时间:2019-05-09 14:04:33

标签: matlab textscan

我有一个.txt文件,该文件遵循以下格式:

Social Science

因此,只要出现在“级别XXX”行中,我都希望扫描文件并将时间提取到数组中。 在此之后,我想阅读对应的级别并保存在另一个数组中以同时绘制图形。

我尝试了以下功能:00:00.300 ID:4 zzzzzzzzzzz 00:02.155 ID:4 aaaaaaaaaaaaa 00:04.662 ID:4 dsadasd **00:32.283** ID:4 level **790** 00:32.155 ID:4 Sfghgfs 00:32.200 ID:4 Tsdfsdfdfsff **00:32.205** ID:4 level **640** 00:32.206 ID:4 Sadssd 00:32.208 ID:4 asdasgsfgsgsagsa 00:32.210 ID:4 adasgx 00:32.212 ID:4 Masddasdas. **01:40:40.698** ID:4 level **500** textscan,但是它不起作用。 你们可以帮我吗?

2 个答案:

答案 0 :(得分:3)

您可以使用正则表达式:

raw = fileread('mytext.txt');
tokens = regexp(raw,'((?:\d{2}:)?\d{2}:\d{2}\.\d{3})[^\n]+level[^\d]+(\d{3})','tokens');
tokens = [tokens{:}];
timestamps = tokens(1:2:end);
levels = tokens(2:2:end);

检查输出:

>> timestamps

timestamps =

  1×3 cell array

    {'00:32.283'}    {'00:32.205'}    {'01:40:40.698'}

>> levels

levels =

  1×3 cell array

    {'790'}    {'640'}    {'500'}

您可以查看正则表达式的工作原理here

答案 1 :(得分:0)

这仅显示time_stamp和级别的值。之后,随时将它们传递给您想要的任何东西。

ff = fopen('filename.txt');

while ~feof(ff)
    A = fgetl(ff);
    if contains(A,'level')
    time_stamp = sscanf(A,'%s ID:4 break_here') % the 'break_here' string is intended to not match the text in the file
    level = sscanf(A,strcat(time_stamp,' ID:4 level %f'))
    end
end
fclose(ff);