读取文本分隔文件并在matlab中写入excel

时间:2018-02-07 21:09:08

标签: matlab text textscan

我有一个这种格式的txt文件:
Right,28772.163,39356.163,1,Speaker1 sp,39356.163,49499.163,99,Speaker1 sp,129129.21,147210.21,99,Speaker2 Next step is,147210.21,160881.21,1,Speaker2 surgery's,160881.21,181608.21,1,Speaker2

它继续(它有1016行)。我想将其转换为excel文件。我尝试了以下

fileID = fopen('test_datum.txt');
C = textscan(fileID,'%s %f32 %f32 %d8 %s');

但它将数据插入1016X5单元格。我想稍后将此单元格写入excel文件 谢谢

2 个答案:

答案 0 :(得分:1)

textscan函数有时可能很难处理。数据格式很难定义,并且倾向于将数据塞入单元格向量(将结果重新排序为单个单元格矩阵有点烦人)。我建议您使用readtable function代替:

T = readtable('data.txt')


     Var1           Var2         Var3       Var4       Var5   
______________    _________    _________    ____    __________

'Right'           28772.163    39356.163     1      'Speaker1'
'sp'              39356.163    49499.163    99      'Speaker1'
'sp'              129129.21    147210.21    99      'Speaker2'
'Next step is'    147210.21    160881.21     1      'Speaker2'
'surgery's'       160881.21    181608.21     1      'Speaker2'

如果您的Matlab版本大于或等于R2016b,您可以先在该文件上运行detectImportOptions function。可以根据您的需要调整扫描结果(您可以更改变量名称,变量类型,缺失值的默认值等):

opts = detectImportOptions('data.txt');

% the previous values where char, double, double, double, char
opts.VariableTypes = {'char' 'single' 'single' 'int8' 'char'};
% alternatively, this can be used:
% opts = setvartype(opts,{'char' 'single' 'single' 'int8' 'char'})

T = readtable('data.txt',opts)


     Var1           Var2        Var3      Var4       Var5   
______________    ________    ________    ____    __________

'Right'           28772.16    39356.16     1      'Speaker1'
'sp'              39356.16    49499.16    99      'Speaker1'
'sp'              129129.2    147210.2    99      'Speaker2'
'Next step is'    147210.2    160881.2     1      'Speaker2'
'surgery's'       160881.2    181608.2     1      'Speaker2'

最重要的是,表格很容易导出到Excel文件。您所要做的就是使用writetable function并使用适当的设置。

答案 1 :(得分:1)

这是一种替代的,更简单的方法,让MATLAB函数自动处理更多的数据处理:

% read the file into a table
T = readtable('test_datum.txt');

% convert the table to a cell array
C = table2cell(T);

% write the cell array to an Excel file
xlswrite('output.xlsx', C);