将文本框中的多行字符串标记打印到文件中

Printing a multi-line String token from Textbox into file

在编写 Matlab 指南时,我想使用文本框从用户那里获取输入,然后将此输入打印到一个文件中以用于许多事情。

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

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

我使用了代码:

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

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

这是因为 Matlab 组织数组索引的方式。如果我简化你的例子,你输入:

aaaa
bbbb
cccc

在您的文本框中。当您使用 get 检索此字符串时,请查看 returned 的变量类型。不是简单的string,而是char的二维数组。在上面的示例中,它是一个 [3x4] 数组。

请注意,如果每行的长度不同,Matlab 将用空白字符填充最短的行,直到所有行的长度都相同。

当你使用fprintf时,Matlab会依次写入变量中包含的所有值。但是没有具体说明,它是按列顺序执行的(Matlab是列主要索引,这意味着它从上到下,然后从左到右计算索引)。

为了避免这种情况,您应该在将 string/matrix 发送到 fprintf 之前转置它。但在此之前,你必须在每一行的末尾添加一个 newline 字符 (char(10)) (矩阵的列一旦转置),因为 Matlab没有 return 来自编辑框中的字符串。

这样做:

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