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(); 最後の行で、互換性のないタイプのエラーを返します。私がオンラインで読んだ限りでは、 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

次の手順を使用できます。

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 に答える
1

ドキュメントには、次のSeek()ように説明されています。

型指定されたファイルまたは型指定されていないファイルの現在の位置を、指定されたコンポーネントに移動します。テキスト ファイルでは使用されません。

ここにあなたの問題があります。

于 2011-08-06T18:34:22.927 に答える
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(FileB, lengthOfMember); 

に:

Seek(FileB, length(Member)); 
于 2011-08-08T03:15:15.467 に答える