用特殊字符在Matlab中读取文本文件

时间:2017-08-27 17:36:30

标签: matlab data-import

我在*.txt中有一个原始数据文件,我想用Matlab读取并使用适当的标题转换为excel。

原始数据

0.050265,202241546530,50397417,0-127,128-255,1300812
0.051295,202245273937,65971821,0-127,128-255,1300812
0.050893,202248987612,65466246,0-127,128-255,1300812
0.050906,202252718742,65606097,0-127,128-255,1295785
0.050924,202256444380,65667670,0-127,128-255,1295785

对于上述数据,csvread()有效但将数据放在多行中,如下所示:

0.0502650000000000  202241546530.000    50397417    0   -127    128
-255    1300812 0   0   0   0
0.0512950000000000  202245273937.000    65971821    0   -127    128
-255    1300812 0   0   0   0
0.0508930000000000  202248987612.000    65466246    0   -127    128
-255    1300812 0   0   0   0
0.0509060000000000  202252718742.000    65606097    0   -127    128
-255    1295785 0   0   0   0
0.0509240000000000  202256444380.000    65667670    0   -127    128
-255    1295785 0   0   0   0

导入后所需的数据格式

        C1               C2            C3      C4     C5      C6
0.0502650000000000 202241546530.000 50397417 0-127 128-255 1300812
0.0512950000000000 202245273937.000 65971821 0-127 128-255 1300812
0.0508930000000000 202248987612.000 65466246 0-127 128-255 1300812
0.0509060000000000 202252718742.000 65606097 0-127 128-255 1295785
0.0509240000000000 202256444380.000 65667670 0-127 128-255 1295785

我可以处理如何添加特定标题,但数据会分成多行,我认为由于特殊字符-

任何人都可以建议更好的方法将这些数据逐行读入Matlab吗?  感谢。

1 个答案:

答案 0 :(得分:3)

这对我有用

clear

% Names of input and output files
file_in = 'sample_data.txt';
xl_filename = 'output.xlsx';

% Number of columns (assumed fixed)
n_col = 6;

fIN = fopen(file_in,'r');

% Load each line of the file as cell, split by ',', convert into a table
% entry and add it to the table
tline = fgets(fIN);
res_table = cell2table(cell(0,n_col));
while (ischar(tline))
    res_table = [res_table ; cell2table(strsplit(tline,','))];
    tline = fgets(fIN);
end

% Change table headers and write to the excel file
res_table.Properties.VariableNames = {'C1' 'C2' 'C3' 'C4' 'C5' 'C6'}
writetable(res_table,xl_filename,'Sheet',1,'Range','A1');

fclose(fIN);

它一次读取文件行并将生成的单元格数组转换为表条目。因为它分裂为','' - '保持不变。 writetable将表格写入Excel工作表,工作表1从位置A1开始。您可以从不同的职位和工作表编号开始。该功能还有其他可能有用的选项。

此解决方案的缺点是您需要将电子表格显式转换为数字值,而另一方面,几乎是一个选择 - 一次点击过程。据我所知,直接在MATLAB中转换为数字并不简单,因为您的部分条目具有' - '。