2
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.
4

3 回答 3

1

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

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

这就是你的问题。

于 2011-08-06T18:34:22.927 回答
1

您可以使用此过程:

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;

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

于 2011-08-07T06:48:04.353 回答
0

定义 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)); 
于 2011-08-08T03:15:15.467 回答