微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Lazarus 将 html 表文件打开到字符串网格中?

如何解决如何使用 Lazarus 将 html 表文件打开到字符串网格中?

我是新来的,所以请随时就我的提问方式提供反馈。

对于学校的一个项目,我需要使用 Lazarus 在 stringgrid 中打开带有表格的 html 文件。我的老师说我需要使用pos来定位html标签,使用<th><tr>我应该可以定义行和列,但我觉得很难。

我还没有解决这个问题,我还停留在早期阶段。我正在尝试查看我的 pos 是否正常工作,但实际上并没有。我的想法是:点击 Button1 将打开 OpenDialog1。然后我选择一个 html 文件,我的程序将搜索 Pos('<th',filename) 中的文本(请参阅包含的代码)。该文本的位置将放在 Label1 中。

我收到此错误

unit1.pas(46,30) Error: Incompatible type for arg no. 2: Got "TStringList",expected "Variant"

所以我的子问题是:如何在文件中使用 pos

这是我使用的代码。随意提问并提供反馈。提前致谢!

procedure HtmlToGrid(Grid: TStringGrid; const FileName: string; Sender: TObject);
var
  TextFile,Line: TStringList;
  Row: Integer;
  Col: Integer;
  prob: Integer;
begin
  Grid.RowCount := 0;  //clear any prevIoUs data
  TextFile := TStringList.Create;
  Textfile.LoadFromFile(filename);
  prob := Pos('<th',TextFile);
  if (Sender is TLabel) then
    TLabel(Sender).Caption := IntToStr(prob);

end;

procedure TForm1.Button1Click(Sender: TObject);
var filename : string;
begin
  if OpenDialog1.Execute then begin
    filename:= OpenDialog1.FileName;
    HtmlToGrid(database,filename,Label1);
  end;

end;

解决方法

我认为,给您带来困难的一点是没有意识到一旦 您已将文件加载到 TStringList 中,TStringList 的内容可通过其 Text 属性作为字符串访问,因此您可以执行类似

var
  P : integer;
[...]
P := Pos('<th',Textfile.Text). 

但可能你想逐行处理文件,你可以使用 TStringList 的 Strings 属性来完成

S := MyStringList.Strings[Index]. 

注意 Strings 属性是从零开始的,所以第一个列表是 MyStringLIst.Strings[0]。

您可以像这样逐行处理您的 TextFile 内容

var
  i : Integer;
[...]
  for i := 0 to TextFile.Count - 1 do begin
    if Pos('<th',TextFile.Strings[i]) > 0 then 
      { do something }
  end;   

顺便说一句,最好为您的变量指定一个反映其类型的名称,而“TextFile”对于实际上是 TStringList 的内容有点误导,因此名称“StringList”可能比“TextFile”更可取。

花半个小时阅读在线帮助中的 TStringList 是非常值得的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。