用记录写入文件

时间:2014-06-05 07:55:17

标签: file delphi records

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

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

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;

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

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;

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

1 个答案:

答案 0 :(得分:5)

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

  1. 您的文件类型错误。它应该是File of TCustomer而不是TextFile。记录文件是特定类型的文件。
  2. 你永远不会在文件中写任何东西。要在文件中写入内容,您需要使用Write(f, ....)
  3. 之类的内容
  4. 您实际上并未打开该文件。您需要使用Reset(f)打开文件进行读写,或ReWrite(f)创建文件(如果已经存在,也会将其删空)。
  5. 完成后应关闭文件。
  6. 总而言之,您的代码块应如下所示:

    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;
    

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