将文本框中的多行字符串标记打印到文件中
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);
在编写 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);