使用Matlab指南,我希望使用文本框从用户那里获取输入,然后将此输入打印在文件中以便在很多方面使用它。
文本框中输入字符串包含多行的问题。 当我将它打印到一个文件时,它打印为一行字符串,并在程序逐列打印时进行排序。 我尝试使用控制台的get控件显示我从文本框字符串中获取的字符串,并且显示正确。
现在我想知道如何将多行字符串打印成具有相同格式的文件?
我使用了代码:
fid = fopen('GUIDATA.txt','wt');
fprintf(fid,'%s',get(handles.equations,'String'));
fclose(fid);
结果如下: http://i.stack.imgur.com/Zp1jX.jpg 右侧是文本框输入,左侧是结果文本文件
答案 0 :(得分:0)
这是因为Matlab组织其数组索引的方式。如果我简化您的示例,请键入:
aaaa
bbbb
cccc
在您的文本框中。使用get
检索此字符串时,请查看返回的变量的类型。它不是简单的string
,而是char
的2D数组。在上面的例子中,它是一个[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);