2017-08-27 138 views
3

我在*.txt中有一個原始數據文件,我想用Matlab讀取它,並用適當的頭文件轉換爲excel。用特殊字符在Matlab中讀取文本文件

原始數據

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

[「該文件必須只包含數字值。」](https://www.mathworks.com/help/matlab/ref/csvread.html)您正在導入數值以外的內容。 – beaker

+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電子表格,Sheet 1從A1開始。您可以從不同的位置和圖紙編號開始。該功能還有其他可能有用的選項。

該解決方案的缺點是您需要將電子表格顯式轉換爲數值,而另一方面,這幾乎是一個選擇 - 一次點擊過程。據我所知,直接在MATLAB中轉換爲數字並不簡單,因爲你的一些條目有' - '。