Delphi错误:Get";“非类型化”;,“预期”;AnsiString“;

Delphi错误:Get";“非类型化”;,“预期”;AnsiString“;,delphi,compiler-errors,pascal,var,lazarus,Delphi,Compiler Errors,Pascal,Var,Lazarus,下面是我正在处理的一个文件预览系统项目的示例。主窗体上有两个列表框。第一个[lst#u fileList]显示目录[files]中所有“.txt”文件的列表,每个文件都标记为[order###.txt],其中##是1到999之间的任意数字。运行该过程时,它会在列表框(一个.txt文件)中找到所选项目,然后在第二个列表框[lst_filePreview]中显示文件中的每一行 尽管在运行时,ReadLn(selectedFile)的第21行出现了一个错误。错误状态(不兼容类型:获取“未类型化”,预期

下面是我正在处理的一个文件预览系统项目的示例。主窗体上有两个列表框。第一个[lst#u fileList]显示目录[files]中所有“.txt”文件的列表,每个文件都标记为[order###.txt],其中##是1到999之间的任意数字。运行该过程时,它会在列表框(一个.txt文件)中找到所选项目,然后在第二个列表框[lst_filePreview]中显示文件中的每一行

尽管在运行时,ReadLn(selectedFile)的第21行出现了一个错误。错误状态(不兼容类型:获取“未类型化”,预期为“AnsiString”)

我已经研究了这个错误几个小时了,但没有结果。。。任何帮助都将不胜感激,谢谢


你的代码

  lst_filePreview.Items.Add(readLn(selectedFile));
尝试将Readln用作函数。事实并非如此。正式来说,这是一个过程,就像一个返回void(非类型化)的函数。实际上,它是一个编译器魔法过程,根据它实际试图读取的内容,编译器会插入对不同运行时函数或过程的调用

您可能希望完全摆脱旧的Pascal样式例程,改用streams,但现在请尝试:

  s: string

  ...

  Readln(selectedFile, s);
  lst_filePreview.Items.Add(s);
请阅读位于的Delphi DocWiki说明,说明:

注意:对于新程序,您可能需要使用文件管理 System.classes和System.SysUtils单元中的类和函数。 System.Classes.TStream及其子类当前正在运行 推荐用于Delphi中的一般文件处理(用于相关例程, 请参阅Streams,Reader和Writer)。对于文本文件处理, 建议在调用Write和Write时使用TStreamReader和TStreamWriter 写。API类别索引包含相关例程和 上课

如果您的
lst\u文件预览
实际上是一个
TListBox
,您甚至可以执行以下操作:

lst_filePreview.Items.LoadFromFile('files\order'+orderSelect+'.txt');
并保存所有的阅读代码。我可能会改用
TMemo
,并执行以下操作:

FilePreviewMemo.Lines.LoadFromFile('files\order'+orderSelect+'.txt');
你的代码

  lst_filePreview.Items.Add(readLn(selectedFile));
尝试将Readln用作函数。事实并非如此。正式来说,这是一个过程,就像一个返回void(非类型化)的函数。实际上,它是一个编译器魔法过程,根据它实际试图读取的内容,编译器会插入对不同运行时函数或过程的调用

您可能希望完全摆脱旧的Pascal样式例程,改用streams,但现在请尝试:

  s: string

  ...

  Readln(selectedFile, s);
  lst_filePreview.Items.Add(s);
请阅读位于的Delphi DocWiki说明,说明:

注意:对于新程序,您可能需要使用文件管理 System.classes和System.SysUtils单元中的类和函数。 System.Classes.TStream及其子类当前正在运行 推荐用于Delphi中的一般文件处理(用于相关例程, 请参阅Streams,Reader和Writer)。对于文本文件处理, 建议在调用Write和Write时使用TStreamReader和TStreamWriter 写。API类别索引包含相关例程和 上课

如果您的
lst\u文件预览
实际上是一个
TListBox
,您甚至可以执行以下操作:

lst_filePreview.Items.LoadFromFile('files\order'+orderSelect+'.txt');
并保存所有的阅读代码。我可能会改用
TMemo
,并执行以下操作:

FilePreviewMemo.Lines.LoadFromFile('files\order'+orderSelect+'.txt');

使用Readln时,需要使用变量

试试这个:

var
 checkSelect:integer;
 orderSelect:string;
 i:integer;
 selectedFile:textFile;
 SelectedLine : String;
begin
  if lst_fileList.SelCount > 0 then
  begin
    for checkSelect:= 0 to (lst_fileList.Items.Count - 1) do
    if lst_fileList.Selected [checkSelect] then
    begin
       orderSelect:=lst_fileList.Items[checkSelect];
       orderSelect:=RightStr(orderSelect,3);
       if fileexists('files\order'+orderSelect+'.txt') then
       begin
          assignFile(selectedFile,'files\order'+orderSelect+'.txt');
          reset(selectedFile);
          while not EOF(selectedFile) do
          begin
            readLn(selectedFile, SelectedLine )
            lst_filePreview.Items.Add( SelectedLine);// Error occurs here:         
          end;
         closeFile(selectedFile);
         end;
         end;
       end else
       ShowMessage('Please select an item first!');
       end;

使用Readln时,需要使用变量

试试这个:

var
 checkSelect:integer;
 orderSelect:string;
 i:integer;
 selectedFile:textFile;
 SelectedLine : String;
begin
  if lst_fileList.SelCount > 0 then
  begin
    for checkSelect:= 0 to (lst_fileList.Items.Count - 1) do
    if lst_fileList.Selected [checkSelect] then
    begin
       orderSelect:=lst_fileList.Items[checkSelect];
       orderSelect:=RightStr(orderSelect,3);
       if fileexists('files\order'+orderSelect+'.txt') then
       begin
          assignFile(selectedFile,'files\order'+orderSelect+'.txt');
          reset(selectedFile);
          while not EOF(selectedFile) do
          begin
            readLn(selectedFile, SelectedLine )
            lst_filePreview.Items.Add( SelectedLine);// Error occurs here:         
          end;
         closeFile(selectedFile);
         end;
         end;
       end else
       ShowMessage('Please select an item first!');
       end;

在我看到的问题中,它被声明为“textFile”。在我看到的问题中,它被声明为“textFile”。是的,这确实有效。非常感谢你。我知道我遗漏了一些小细节…看看我的编辑:使用LoadFromFile,省去你自己的麻烦。是的,这确实有效。非常感谢你。我知道我遗漏了一些小细节…看看我的编辑:使用LoadFromFile,省去麻烦。