Как я могу прочитать текстовый файл и загрузить данные в массив? - PullRequest
1 голос
/ 09 мая 2019

У меня есть файл .txt следующего формата:

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**

Итак, я хочу отсканировать файл и извлечь время в массив всякий раз, когда появляется в строке «уровень XXX». После этого я хочу прочитать соответствующий уровень и сохранить в другом массиве, чтобы нарисовать графику с обоими.

Я попробовал функции: textscan и strfind, но это не работает. Ребята, вы можете мне помочь?

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Вы можете использовать регулярное выражение:

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'}

Вы можете увидеть, как работает регулярное выражение здесь .

0 голосов
/ 09 мая 2019

Это просто отображает значение для 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);
...