将多行String令牌从Textbox打印到文件中

时间:2015-05-07 11:51:01

标签: string matlab matlab-guide

使用Matlab指南,我希望使用文本框从用户那里获取输入,然后将此输入打印在文件中以便在很多方面使用它。

文本框中输入字符串包含多行的问题。 当我将它打印到一个文件时,它打印为一行字符串,并在程序逐列打印时进行排序。 我尝试使用控制台的get控件显示我从文本框字符串中获取的字符串,并且显示正确。

现在我想知道如何将多行字符串打印成具有相同格式的文件?

我使用了代码:

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

结果如下: http://i.stack.imgur.com/Zp1jX.jpg 右侧是文本框输入,左侧是结果文本文件

1 个答案:

答案 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);