为什么我的sprintf不在matlab中工作?

时间:2012-04-19 19:33:18

标签: matlab printf

我对编程完全不熟悉,也不知道我在做什么。我整天都在试图让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');

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

3 个答案:

答案 0 :(得分:1)

sprintf将数据格式化为字符串;代码运行我感到很惊讶。您希望fprintf输出到文件。

答案 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文档和其他地方通常称为fidFileIDfid不是文件的名称,它只是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);