我对编程完全不熟悉,也不知道我在做什么。我整天都在试图让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');
每一个之间都有很多东西,但我希望这些都是相关的部分。日志文件被创建,但无论我做什么,我都无法写入任何内容。我做错了什么?
答案 0 :(得分:1)
答案 1 :(得分: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,'
来电中有fprintf
,在字符串,
后打印recall1
。
如果这是您的目的,请将,
放回下一个代码行。但您也可以在打印前使用recall1
将其添加到strcat
。
%测试代码。
fprintf(FileID, '%s', recall1);
fclose(FileID);
%测试代码结束。
通常,您可以使用fprintf
进行所有打印,包括文件和屏幕打印。要打印到文件,fprintf
函数调用中的第一个参数必须是FileID
,在MATLAB文档和其他地方通常称为fid
。 FileID
或fid
不是文件的名称,它只是fopen
返回的一个数字,它仅在fopen
和相关的fclose
之间有效。它不是与特定文件或文件内容相关的常量,因此您必须始终存储返回的值fopen
以便能够读取或写入文件。
sprintf
不会在屏幕上或任何文件中打印任何内容,它只会将数据格式化为字符串,如sprintf
文档中所述。可以使用sprintf
在屏幕上打印err
输出(它是第一个返回的值,第二个是disp
)。
答案 2 :(得分: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);