如何从Base64文本文件中删除一个中的所有CRLF,使其内容仅在一行上显示?
以下代码使用函数NoLineFeed,以及TStringStream和AnsiString的组合,但是在文件内容由NoLineFeed处理之后(在文件末尾附近)仍然存在一些CRLF。
函数NoLineFeed摘自Arnaud Bouchez的StackOverflow帖子:Make String into only 1 line
var
StringVal: AnsiString;
XmlFile: TStringStream;
begin
XmlFile := TStringStream.Create;
try
XmlFile.LoadFromFile('file.txt');
StringVal := NoLineFeed(XmlFile.DataString);
if Length(StringVal) > 0 then
XmlFile.Write(StringVal[1], Length(StringVal));
XmlFile.SaveToFile('converted_file.txt');
finally
XmlFile.Free;
end;
end;
{ Arnaud Bouchez }
function NoLineFeed(const s: string): string;
var i: integer;
begin
result := s;
for i := length(result) downto 1 do
if ord(result[i])<32 then
if (i>1) and (ord(result[i-1])<=32) then
delete(result,i,1) else
result[i] := ' ';
end;
答案 0 :(得分:2)
使用TStringList
的另一种方法:
var
lst: TStringList;
begin
lst := TStringList.Create;
try
lst.LoadFromFile('file.txt');
lst.LineBreak := ' ';
lst.SaveToFile('converted_file.txt');
finally
lst.Free;
end;
end;
答案 1 :(得分:0)
换行符和回车符并不总是在一起,有时换行符有时没有回车符,这可能是剩下的换行符,只需分别删除#13个字符和#10个字符即可解决此问题,请尝试以下代码:
var
StringVal: AnsiString;
XmlFile: TStringStream;
begin
XmlFile := TStringStream.Create;
try
XmlFile.LoadFromFile('file.txt');
StringVal := StringReplace(XmlFile.DataString, #13, ' ', [rfReplaceAll]);
StringVal := StringReplace(StringVal, #10, '', [rfReplaceAll]);
if Length(StringVal) > 0 then
XmlFile.Write(StringVal[1], Length(StringVal));
XmlFile.SaveToFile('converted_file.txt');
finally
XmlFile.Free;
end;
end;