2013-01-14 33 views
3

我正在閱讀許多csv文件並提取列1,6,8和20.分隔符是'「,」',因爲csv使用雙引號。除非某些數據被標記,否則這很有效,在這種情況下,所有內容都會被丟掉。數據示例:textscan列csv文件中列與旗標數據,分隔符問題

Date   Year Month Day Flag  Min T Flag Max T 

30/11/2007  2007 11  30  [Blank] -14.9 [Blank] -20.3 

01/12/2007  2007 12  1   *  -16  [Blank] -20.1 

腳本讀取完美的*,然後一切都轉移,所以我得到的是NaNs。

fid1 = fopen(File, 'r'); 
Date = textscan(fid1, '%q %*s %*[^\n]', 'Delimiter', ',', 'HeaderLines', 25); 
fclose(fid1); 
Date = datenum(Date{1, 1}, 'yyyy-mm-dd'); 
fid1 = fopen(File, 'r'); 

Data = textscan(fid1, '%*s %*s %*s %*s %f %f %*s %*s %*s %*s %*s %f %*[^\n]', 
'Delimiter', '","', 'HeaderLines', 25,'treatAsEmpty', {'M', '*', 'E', 'T', 'A', 'C', 
'L', 'N', 'Y', 'S', 'F'}, 'multipledelimsasone', true); 
fclose(fid1); 

,所以我想我的問題是:

我可以PREFORMAT每個文件有一個循環,除去標誌或改變textscan的標誌忽略讓我的分隔符的作品都在一起。

感謝您的輸入!

回答

0

'旗'是星號嗎?您可以使用終端命令一樣

Date = textscan(system(['sed "s/\*/ /g" ' File ]));

刪除星號和掃描的結果。

+0

有幾種不同的標誌,*是示例文件這部分中的標誌。 M,T,S,C等也作爲標誌出現。 –

+0

你只是想抓住日期? – RussH

+0

@RussH你無法確定是否安裝了'sed'。另外,如果有更簡單的本地解決方案(例如使用'regexp'的解決方案),最好不要避免使用'system'命令。 –