Как сохранить несколько раз без перезаписи файла - PullRequest
0 голосов
/ 02 мая 2019

У меня проблема с моим кодом в 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

1 Ответ

1 голос
/ 02 мая 2019

Пример в вашем вопросе довольно неясен, потому что вы спрашиваете о сохранении данных, но все ваши инструкции по открытию файла используют только чтение разрешений.

Я дамВы пример, который подходит для вашего 2-го (более короткого) примера, потому что он более понятен, чего вы пытаетесь достичь.

Я настоятельно рекомендую прочитать документацию для:

  • fopen и, в частности, использование параметра permission.
  • fprintf параметр formatSpec будет полезен.

Вооружившись этой документацией, вы поймете, что запись в существующий файл, уже содержащий данные, называется добавление к файлу.Так что для вашего использования: при первом создании файла откройте его с разрешением 'w'.Все остальное время вы хотите добавить (= 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
...