Это происходит из-за пути Matlab организует индексацию своих массивов. Если я упрощу ваш пример, вы введете:
aaaa
bbbb
cccc
в текстовом поле. Когда вы извлекаете эту строку с помощью get
, посмотрите тип возвращаемой переменной. Это не простой string
, а 2D-массив char
. В случае вышеприведенного примера это массив [3x4].
Обратите внимание, что если каждая строка имеет одинаковую длину, Matlab будет заполнять кратчайшие строки пробельным символом, пока все линии не будут иметь одинаковую длину.
Когда вы используете fprintf
, Matlab будет записывать все значения, содержащиеся в переменной, последовательно. Но без конкретной инструкции он делает это в порядке столбцов (Matlab - это индексация столбца, это означает, что он подсчитывает индекс сверху вниз, затем слева направо).
Чтобы обойти это, вы должны перенести свою строку/матрицу, прежде чем отправлять ее на fprintf
. Но перед этим вам нужно добавить символ newline
(char(10)
) в конце каждой строки (столбец вашей матрицы после его транспонирования), потому что Matlab не вернул это из строки, которая была в поле редактирования.
Так делают:
str = get(handles.equations,'String') ;
str2print = [str.' ; repmat(char(10),1,size(str,1))] ; %// transpose and add newline character at the end of each column
fprintf(fid,'%s',str2print);
быстрый способ получить в файле (почти) ту же строку, вы имели в своем окне редактирования.
Редактировать, только в случае, если ваши линии не такой же длины, например:
aaa
bbbbb
cc
быстрая версия выше будет добавить много необходимых пробельных символов. Чтобы избавиться от этого, есть еще один способ, который, к сожалению, требует петли, но в результате получается более чистый.
cellLines = cellstr(get(handles.equations,'String')) ; %// retrieve each line in a cell
fid = fopen('GUIDATA.txt','wt');
for iline=1:size(cellLines,1)
fprintf(fid,'%s\n',cellLines{iline}); %// write each line of the cell array
end
fclose(fid);
Спасибо, Хоки! теперь это работает. –
@MahmoudYusuf, проверьте мое редактирование, возможно, оно более полезно для вас. – Hoki
большое спасибо! –