用记录写入文件

0 delphi records file

我一直在做作业,我必须模拟一个实际的预订系统.

用户可以创建一个事件,该事件实际上只是命名一个他们可以在以后写入的文本文件.

procedure TForm4.Button1Click(Sender: TObject);
var
  f: textfile;
  usersFilename: string;
begin
  usersFilename := Inputbox('Enter the name of the Event', '', '');  
  AssignFile(f, usersFilename);
  ReWrite(f, usersFilename);
  WriteLn(f, usersFilename);
  CloseFile(f);
  Reset(f);
end;
Run Code Online (Sandbox Code Playgroud)

所以现在我已经创建了一个文件,其中包含了他们应该能够写入的事件的名称

procedure TForm4.Button2Click(Sender: TObject);
var
    Customer: TCustomer;
    f: textfile;
    usersFilename: string;
begin
    usersFilename := Inputbox('Event Name', '', '');
    AssignFile(f, usersFilename);

    with Customer do
    begin
        FirstName := 'John';
        LastName := 'Smith';
        EventDate := 'Grimworth';
        SeatNumber := '1';
        PhoneNumber := '1';
        Adress := '7 Park Drive';
    end;
end;
Run Code Online (Sandbox Code Playgroud)

最初我只是在用户写了事件名后才会写入文件的输入框,但是在重新阅读作业大纲之后我意识到我必须使用记录,所以现在我正在尝试使用它们但我不是确定我哪里出错了.如果您打开文本文件,其中没有任何内容空,则实际上没有错误弹出它.

Gra*_*ter 5

如果我们看看你的第二个街区.有几个问题:

  1. 你的文件是错误的类型.它应该是一个File of TCustomer而不是一个TextFile.记录文件是特定类型的文件.
  2. 你永远不会在文件中写任何东西.要在文件中写入内容,您需要使用类似的内容Write(f, ....)
  3. 您实际上并没有打开该文件.您需要使用Reset(f)打开文件进行读写或ReWrite(f)创建文件(如果已经存在,也会将其清空).
  4. 完成后应该关闭文件.

总而言之,您的代码块应该如下所示:

procedure TForm4.Button2Click(Sender: TObject);
var
  Customer: TCustomer;
  f: File of TCustomer;
  usersFilename: string;
begin
  usersFilename := Inputbox('Event Name', '', '');
  AssignFile(f, usersFilename);
  // Open if it exists or create the file
  if FileExists(usersFilename) then
    Reset(f)
  else
    ReWrite(f);

  // Set up our data for writing. This information could
  // be retrieved from text boxes, etc.
  with Customer do
  begin
    FirstName := 'John';
    LastName := 'Smith';
    EventDate := 'Grimworth';
    SeatNumber := '1';
    PhoneNumber := '1';
    Adress := '7 Park Drive';
  end;

  // Write the data to the file
  Write(f, Customer);
  CloseFile(f);
end;
Run Code Online (Sandbox Code Playgroud)

没有考虑到的一件事是任何现有数据.它将从文件的开头开始编写,因此您应该对此Seek进行调查.

  • 只需注意,`TCustomer`字符串字段必须声明为ShortStrings.这是一种将数据存储在文本文件中的过时技术. (3认同)