2016-01-28 31 views
1

我想導入CSV文件(data.csv),其結構如下導入CSV文件,標誌着

Area,MTU,Biomass MW,Lignite MW 
CTA|DE(50Hertz),"01.01.2015 00:00 - 01.01.2015 00:15 (CET)","1227","6485" 
CTA|DE(50Hertz),"01.01.2015 00:15 - 01.01.2015 00:30 (CET)","","6421" 
CTA|DE(50Hertz),"01.01.2015 00:30 - 01.01.2015 00:45 (CET)","1230","n/e" 
CTA|DE(50Hertz),"01.01.2015 00:45 - 01.01.2015 01:00 (CET)","N/A","6299" 

我試着使用textscan這工作得很好,但過程一旦空引號到達停止。論點'EmptyValue',0不起作用。

file = fopen('data.csv'); 
data = textscan(file, '%q %q "%f" "%f"', 'Delimiter', ',',... 
    'headerlines', 1,'TreatAsEmpty', {'N/A', 'n/e'}, 'EmptyValue',0); 
fclose(file); 

任何想法,關於如何導入整個文件。

+0

「TreatAsEmpty」,{'N/A','n/e',''}'有效嗎? – Dan

+0

我已經試過了。不起作用 –

+0

這並不理想,但您可以使用''%q%q%q%q'作爲'formatSpec'並在導入後進行轉換。 – excaza

回答

1
textscan(file,'%q%q%q%q%[^\n\r]','Delimiter',',','headerlines',1); 

對我來說工作得很好。你會得到如下的值:「01.01.2015 00:00 - 01.01.2015 00:15(CET)」但是爲了編寫一個單獨的解析器,這些都是微不足道的。不要試圖一步到位。那會讓你感到痛苦和痛苦。將其分解成簡單的單個步驟。另外,我強烈建議在matlab的「當前文件夾」窗口中右鍵單擊你的文件,然後選擇「導入數據」。這使導入CSV(或製表符分隔或固定寬度的數據文件)變得微不足道。

+0

爲什麼'%[^ \ n \ r]'?有什麼好處? –

+0

這就是導入數據工具添加的內容。但是,我懷疑它匹配與第一部分不匹配的所有行。因此,(例如)額外的空格或虛假的字段不能解析分析。 – John