Matlab写入TXT文件时换行符\n失效问题求助
Matlab写入TXT文件换行异常及参数匹配问题解决
问题根源分析
- 占位符与参数数量不匹配:你的
pattern包含2个%s和3个%d,共5个占位符,但调用fprintf时仅传入res一个参数。res是拼接后的字符串,仅能填充第一个%s,剩余4个占位符无对应参数,导致输出格式完全混乱,换行逻辑失效。 - 循环变量未传入:你原本打算将第三个
%d替换为循环变量k,但代码中从未将k作为参数传给fprintf,该占位符无法获取正确值。 - 文件名不一致:
fopen目标文件是date_and_values.txt,但assert错误提示里写的是долбоеб.txt,若文件打开失败,错误信息会误导排查。 - 参数传递方式错误:你将日期和数值拼接成单个字符串传入
fprintf,但fprintf要求为每个占位符单独传入对应参数,而非拼接后的整体。
修正后的代码
% 修正格式字符串,确保占位符与后续参数一一对应 pattern = [ ... 'Date %s - First %d \n', ... 'Date %s - Second %d \n', ... '%d, \n', ... '*ENDDO\n\n']; t = datetime('now'); [fid, msg] = fopen('date_and_values.txt', 'wt'); % 统一assert中的文件名,与fopen保持一致 assert(fid ~= -1, 'Cannot open file %s: %s', 'date_and_values.txt', msg); formatOut = 'dd.mm.yy'; % 直接用datetime的Format属性转换字符串,替代datestr更高效直观 dateString = char(datetime(t, 'Format', formatOut)); disp(dateString); % 循环中为每个占位符传入对应参数 for k = 1:17 % 参数顺序对应pattern中的占位符:%s, %d, %s, %d, %d fprintf(fid, pattern, dateString, 1, dateString, 2, k); end fclose(fid);
修正说明
修正后每个占位符都能获取到正确的参数,\n换行符会正常生效,输出格式将符合你的预期。同时优化了日期字符串的生成方式,统一了错误提示中的文件名,避免不必要的排查干扰。
内容的提问来源于stack exchange,提问作者Count Zero
相关产品推荐
相关产品推荐

