导入数据函数

Importdata function

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

我从几年前就开始查找有关此问题的问题,但尚未真正得到解答。根据这些建议,我尝试过:data_temp = cell2mat(textscan(fopen('P:\FileName))) 引入空矩阵,'load' 函数与 'importdata' 相对。加载函数失败,因为我的数据每行的列数不同。

那么有谁知道 function/work-around 可以把最后几行数据带进来吗?

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

这是一个示例数据文件 - 包含行 1:412 行数值数据和行 413:437 行事件数据:

409 0.000000 0.000000 0.000000 0.000000

410 0.000000 0.000000 0.000000 0.000000

411 0.000000 0.000000 0.000000 0.000000

412 0.000000 0.000000 0.000000 0.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

感谢您的宝贵时间和帮助!

我不确定你的最终目标,因为这不是一个纯数字文件,即一些数字混合在事件块的行中。因此,我不确定您是想提取行内的数字,还是只是询问如何读取所有行并存储在一个变量中,如 readlines() in python。我假设你问的属于后者。我猜你可以 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'变量中,需要时可以进一步解析。

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

您可以通过 MATLAB 的导入函数 'importdata' 导入 .data 文件,但它不会导入非 headers 的文本。此代码打开并逐行扫描文件以搜索文本 'Event'。 (我不能相信这段代码是我朋友为我写的,但我想 post 为试图做同样事情的人写)

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);