2017-03-16 37 views
1

我想在循環中將多個單元格數組寫出到Matlab中的csvs。 單元格數組包含字符串和數字。 我的問題是,他們中的一些有時包含字符串和數字: 例如:海拔可以記錄爲'200'或'200米'...這意味着我不能指定%f或a%因爲在某些情況下,這將是錯誤的,並寫出錯誤。 下面是我使用的是什麼:如何在Matlab中寫出csv之前將單元格標識爲字符串或數字或兩者都有

fid = fopen('test.csv', 'w') ; 
fprintf(fid, '%s,\t', csvdata{1,1:end}) ; 
fprintf(fid,'\n,%f, %f, %f,%f, %f, %s,%s, %f, %f,%s, %f, %s,%s, %f, %s,%s, %s, %s,%s, %s,%s,%s,%s',csvdata{2,:}); 
fclose all 

是否有可以用來識別字符串和數字的字符?或者還有另一種方法可以使代碼更加靈活,以便在數據不是預期的時候能夠識別數字?

回答

2

您可以通過檢查數據類型來製作您的格式字符串。在下面的例子中,我把輸出的第一行,並檢查每個元素是否是一個字符(ischar)或不。對於字符,這會產生0,對於字符產生1。然後,我添加1,非字符變成1,字符變成2。然後我用它來索引一個包含格式說明符的單元格數組。最後,我使用strjoin加入格式字符串和逗號。

% Get a 1 for numeric data and 2 for character data 
inds = cellfun(@ischar, csvdata(2,:)) + 1; 

% Create an array of format specifiers to index into 
formats = {'%f', '"%s"'}; 

% Index into this array of format specifiers (also append a newline like you've shown) 
formatparts = {'\n', formats{inds}}; 

% Join everything together with commas 
formatstr = strjoin(formatparts, ','); 

% Go ahead and write out the data 
fprintf(fid, formatstr, csvdata{2,:}); 
+0

感謝您的建議。第一行似乎不起作用?我知道它缺少一個支架,但事實並非如此。我得到這個錯誤:'錯誤使用subsindex 功能的'subsindex'沒有定義類'細胞'的值。另外,當你引用csvdata {2,1}時,是否在循環中分配'inds'?我是否需要用表示循環數的變量替換1(j索引)? – new2matlab

+0

@ new2matlab糟糕,這是一個錯字。現在應該修復 – Suever

+0

謝謝@Suever ...但是,格式現在正在拋出一個錯誤:錯誤使用strjoin(53行) 第一個輸入必須是1xN單元格的字符串數組。我認爲這是因爲格式部分是1x2格式的格式部分'格式部分' – new2matlab

相關問題