2012-02-12 47 views
2

我剛開始學習MATLAB和有困難的CSV文件導入到一個2-d陣列..MATLAB:如何導入具有混合數據類型的多個CSV文件

這是我需要的樣本CSV :(所有CSV文件都與固定列相同的格式)

Date,    Code,   Number.... 
2012/1/1,   00020.x1,    10 
2012/1/2,   00203.x1,   0300 
... 

由於csvread()只有整數的作品,我應該分別導入數字數據和文本數據或有任何快速的方法來導入多個CSV文件與混合數據類型

非常感謝!

回答

4

你在找什麼可能是功能xlsread

它打開Excel識別的任何文件,並自動將文本數據與數字數據分開。

問題是至少在我的電腦上的默認分隔符是;,而不是,(至少對於我在巴西的語言環境)。因此,xlsread會嘗試將文件中的字段與分開;,而不是你想要的逗號。

要更改您必須更改系統區域設置以將逗號添加爲列表分隔符。所以,如果你覺得喜歡它,在Windows Vista中,單擊開始,控制面板,區域和語言選項,自定義此格式,並從';'更改列表分隔符至 ','。在其他窗口上,過程應該幾乎相同。

這樣做之後,打字:

[num, txt, all] = xlsread('your_file.csv'); 

將返回類似:

num = 

10 
300 


txt = 

'01/01/2012' ' 00020.x1' 
'02/01/2012' ' 00203.x1' 


all = 

'01/01/2012' ' 00020.x1' [ 10] 
'02/01/2012' ' 00203.x1' [300] 

請注意,如果您的語言環境早已列表分隔設置爲「」,你不會有改變你的系統上的任何東西來完成這項工作。

如果你不想改變你的系統只使用xlsread功能,那麼你可以使用這裏所描述的textscan功能:http://www.mathworks.com/help/techdoc/ref/textscan.html

的問題是,它不是那樣簡單調用它,因爲你將不得不打開文件,迭代線條,並明確告訴matlab文件的格式。

致以問候

+0

工作!謝謝Castilho! 但是還有另外一個問題:新文件覆蓋舊文件....我試圖讀取幾個文件,但只有一個(最後一個已經被處理)它們被導入....這就是我所說的〜 p = dir('C:\ foldername \ *。csv'); for i = 1:length(p) [num,text,all] = xlsread(['C:\ foldername \',p(i).name]) – user1205030 2012-02-12 16:33:16

+0

嗨!我很高興它幫助!你現在遇到的問題是由於你如何實現循環。每次循環運行時,變量num,text和all都會被覆蓋。所有你需要做的就是讓循環每次運行一個賦值給一個不同的變量。 – Castilho 2012-02-12 17:11:13

0

我最近寫了一個函數來解決這個問題。請參閱delimread

值得注意的是,csv文件上的xlsread只能在windows中使用。在Linux或Mac上,xlsread以無法讀取csv文件的「基本」模式運行。在需要跨平臺遷移或在Linux服務器上自動運行代碼的情況下,在longrun中使用xlsread可能不是一個好主意。

xlsread也比其他文本解析函數慢得多,因爲它打開Excel會話來讀取文件。

相關問題