Matlab 导入数据函数

Matlab 导入数据函数,matlab,nan,Matlab,Nan,我正在尝试导入数值数据以及最近添加到文件中的ASCI信息。我可以很好地将数值数据导入到数据结构中,但是MATLAB(R2014a)的importdata函数甚至不能识别写入的(事件)数据 我查阅了几年前关于这个问题的问题,但这些问题还没有得到真正的回答。根据这些建议,我尝试了:data\u temp=cell2mat(textscan(fopen('P:\FileName)),它引入了一个空矩阵,“load”函数和“importdata”函数。load函数失败,因为我的数据每行的列数不同 那么有

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

我查阅了几年前关于这个问题的问题,但这些问题还没有得到真正的回答。根据这些建议,我尝试了:
data\u temp=cell2mat(textscan(fopen('P:\FileName))
,它引入了一个空矩阵,“load”函数和“importdata”函数。load函数失败,因为我的数据每行的列数不同

那么有人知道引入最后几行数据的函数/解决方法吗?

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

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

409 0.000000 0.000000 0.000000 0.000000

4100.0000000.0000000.0000000.0000000.000000

4110.0000000.0000000.0000000.000000

4120.0000000.0000000.0000000.000000

事件:LHS
帧数:2
第1帧:222 第2帧:327 事件:LTO
帧数:2
第1帧:181 第2帧:283 事件:RHS
帧数:2
第1帧:169 第2帧:274 事件:RTO
帧数:1
第1帧:232 事件:LHS FP
帧数:1
第1帧:222 事件:RHS FP
帧数:1
第1帧:169


谢谢你的时间和帮助

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

fid = fopen('filename.txt', 'r');
lines = {};
tline = fgets(fid);
while ischar( lines{end} )
    lines{end+1} = tline;
    tline = fgets(fid);
end
fclose(fid);
最终结果存储在'lines'变量中,如果需要,您可以进一步解析它们


参考。

您可以通过MATLAB的导入函数“importdata”导入.data文件,但它不会导入非标题的文本。此代码打开并逐行扫描文件,搜索文本“Event”。(我不能为这段代码负责——我的朋友为我写的,但我想为尝试做同样事情的人发布)


当数据格式复杂时,这是一种回退方法。但请注意,最好使用
~feof(fid)
检查退出条件。另请注意,根据输入文件的大小,使用
fread
一次读入一块数据,然后解析成行以进行进一步处理可能会更有效。@TimeString感谢您的评论。我从matlab示例/帮助部分看到了您的代码,我认为经过一些调整后,这将满足我的需要。我想我必须通过importdata引入数字数据(我的脚本已经按照我需要的方式处理了数据),但我必须为我的事件数据解决这个“fid”问题。@Setsu谢谢。我几乎已经为数字数据编写了整个脚本,并且它可以完美地导入。我只需要最近附加到文件上的额外信息。因此,我可能会使用“fgets”在数值数据停止后拉入行,一直拉到文件的末尾(数值数据后有一个空格,我可能可以向matlab发送信号)。
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);