2016-01-19 37 views
1

我有一個39x4細胞:寫入單元格到一個文本文件

'ID' 'x' 'y' 'z' 
459  34 -49 -20 
464  36 -38 -22 
639  40 -47 -27 
719  35 -52 -20 
725  42 -45 -18 
727  46 -47 -26 
... 

我想寫這一切到一個文本文件中。我已經試過如下:

fileID = fopen('test2.txt','w'); 
formatSpec='%s %d %d %d'; 
fprintf(fileID,formatSpec,P{:}); 
fclose(fileID); 

但是,如果我這樣做,我得到fprintf中沒有爲「細胞」輸入定義的錯誤。我已經看到了幾個像這樣的例子,關於如何這個關於如何write cell array of combined string and numerical input into text file的例子,但是如果沒有一些笨重的修改,它們似乎不太適合。

有人可以幫忙嗎?

回答

0

您的錯誤是由於您的單元格數組的第一行僅包含字符串而其他行僅包含數字。您的格式說明符當前假定每行寫入的第一個元素是一個字符串,而其他元素是整數。你必須適應一個特殊情況,寫入第一行只包含字符串。

像這樣的東西應該工作:在格式說明第一行

%// Open the file for writing 
fileID = fopen('test2.txt','w'); 

%// First write the headers to file 
fprintf(fileID, '%s %s %s %s\n', P{1,:}); 

%// Transpose because writing is done in column-major order 
Pt = P.'; %' 

%// Now write each row to file 
fprintf(fileID, '%d %d %d %d\n', Pt{:,2:end}); 

%// Close the file 
fclose(fileID); 

拿筆記完全由字符串,那麼格式說明的行只包含整數之後。另外請注意,我需要轉置單元陣列,因爲使用fprintf自然會按列 - 主要順序寫入矩陣,所以爲了以行爲主要方式編寫矩陣,轉換在打印前需要,我們還需要訪問您的數據列而不是要容納的行。

+0

謝謝你,rayryeng。處理標題的行不起作用。當我運行'fprintf(fileID,'%s%s%s%s \ n',P {1,:});'我仍然得到fprintf沒有爲單元格輸入定義的錯誤。我錯過了什麼嗎? –

+0

@ A.Rainer代碼適用於我......我聲明'P'是你的代碼中的單元陣列。我很困惑,爲什麼你會得到這個錯誤。 – rayryeng

+0

這也可能與您正在使用的MATLAB版本有關。你使用的是什麼MATLAB版本? – rayryeng

0

該錯誤是最有可能被起因於在下面的一行代碼:

fprintf(fileID,formatSpec,P{:}); % P{:} returns all the cells in P matrix 

另外,formatSpec您指定不會爲所有的行工作,因爲第一排是不同的格式。您需要兩次fprintf調用:

fprintf(fileID,'%s %s %s %s\n',P{1,:}); 
fprintf(fileID,'%d %d %d %d\n',P{2:end,:}); 
+0

請注意,使用矩陣的'fprintf'以列主要順序訪問元素。您需要轉置'P',然後將第二列轉到最後一列,以便將其正確寫入文件。 – rayryeng

相關問題