使用loadFromFile()函数加载文件

Loading a file with the LoadFromFile () function with a newline

本文关键字:加载 文件 函数 loadFromFile 使用      更新时间:2023-10-16

i使用LoadFromFile()函数加载文本文件.txt,并且线中间的文本用Newline 'n'标记。LoadFromFile()函数将该字符视为新线路,并通过创建新线路将该线路划分在该位置。在Windows系统中,文本看起来像这样:**Ala has ace**加载此文件的程序看起来不同:

plik->LoadFromFile( path,  TEncoding::ASCII);
for( short int i = 0; i < plik->Count; ++i )
   Memo1->Lines->Add( plik->Strings[i] );

备忘录中的文本看起来像这样:

**Ala**
**has ace**

我可以删除 'n'字符以制作整个行吗?

我今天早些时候在embarcadero论坛上回答了同样的问题,但我也会在这里回答。

plikTStringList(根据其他讨论),因此当TStrings::LineBreak属性与RTL的全局sLineBreak常数匹配时,其LoadFrom...()方法对待Bare-CR,Bare-LF和CRLF线平均断裂。如果LineBreak属性与sLineBreak不匹配,则TStrings仅在与其LineBreak属性匹配的线路断裂上分配。

由于RTL的sLineBreak常数是Windows上的CRLF,而您却不想要在Bare-LF线路上分开,您将不得不解析文件数据手动,根本不使用TStrings::LoadFromFile()

例如,您可以使用System::Classes::TStreamReader::ReadToEnd()System::Ioutils::TFile::ReadAllText()方法将整个文件读取到System::String中(TStreamReaderTFile都有用于读取行的方法,但它们都同样对待所有三种形式的线路断开),然后分析String在忽略任何裸lf字符的同时提取CRLF划分的子字符串。

理想情况下,您可以使用自己的LoadFromFile()方法将文件加载到TMemo中。但是,在这种情况下,这也不起作用,因为TMemo在将数据传递给Win32 API之前将所有三种形式的线路断裂归一化为CRLF,因此这对您无用。