Delphi-Seek();程序。不兼容类型

发布于 2024-11-28 01:13:08 字数 1233 浏览 1 评论 0原文

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.
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;

I get a problem here when trying to compile. The Seek(); on the last line returns the error incompatible type. As far as I've read online, Seek takes in var: File and var: longint so I don't see why it's considered a bad type as I'm feeding it a file, and a longint.

FileB was Assigned to a text file in the main section of the code. This part is just a procedure.

Appreciate any help. More of the code below.

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

飞烟轻若梦 2024-12-05 01:13:08

该文档描述 Seek() 如下:

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

这就是你的问题所在。

The documentation describes Seek() as so:

Moves the current position of a typed or untyped file to a specified component. Not used with text files.

Herein lies your problem.

提赋 2024-12-05 01:13:08

您可以使用以下过程:

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;

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

You can use this procedure:

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;

But beware that the above is intended only for READING from the file. If you WRITE to the file, you simply overwrite the bytes in the file, regardless of any line breaks or not (there's no way to "insert" text in an existing text file).

爱,才寂寞 2024-12-05 01:13:08

定义 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)); 

Define RECORD type and open file as record or TFileStream.
Write Your code again and then ask. You have many different code parts from... i'dont know.

Define like this (example):

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;

You must enter length of strings in this case. And Seek will work as You wish ;)

You can change:
from:

Seek(FileB, lengthOfMember); 

to:

Seek(FileB, length(Member)); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文