如何从特定单词从Matlab读取txt

时间:2018-09-11 19:49:29

标签: matlab readfile

我必须阅读此txt文件:

#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)读取txt文件。

2 个答案:

答案 0 :(得分:0)

类似

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

答案 1 :(得分:0)

如果文件不是太大,则可以将其加载为字符数组并使用正则表达式进行解析。如果您希望代码在内存上高效并且可以扩展到任何文件大小,则可能不是最佳方法,但是IMO却非常简单。

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

这很简单,正则表达式会根据您决定格式化文件的方式而改变,但这应该使您朝着正确的方向前进。如果您更好地格式化文件,则可以使用更漂亮的表达式。