我有一个包含Linux风格换行符的字符串。Linux风格是#13,而Windows风格是#13#10。我想在TMemo中显示此字符串。看起来TMemo只接受Windows样式,并且不将#13视为新行。TMemo化新行的唯一方法是插入#10吗?或者我可以以某种方式要求TMemo按照Linux风格操作吗?
#13
#13#10
TMemo
#10
gfttwv5a1#
我想在备忘录中显示此字符串。看起来备忘录只接受Windows样式,并且不将#$13视为新行。这取决于您如何将string赋给Memo。TMemo Package 的基础Win32 EDIT控件仅在内部支持#13#10样式的换行符。如果您将string赋给TMemo.Text属性,它只会将string原样传递给基础Win32控件。因此,string只需要使用Windows样式的换行符。但是,如果将string分配给TMemo.Lines.Text属性,它会在内部将所有换行符的样式调整为Windows样式,然后将调整后的string提供给Win32控件。因此,在这方面,您可以同等地处理Linux样式和Windows样式的换行符。或者,TStringList类支持解析所有样式的换行符(当它的LineBreak属性与sLineBreak常量匹配时,默认情况下是这样的)。因此,另一个选项是首先将string赋给TStringList.Text属性,然后您可以将结果列表赋给TMemo.Lines属性。
string
EDIT
TMemo.Text
TMemo.Lines.Text
TStringList
LineBreak
sLineBreak
TStringList.Text
TMemo.Lines
niknxzdl2#
实际上,Linux风格是#10,而不是#13(#13是MacOS风格,AFAIK)。另外,请注意,它是#10,而不是#10(即#16)。最简单的方法是在加载/保存时替换线端,即,代替
Memo.Lines.LoadFromFile(FileName) or Memo.Lines.Text := STR;
做
uses System.IOUtils; Memo.Lines.Text := TFile.ReadAllText(FileName,TEncoding.UTF8).Replace(#13#10,#13).Replace(#10,#13).Replace(#13,#13#10) or Memo.Lines.Text := STR.Replace(#13#10,#13).Replace(#10,#13).Replace(#13,#13#10)
而不是
Memo.Lines.SaveToFile(FileName) or STR := Memo.Lines.Text
uses System.IOUtils; TFile.WriteAllText(Memo.Lines.Text.Replace(#13#10,#13),TEncoding.UTF8) or STR := Memo.Lines.Text.Replace(#13#10,#13)
当然,您应该用想要使用的适当编码替换TEncoding.UTF8。
2条答案
按热度按时间gfttwv5a1#
我想在备忘录中显示此字符串。看起来备忘录只接受Windows样式,并且不将#$13视为新行。
这取决于您如何将
string
赋给Memo。TMemo
Package 的基础Win32EDIT
控件仅在内部支持#13#10
样式的换行符。如果您将
string
赋给TMemo.Text
属性,它只会将string
原样传递给基础Win32控件。因此,string
只需要使用Windows样式的换行符。但是,如果将
string
分配给TMemo.Lines.Text
属性,它会在内部将所有换行符的样式调整为Windows样式,然后将调整后的string
提供给Win32控件。因此,在这方面,您可以同等地处理Linux样式和Windows样式的换行符。或者,
TStringList
类支持解析所有样式的换行符(当它的LineBreak
属性与sLineBreak
常量匹配时,默认情况下是这样的)。因此,另一个选项是首先将string
赋给TStringList.Text
属性,然后您可以将结果列表赋给TMemo.Lines
属性。niknxzdl2#
实际上,Linux风格是#10,而不是#13(#13是MacOS风格,AFAIK)。另外,请注意,它是#10,而不是#10(即#16)。
最简单的方法是在加载/保存时替换线端,即,代替
做
而不是
做
当然,您应该用想要使用的适当编码替换TEncoding.UTF8。