2015-05-07 5 views
0

Работая над руководством Matlab, я хочу взять данные от пользователя, используя текстовое поле, а затем распечатать этот ввод в файле, чтобы использовать его во многих вещах.Печать многострочного токена строки из текстового поля в файл

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

Теперь мне интересно, как напечатать эту многострочную строку в файл с тем же самым форматом?

Я использовал код:

fid = fopen('GUIDATA.txt','wt'); 
fprintf(fid,'%s',get(handles.equations,'String')); 
fclose(fid); 

и вот результат: http://i.stack.imgur.com/Zp1jX.jpg на праве ввода текстового поля и на левом приведённом текстовый файл

ответ

0

Это происходит из-за пути 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); 
+0

Спасибо, Хоки! теперь это работает. –

+0

@MahmoudYusuf, проверьте мое редактирование, возможно, оно более полезно для вас. – Hoki

+0

большое спасибо! –

Смежные вопросы