Если вы не привязаны к этому построчному подходу, можно - например - также использовать fileread
и regexp
, чтобы получить все строкифайла, измените их и, наконец, сохраните их обратно в файл.
Это будет мое решение:
% Read whole content of file as text
C = fileread('data.dat');
% Split at every new line character; Caveat: Windows vs. Unix vs. MacOS
C = regexp(C, '\r\n', 'split').'
% Find line numbers of @controls lines
idx = find(strcmp('@controls', C))
% Replace following lines with desired values
act = [1, 0, 8, -2; 0, 1, 2, 3];
for id = 1:numel(idx)
C{idx(id)+1} = sprintf('act= %d,%d,%d,%d', act(id, :));
end
C
% Save file
fid = fopen('data.dat', 'r+');
fprintf(fid, '%s\r\n', C{:});
fclose(fid);
Я использовал модифицированный data.dat
, например:
@motion parameters
speed= 22,30,60
range= 600
rotation= 50
@controls
act= 2,3,4,5
@controls
act= 2,3,4,5
После выполнения приведенного выше сценария результат выглядит следующим образом:
@motion parameters
speed= 22,30,60
range= 600
rotation= 50
@controls
act= 1,0,8,-2
@controls
act= 0,1,2,3
В своем вопросе вы описали желаемый результат как:
act= 1,0,8,-2
Но в вашемкод, который у вас есть
textLine = 'act= %4.1f,%4.1f,%4.1f,%4.1f\n ';
Поэтому, при необходимости, адаптируйте спецификатор формата в соответствии с вашими потребностями.
Надеюсь, это поможет!