在matlab中读取文本失败

时间:2012-11-24 14:04:54

标签: matlab fopen

Reading: 2012-11-14 17:51:30.188000
Orient: 0.128638193011,0.485114246607,0.864937186241,0.347732484341
Gyro: -0.0267551075667,0.0950478315353,-0.131820827723
Accel: -0.199179515243,-0.979403376579,-0.0331153795123
Compass: 0.819754898548,-0.555078268051,-0.141031831503
Reading: 2012-11-14 17:51:30.300000
Orient: 0.102125242352,0.50507569313,0.85701161623,0.353488951921
Gyro: 0.0196692775935,0.134142056108,0.073423832655
Accel: -0.197360157967,-0.978824615479,-0.0543242283165
Compass: 0.823461055756,-0.549835622311,-0.139974221587

以上是我所拥有的.txt形式的数据......但当我尝试读取其中一行数据以在Matlab中显示时,我无法管理显示?

2 个答案:

答案 0 :(得分:0)

我不会给你解决方案,但我会指导你。

fid = fopen('C:\Users\KaeBin\Desktop\log.txt');
while ~feof(fid)
   line = fgets(fid);
   title = sscanf(line, ['%s:']);
   if strcmp(title, 'Gyro:')==1
     [name num]=strtok(line, ':');
     num=strtok(num, ':');
     nums_of_gyro=sscanf(num, '%f, %f, %f')
     ....
     ....
   end
   ...
   ...
end

<强>解释

我正在扫描第一行的文本文件,直到最后一行:

  • while ~feof(fid)我从文件的每一行读到了line
  • title = sscanf(line, ['%s:']);这里我提取了文本文件中的第一部作品。
  • if strcmp(title, 'Gyro:')==1现在我检查第一件作品是Gyro。如果是这样,那么我为我提取相关信息(在这种情况下是三个数字)。

现在你可以这样做从Accel中提取信息并进行一些操作。 您可以轻松编辑代码,添加和删除代码以实现目标。

我希望这会有所帮助。

答案 1 :(得分:0)

我会遵循这个程序(仅针对前两个文本行,但可扩展到整个文件):

clc, clear all, close all

fid = fopen(filename,'r');

A = textscan(fid,'%s','Delimiter','\r');

A = A{1};

a = A{1}(length('Reading')+2:end);
b = A{2}(length('Orient')+2:end);

这样您就可以将每个文本行的属性存储到一个唯一的数组中。

我希望这会有所帮助。