首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Importdata函数

Importdata函数
EN

Stack Overflow用户
提问于 2015-03-25 17:42:07
回答 2查看 456关注 0票数 0

我正在尝试导入数字数据以及ASCI信息,这是最近加到文件上的。我可以很好地将数值数据导入到数据结构中,但是MATLAB(R2014a)的重要数据函数甚至无法识别写入的(事件)数据。

我从几年前就发现了有关这个问题的问题,但这些问题并没有得到真正的回答。根据这些建议,我尝试过:引入空矩阵的data_temp = cell2mat(textscan(fopen('P:\FileName))),以及“load”函数和“importdata”。load函数失败,因为我的数据每行有不同的列数。

,那么,有人知道一个函数/工作方法来输入最后几行数据吗?

{我不想使用ImportWizard,因为这需要手动选择,而且我正在编写一个用户友好的代码,它通过GUI}输入数据文件。

下面是一个示例数据文件--有数值数据的行1:412和事件数据的行413:437:

409 0.000000 0.000000 0.000000

410 0.000000 0.000000 0.000000

411 0.000000 0.000000 0.000000

412 0.000000 0.000000 0.000000

活动: LHS

代码语言:javascript
复制
 Number of Frames:   2
代码语言:javascript
复制
     Frame 1:    222          Frame 2:    327  Event:  LTO
代码语言:javascript
复制
 Number of Frames:   2
代码语言:javascript
复制
     Frame 1:    181          Frame 2:    283  Event:  RHS
代码语言:javascript
复制
 Number of Frames:   2
代码语言:javascript
复制
     Frame 1:    169          Frame 2:    274  Event:  RTO
代码语言:javascript
复制
 Number of Frames:   1
代码语言:javascript
复制
     Frame 1:    232  Event:  LHS FP
代码语言:javascript
复制
 Number of Frames:   1
代码语言:javascript
复制
     Frame 1:    222  Event:  RHS FP
代码语言:javascript
复制
 Number of Frames:   1
代码语言:javascript
复制
     Frame 1:    169 

感谢您的时间和帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-25 18:00:02

我不确定您的最终目标,因为这不是一个纯数字文件,即在事件块中的行中混合了一些数字。因此,我不确定您是要在行中提取数字,还是询问如何读取所有行并存储在一个变量中,如python中的readlines()。我想你的要求属于后一种。我想您可以通过fgets()读取每一行,然后存储在一个单元格变量中。因此,代码的框架将是:

代码语言:javascript
复制
fid = fopen('filename.txt', 'r');
lines = {};
tline = fgets(fid);
while ischar( lines{end} )
    lines{end+1} = tline;
    tline = fgets(fid);
end
fclose(fid);

最后的结果存储在“line”变量中,如果需要,您可以进一步解析它们。

参考http://www.mathworks.com/help/matlab/ref/fgets.html

票数 1
EN

Stack Overflow用户

发布于 2015-03-31 14:25:37

您可以通过MATLAB的导入函数‘import .data’导入一个.data文件,但是它不会导入不是头文件的文本。此代码将打开并逐行扫描文件,搜索文本“事件”。(我不能把这段代码归功于我--我的朋友为我写的,但我想把它寄给试图做同样事情的人)

代码语言:javascript
复制
fn = ('file.data');

B = importdata(fn);
fid = fopen(fn);
tline = fgets(fid);
D=[];
while ischar(tline)  % while not at the end of file
    if strncmp(tline,'Event',5) % If the first 5 letters are 'Event'
        Evt=strtrim(strsplit(tline,'\t')); % find event name
        Evt=Evt{2};

    Nb = fgets(fid); % Get the number of frames
    Nb=sscanf(Nb,'  Number of Frames:   %d');
   F=[];
    for f=1:Nb % For each frame, get the frame number
        ln = fgets(fid);
        F(f)=sscanf(ln,['       Frame ' num2str(f) ':   %d']);
    end 
    D(end+1).Name   = Evt;
    D(end).Frames = F;
end
tline = fgets(fid);
end
fclose(fid);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29262773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档