从Base64文本文件中删除所有CRLF

时间:2019-03-15 08:05:45

标签: delphi

如何从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;

2 个答案:

答案 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;
相关问题