0

我对编程完全陌生,不知道自己在做什么。我整天都在试图让 sprintf 命令工作。如果我理解正确,我需要初始化我希望它写入的文件,如下所示:

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');

每一个之间都有很多东西,但我希望这些都是相关的部分。日志文件被创建,但无论我做什么,我都无法写入任何内容。我究竟做错了什么?

4

3 回答 3

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);

% 未测试代码结束。

'%s,'在你的电话中,它在 string 之后fprintf打印。如果这是您的目的,请放回下一个代码行。但是您也可以在打印前使用它来添加它。,recall1,recall1strcat

% 测试代码。

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

% 测试代码结束。

通常,您可以fprintf用于所有打印,包括文件和屏幕。要打印到文件,fprintf函数调用中的第一个参数必须是FileID,这通常fid在 MATLAB 文档和其他地方调用。FileIDorfid不是文件名,fopen只是. 它不是与特定文件或文件内容相关的常量,因此您必须存储always 的返回值才能读取或写入文件。fopenfclosefopen

sprintf不会在任何地方打印任何东西,既不会打印到屏幕上也不会打印到任何文件,它只会将数据格式化为字符串,正如它在sprintf文档中所说的那样。sprintf输出(它的第一个返回值,第二个是err)可以通过使用打印在屏幕上disp

于 2012-04-19T20:21:32.997 回答
1

sprintf将数据格式化为字符串;我很惊讶代码完全运行。你想fprintf输出到一个文件。

于 2012-04-19T19:35:07.043 回答
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);
于 2012-04-19T20:54:34.840 回答