我有一个充满ascii数据的文件。如何将字符串附加到文件的第一行?我找不到使用fopen的那种功能(它似乎只在最后附加而没有别的。)
答案 0 :(得分:10)
以下是纯MATLAB解决方案:
% write first line
dlmwrite('output.txt', 'string 1st line', 'delimiter', '')
% append rest of file
dlmwrite('output.txt', fileread('input.txt'), '-append', 'delimiter', '')
% overwrite on original file
movefile('output.txt', 'input.txt')
答案 1 :(得分:4)
我建议calling some system commands from within MATLAB。 Windows上的一种可能性是将新的文本行写入其自己的文件,然后使用DOS for command到concatenate the two files。以下是MATLAB中调用的内容:
!for %f in ("file1.txt", "file2.txt") do type "%f" >> "new.txt"
我使用!
(bang) operator从MATLAB中调用命令。上面的命令依次将“file1.txt”和“file2.txt”的内容传送到文件“new.txt”。请记住,您可能必须使用换行符结束第一个文件才能正确追加。
上述命令的另一种替代方法是:
!for %f in ("file2.txt") do type "%f" >> "file1.txt"
将“file2.txt”的内容附加到“file1.txt”,从而生成包含连接文本的“file1.txt”,而不是创建新文件。
如果您的文件名是字符串,则可以将该命令创建为字符串,并使用SYSTEM命令而不是!
运算符。例如:
a = 'file1.txt';
b = 'file2.txt';
system(['for %f in ("' b '") do type "%f" >> "' a '"']);
除Amro's之外,仅有一个MATLAB解决方案是:
dlmwrite('file.txt',['first line' 13 10 fileread('file.txt')],'delimiter','');
这使用FILEREAD将文本文件内容读入字符串,连接要添加的新行(以及用于回车符和换行符/新行的ASCII codes),然后使用DLMWRITE覆盖原始文件。
我觉得选项#1可能比这个纯文本文件的纯MATLAB解决方案执行得更快,但我不确定。 ;)
答案 2 :(得分:0)
如何使用frewind(fid)
函数将指针指向文件的开头?
我有类似的要求并尝试了frewind()
,然后是必要的fprintf()
声明。
但是,警告:它将覆盖第1行中的任何一行。因为在我的情况下,我是写文件的人,我在文件的开头放了一个虚拟数据,然后在结束时,让它在上面指定的操作之后被覆盖。
顺便说一下,即使我遇到这个解决方案的一个问题,根据虚拟数据和实际数据的长度(/大小),程序要么将部分虚拟数据留在同一行,要么带上我的新数据到第二行.. 在这方面的任何提示都非常感谢。