导入数据函数
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'变量中,需要时可以进一步解析。
您可以通过 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);
我正在尝试导入数值数据以及最近添加到文件中的 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'变量中,需要时可以进一步解析。
您可以通过 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);