Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 用记录写入文件_File_Delphi_Records - Fatal编程技术网

File 用记录写入文件

File 用记录写入文件,file,delphi,records,File,Delphi,Records,我一直在做作业,我必须模拟一个实际的预订系统 用户可以创建一个事件,该事件实际上只是命名了一个文本文件,稍后可以写入该文件 procedure TForm4.Button1Click(Sender: TObject); var f: textfile; usersFilename: string; begin usersFilename := Inputbox('Enter the name of the Event', '', ''); AssignFile(f, user

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

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

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;

最初,我只是有一些输入框,在用户写下事件名称后会写入文件,但是在重新阅读任务大纲后,我意识到我必须使用记录,所以现在我尝试使用它们,但我不确定哪里出了问题。如果打开文本文件,实际上不会弹出任何错误。如果查看第二个块,文本文件中没有任何内容,则为空。

。有几个问题:

  • 您的文件类型错误。它应该是TCustomer的
    文件,而不是
    文本文件
    。记录文件是特定类型的文件
  • 您从未向文件中写入任何内容。要向文件写入内容,您需要使用类似于
    write(f,…)
  • 您实际上并没有打开该文件。您需要使用
    Reset(f)
    打开文件进行读写,或者使用
    ReWrite(f)
    创建文件(如果文件已经存在,也会将其清空)
  • 您应该在完成文件后关闭它
  • 要将它们放在一起,您的代码块应该如下所示:

    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;
    

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

    如果我们查看您的第二个块。有几个问题:

  • 您的文件类型错误。它应该是TCustomer的
    文件,而不是
    文本文件
    。记录文件是特定类型的文件
  • 您从未向文件中写入任何内容。要向文件写入内容,您需要使用类似于
    write(f,…)
  • 您实际上并没有打开该文件。您需要使用
    Reset(f)
    打开文件进行读写,或者使用
    ReWrite(f)
    创建文件(如果文件已经存在,也会将其清空)
  • 您应该在完成文件后关闭它
  • 要将它们放在一起,您的代码块应该如下所示:

    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

    按钮2单击不会写入文件。您还需要打开文件并用该方法写入。Buttone2Click没有写入文件。你还需要打开文件,然后用那种方法写入。哇哦,伙计,谢谢你,伙计,我真的在努力解决这个问题,真的,谢谢你,请注意,
    t客户
    字符串字段必须声明为短字符串。这是一种将数据存储在文本文件中的过时技术。如果有人想知道使用什么替代,请搜索CSV、XML和JSON存储。正如LU RD所写,您需要使用短字符串或固定长度字符串,如FirstName:String[15];这是为了保持写入文件的记录的固定大小,以便可以使用seek方法移动到文件中的特定记录。至于这一方案已经过时,我不这么认为。此方法的主要优点是,您可以使用它以二进制形式编写或读取几乎任何Delphi类型。使用这种方法无法写入的唯一数据类型是指针,因为下次启动应用程序时,指针的值将不同。@SilverWarior,过时的意思是,在Unicode世界中,很难以短字符串格式存储普通Unicode字符串。至少十年来,不推荐使用,移动编译器不支持使用。至于在记录容器中混合数据类型用于存储的便利性,我同意。我们仍然在使用这种技术在生产中使用TP7代码,尽管至少90%的用例在20年前被转换为ini文件。哇哦,伙计,谢谢你,伙计,我真的很难做到这一点,非常感谢你,请注意,
    t客户
    字符串字段必须声明为短字符串。这是一种将数据存储在文本文件中的过时技术。如果有人想知道使用什么替代,请搜索CSV、XML和JSON存储。正如LU RD所写,您需要使用短字符串或固定长度字符串,如FirstName:String[15];这是为了保持写入文件的记录的固定大小,以便可以使用seek方法移动到文件中的特定记录。至于这一方案已经过时,我不这么认为。此方法的主要优点是,您可以使用它以二进制形式编写或读取几乎任何Delphi类型。使用这种方法无法写入的唯一数据类型是指针,因为下次启动应用程序时,指针的值将不同。@SilverWarior,过时的意思是,在Unicode世界中,很难以短字符串格式存储普通Unicode字符串。至少十年来,不推荐使用,移动编译器不支持使用。至于在记录容器中混合数据类型用于存储的便利性,我同意。我们仍然使用这种技术在生产中使用TP7代码,尽管至少90%的用例在20年前被转换为ini文件。