加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用delphi从.log文件读取时,将“?tI”作为输出数据

发布时间:2020-12-15 09:31:57 所属栏目:大数据 来源:网络整理
导读:我试图从.log文件中读取数据并处理其内容.日志文件由另一个应用程序创建.当我在Delphi中使用readln命令并在备忘录中显示文件的内容时,我只从一个包含超过6000行数据的文件中获取一行数据(?tI). procedure TForm1.Button1Click(Sender: TObject); Var F : Tex
我试图从.log文件中读取数据并处理其内容.日志文件由另一个应用程序创建.当我在Delphi中使用readln命令并在备忘录中显示文件的内容时,我只从一个包含超过6000行数据的文件中获取一行数据(?tI).

procedure TForm1.Button1Click(Sender: TObject);
    Var
        F : TextFile;
        s : string;
    begin
        AssignFile(F,'data.log');
        Reset(F);

        while not Eof(F) do
        begin
            Readln(F,s);
            Memo1.Lines.Add(s);
        end;
    end;

有谁知道问题可能是什么?

解决方法

正如Michael所说,您正在处理UTF-16编码文件,因此您必须手动加载和解码它.有很多基于WideString的类似TStringList的类在线浮动,或者Borland在WideStrings单元中有自己的实现,尝试使用其中一个而不是Pascal文件I / O,例如:

procedure TForm1.Button1Click(Sender: TObject);
var
  SL : TWideStringList;
  I: Integer;
  s : string;
begin
  SL := TWideStringList.Create;
  try
    SL.LoadFromFile('data.log');
    Memo1.Lines.BeginUpdate;
    try
      for I := 0 to SL.Count-1 do
        Memo1.Lines.Add(SL[I]);
    finally
      Memo1.Lines.EndUpdate;
    end;
  finally
    SL.Free;
  end;
end;

要么:

uses
  ..,WideStrings;

procedure TForm1.Button1Click(Sender: TObject);
var
  SL : TWideStringList;
begin
  SL := TWideStringList.Create;
  try
    SL.LoadFromFile('data.log');
    Memo1.Lines.Assign(SL);
  finally
    SL.Free;
  end;
end;

或者,安装TNTWare或TMS的副本,这两个副本都具有启用Unicode的组件.然后你应该能够直接将.f文件LoadFromFile()直接添加到你选择使用的更多Unicode Memo组件中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读