如何多次保存而不覆盖文件
How to save several times without overwriting the file
我的 matlab 代码有问题。
我有一个矩阵 C(将形状重塑为一个向量),我想将几个 C 向量保存到一个文件中。这是我的代码
wynik = reshape(C',1,[]);
fileID = fopen('Desktop\test.txt','r');
fileID_out = fopen('Desktop\test_out.txt','r');
fprintf(fileID, '%d \r', wynik);
fprintf(fileID, '\n');
fprintf(fileID_out, ' %d \r\n', 2);
end
我在开始时做了一个循环,所以在控制台中我有例如 2 个不同的矩阵,但是使用这段代码它会覆盖我的文件并且我只保存最后一个向量。我想要这样的东西(较短的例子)
A = [ 1 2 3; 4 5 6 ](第一个循环)
A = [7 8 9; 1 2 3 ](第二个循环)
在我的文件中(值之间有空格,行尾有 \n):
1 2 3 4 5 6
7 8 9 1 2 3
你问题中的例子很不清楚,因为你问的是保存数据,但你所有的文件打开指令只使用阅读权限。
我会给你一个适用于你的第二个(较短的)例子的例子,因为它更清楚你想要达到的目标。
我强烈建议阅读以下文档:
有了该文档,您将意识到写入已包含数据的现有文件称为 append 到文件。因此,对于您的用法:第一次创建文件时,使用 'w'
权限打开它。对于所有其他时间你想 add (=append) 一些东西到文件,打开它有权限'a'
,然后正常写入。
你的第二个代码示例:
%% Initial data
A = [1,2,3;4,5,6];
%% prepare format specifier for a complete line
nElem = numel(A) ;
baseformat = '%d ' ; % base number format
writeFormat = repmat( baseformat , 1 , nElem ) ; % replicated "nElem" times
writeFormat = [writeFormat(1:end-1) '\n'] ; % remove last trailing space and replace by newline
% => now writeFormat = "%d %d %d %d %d %d\n"
%% Open the file the first time to write the first line
% permission 'w' => Open or create new file for writing. Discard existing contents, if any.
fidout = fopen('myfileout.txt', 'w') ;
fprintf( fidout , writeFormat , A(:) ) ;
fclose(fidout) ;
%% Now let's write 5 additional lines
for iLine=1:5
% simulate a different matrix [A]
A = A + nElem ; % A will continue counting
% permission 'a' => Open or create new file for writing. Append data to the end of the file.
fidout = fopen('myfileout.txt', 'a') ;
fprintf( fidout , writeFormat , A(:) ) ;
fclose(fidout) ;
end
应该会给你文件 myfileout.txt
,包含:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
我的 matlab 代码有问题。 我有一个矩阵 C(将形状重塑为一个向量),我想将几个 C 向量保存到一个文件中。这是我的代码
wynik = reshape(C',1,[]);
fileID = fopen('Desktop\test.txt','r');
fileID_out = fopen('Desktop\test_out.txt','r');
fprintf(fileID, '%d \r', wynik);
fprintf(fileID, '\n');
fprintf(fileID_out, ' %d \r\n', 2);
end
我在开始时做了一个循环,所以在控制台中我有例如 2 个不同的矩阵,但是使用这段代码它会覆盖我的文件并且我只保存最后一个向量。我想要这样的东西(较短的例子) A = [ 1 2 3; 4 5 6 ](第一个循环) A = [7 8 9; 1 2 3 ](第二个循环) 在我的文件中(值之间有空格,行尾有 \n):
1 2 3 4 5 6
7 8 9 1 2 3
你问题中的例子很不清楚,因为你问的是保存数据,但你所有的文件打开指令只使用阅读权限。
我会给你一个适用于你的第二个(较短的)例子的例子,因为它更清楚你想要达到的目标。
我强烈建议阅读以下文档:
有了该文档,您将意识到写入已包含数据的现有文件称为 append 到文件。因此,对于您的用法:第一次创建文件时,使用 'w'
权限打开它。对于所有其他时间你想 add (=append) 一些东西到文件,打开它有权限'a'
,然后正常写入。
你的第二个代码示例:
%% Initial data
A = [1,2,3;4,5,6];
%% prepare format specifier for a complete line
nElem = numel(A) ;
baseformat = '%d ' ; % base number format
writeFormat = repmat( baseformat , 1 , nElem ) ; % replicated "nElem" times
writeFormat = [writeFormat(1:end-1) '\n'] ; % remove last trailing space and replace by newline
% => now writeFormat = "%d %d %d %d %d %d\n"
%% Open the file the first time to write the first line
% permission 'w' => Open or create new file for writing. Discard existing contents, if any.
fidout = fopen('myfileout.txt', 'w') ;
fprintf( fidout , writeFormat , A(:) ) ;
fclose(fidout) ;
%% Now let's write 5 additional lines
for iLine=1:5
% simulate a different matrix [A]
A = A + nElem ; % A will continue counting
% permission 'a' => Open or create new file for writing. Append data to the end of the file.
fidout = fopen('myfileout.txt', 'a') ;
fprintf( fidout , writeFormat , A(:) ) ;
fclose(fidout) ;
end
应该会给你文件 myfileout.txt
,包含:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36