Как прочитать текст из Matlab из конкретного слова - PullRequest
0 голосов
/ 11 сентября 2018

Мне нужно прочитать этот текстовый файл:

#Acceleration force along the x y z axes (including gravity).
#timestamp(ns),x,y,z(m/s^2)
#Datetime: 05/07/2013 11:27:39
##########################################
#Activity: 12 - BSC - Back sitting chair - 10s
#Subject ID: 1
#First Name: sub1
#Last Name: sub1
#Age: 32
#Height(cm): 180
#Weight(kg): 85
#Gender: Male
##########################################


@DATA 
2318482693000, 0.89064306, -9.576807, -0.019153614 2318492108000, 0.91937345, -9.595961, -0.05746084 2318503365000,
    0.8714894, -9.595961, -0.05746084 2318512831000, 0.8523358, -9.643845, -0.038307227 2318523222000, 0.8714894, -9.634268, -0.05746084 2318533156000, 0.90979666, -9.634268, -0.019153614 2318553207000,
    0.9672575, -9.634268, -0.009576807 2318563306000, 0.93852705, -9.672575, -0.009576807 2318575332000, 0.9672575, -9.682152, -0.009576807 2318584933000, 0.9672575, -9.662998, -0.009576807 2318595971000, 0.9576807, -9.634268, 0.009576807

И я должен сохранить числа после слова "@DATA" в векторе.Я не знаю, как прочитать текстовый файл из определенного слова (в данном случае @DATA).

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Если файл не слишком большой, вы можете загрузить его как массив символов и использовать регулярное выражение для его анализа. Возможно, это не лучший метод, если вы хотите, чтобы код был эффективным в памяти и масштабировался до любого размера файла, но, по-моему, это очень просто.

txt = fileread(file);
valList = regexp(txt, '@DATA\n([\d\n\, \.-]+)', 'tokens');
vals = strsplit(valList{1}{1}, ', ');

Это довольно быстро и грязно, и регулярное выражение будет меняться в зависимости от того, как вы решите отформатировать файл, но это должно привести вас в правильном направлении. Если вы отформатируете файл более красиво, вы, вероятно, можете использовать более красивое выражение.

0 голосов
/ 12 сентября 2018

что-то вроде

fid = fopen('yourfile.extension');
while ~feof(fid)
    tline = fgetl(fid);
    disp(tline) %just for debugging purposes
    if strncmp("@DATA",tline,5)
      break
    end
end
while ~feof(fid)
%start reading your data with fscanf for example
end

И никогда не забывайте, что ваш поисковик - ваш друг ...

https://fr.mathworks.com/help/matlab/characters-and-strings.html

https://fr.mathworks.com/help/matlab/ref/feof.html

https://fr.mathworks.com/help/matlab/ref/fscanf.html

https://fr.mathworks.com/help/matlab/ref/fgetl.html

https://fr.mathworks.com/help/matlab/ref/strncmp.html

...