【问题标题】:Delphi - Seek(); Procedure. Incompatible Type德尔福 - 寻找();程序。不兼容类型
【发布时间】:2011-08-06 17:50:53
【问题描述】:
procedure ListMembers;
var
  Member, lMembers: string;
  lengthOfMember: Longint;
begin
  Writeln; 
  Writeln;
  Reset(FileA); //Only need read-only
  Reset(FileB); //Only need read-only
  while not Eof(FileA) do
    begin
      Readln(FileA, lMembers);
      Write(lMembers);
    end;
  Writeln(sLineBreak + sLineBreak);
  Write('Type the name of the member for more information: ');
  Readln(Member);
  lengthOfMember := Length(Member) + 2;
  Seek(FileB, lengthOfMember);
end;

我在尝试编译时遇到问题。寻找();最后一行返回错误不兼容类型。据我在网上阅读,Seek 接受 var: File 和 var: longint 所以我不明白为什么它被认为是一个坏类型,因为我给它一个文件和一个 longint。

FileB 已分配给代码主要部分中的文本文件。这部分只是一个过程。

感谢任何帮助。更多代码如下。

program WoWProject;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
  TMember = record
  Name : string;
  Level : integer;
  CharClass : string;
  Role : string;
  Spec : string;
  DKP : integer;
end;

var
FileA, FileB : Textfile;

//THIS PART IS THE PROCEDURE ABOVE
//ANOTHER PROCEDURE HERE UNRELATED TO THIS
//ANOTHER HERE WHICH IS THE WELCOME PROCEDURE

//MAIN
begin
 Assign(FileA, 'CharacterNames.txt');
 Assign(FileB, 'CharacterInfo.txt');
 repeat
   Append(FileA);
   Append(FileB);
   Welcome;
 until 1=2
end.

【问题讨论】:

  • 不兼容类型的错误是唯一的,还是还有更多?会不会是 FileB 不在范围内,因为编译器假定它是一个整数?
  • 请发布包含所有定义的完整代码。不要让我们猜测。
  • ain - 这是唯一的错误。我认为这可能是因为 Seek 不喜欢文本文件,对吗?文本文件也在全局变量中定义
  • 向我们展示变量FileB的声明。
  • 如果您需要查看其他程序,请告诉我。不想全部添加,因为它可能会很长。其他程序没有给出任何错误。

标签: delphi file seek


【解决方案1】:

文档是这样描述Seek()的:

将类型化或非类型化文件的当前位置移动到指定组件。不用于文本文件。

这就是你的问题。

【讨论】:

  • 不仅如此,您的第一个代码 sn-p 不会向 FileB 写入任何内容,至少在我看来是这样。所有对“writeln”的调用都应该包括 FileB。
【解决方案2】:

你可以使用这个程序:

PROCEDURE TextSeek(VAR F : TEXT ; POS : Cardinal);
  BEGIN
    WITH TTextRec(F) DO BEGIN
      BufPos:=0; BufEnd:=0;
      SetFilePointer(Handle,POS,NIL,FILE_BEGIN)
    END
  END;

但请注意,以上内容仅用于从文件中读取。如果您写入文件,您只需覆盖文件中的字节,无论是否有任何换行符(无法在现有文本文件中“插入”文本)。

【讨论】:

    【解决方案3】:

    定义 RECORD 类型并将文件打开为 record 或 TFileStream。 再次编写您的代码,然后询问。你有很多不同的代码部分......我不知道。

    这样定义(示例):

    type
     TMember = record
      Name : string[50];
      Level : integer;
      CharClass : string[50];
      Role : string[50];
      Spec : string[50];
      DKP : integer;
     end;
     Member = file of TMember;
    var
      FileA : file of TMember;
    

    在这种情况下,您必须输入字符串的长度。并且 Seek 将按照您的意愿工作;)

    您可以更改: 来自:

    Seek(FileB, lengthOfMember); 
    

    到:

    Seek(FileB, length(Member)); 
    

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 2010-12-12
      • 2010-10-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      相关资源
      最近更新 更多