2012-04-19 50 views
0

我對編程完全陌生,不知道自己在做什麼。我一整天都試圖讓sprintf命令工作。如果我理解正確的話,我需要初始化我希望它寫入文件,像這樣:爲什麼我的sprintf不能在matlab中工作?

recalltest = strcat('DRMRecall_',num2str(subNo),'.log'); 
fopen(recalltest, 'wt'); 
if recalltest == -1 
    error('Error opening log file'); 
end 

然後,定義我想寫到文件中的變量:

recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 

而且然後我嘗試在可變寫我的日誌文件:

sprintf(recalltest, '%s,', recall1); 
fclose('all'); 

有一個在每個那些之間的一堆東西,但我希望這些都是相關的零部件。日誌文件被創建,但無論我做什麼,我都無法寫入任何內容。我究竟做錯了什麼?

回答

1

sprintf將數據格式化爲字符串;我很驚訝代碼可以運行。你想fprintf輸出到一個文件。

+0

當我使用fprintf代替時,沒有什麼變化。 – nikipedia 2012-04-19 19:39:26

1

一些修補程序的代碼:

%測試代碼。

recalltest = strcat('DRMRecall_',num2str(subNo),'.log'); 
FileID = fopen(recalltest, 'wt'); 
if FileID == -1 
    error('Error opening log file'); 
end 

%測試代碼結束。

%這裏是你的GetEchoString函數調用。如果此代碼失敗,原因可能在於此函數調用或函數本身。

%未經測試的代碼。

recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 

%未測試代碼結束。

您在您的fprintf呼叫中有'%s,',該號碼在字符串recall1後面打印,。 如果這是您的目的,請將,放回到下一個代碼行。但是您也可以在打印前使用strcat將其添加到recall1

%測試代碼。

fprintf(FileID, '%s', recall1); 
fclose(FileID); 

%測試代碼結束。

通常,您可以使用fprintf進行所有打印,包括文件和屏幕。要打印到文件中,函數調用fprintf中的第一個參數必須是FileID,在MATLAB文檔和其他地方通常被稱爲fidFileIDfid不是文件的名稱,它只是fopen返回的數字,它只在fopen和相關的fclose之間有效。它不是一個與特定文件或文件內容相關的常量,因此您必須始終存儲返回的值fopen以便能夠讀取或寫入文件。

sprintf不會在任何地方打印任何內容,既不是屏幕也不是任何文件,它只會將數據格式化爲字符串,正如sprintf文檔中所述。可以使用disp在屏幕上打印sprintf輸出(它是第一個返回值,第二個是err)。

+0

謝謝,文件ID位解決了它。 – nikipedia 2012-04-19 20:49:57

0
recalltest = sprintf('DRMRecall_%d.log', subNo); % usage of sprintf to create a string 
fid = fopen(recalltest, 'wt'); 
assert(fid ~= -1, 'Error opening log file'); % save if... 
recall1 = GetEchoString(w, 'List 1: ', 20, 800, 1); 
fprintf(fid, '%s\n', recall1); % usage of fprintf to write to a file 
fclose(fid); 
相關問題