Matlab写入txt文件换行失效 混合文本矩阵格式保留问题
问题原因
Windows系统原生文本换行标记为\r\n(回车符+换行符组合),类Unix系统(Linux/macOS等)的换行标记为单独的\n。
- Matlab内置的
type命令兼容两种换行格式,因此在Matlab环境内查看文件时排版显示正常 - 旧版Windows自带记事本(txt文件默认打开程序)仅识别
\r\n作为换行标记,无法识别单独的\n,因此所有内容会被拼接为单行。
你之前尝试的dlmwrite函数仅支持纯数值矩阵写入,无法满足文本说明、数值向量混合写入的需求,无需使用该方案。
解决方案
方法1:fopen指定文本模式(改动最小,推荐)
将文件打开参数从'w'修改为'wt'即可,参数中的t代表文本写入模式,Matlab会自动根据当前运行系统转换换行符格式,Windows平台下写入的\n会被自动转换为系统可识别的\r\n,无需修改后续所有fprintf语句。
修正后可直接运行的完整代码:
n = 5; Length = 10; s = [1;0;1;0]; t = 0.6; % 仅修改fopen打开模式为wt Test = fopen('Test.txt', 'wt'); fprintf(Test,'TSP Problem Size is: %d \n', n); fprintf(Test,'Optimal Length is: %.5f \n', Length); fprintf(Test,'Time To Solve in seconds is: %f \n', t); fprintf(Test,'Solution is: \n'); % 原代码size(s)返回二维维度值,建议指定取第一维长度,避免向量为行向量时循环次数错误 for i=1:size(s,1) fprintf(Test,'%.0f\n', s(i)); end fclose(Test);
运行生成的文件,无论在Matlab内通过type命令查看,还是双击通过Windows资源管理器调用记事本打开,都能保留预期排版,解向量的每个值单独占一行。
方法2:手动指定Windows格式换行符
如果需要固定生成Windows标准格式的文本文件,不依赖系统自动转换,可以将所有fprintf语句中的\n替换为\r\n,文件打开模式仍保留'w'即可,核心代码片段示例:
Test = fopen('Test.txt', 'w'); fprintf(Test,'TSP Problem Size is: %d \r\n', n); fprintf(Test,'Optimal Length is: %.5f \r\n', Length); fprintf(Test,'Time To Solve in seconds is: %f \r\n', t); fprintf(Test,'Solution is: \r\n'); for i=1:size(s,1) fprintf(Test,'%.0f\r\n', s(i)); end fclose(Test);
补充:Windows 10 1809及更新版本的记事本已经支持识别
\n格式换行符,如果使用新版系统仍出现单行显示问题,优先检查文件打开模式、文件写入后是否正常执行fclose关闭文件流即可。
内容的提问来源于stack exchange,提问作者RHH
相关产品推荐
相关产品推荐

