从文本文件中读取记录到Pascal中的数组

露娜

1.这是我的代码,我想从文本文件中读取记录到帕斯卡中的数组中,我的程序是关于制作酒店帮手的,我已经有一个包含酒店数据的文本文件,那么我应该从文本文件中读取它并将其存储在数组中..但是我正面临错误103退出代码(文件未打开)..任何帮助的情况。:)

程序Hotel1(输入,输出);

const  max =10;  MaxFloor =10;
type
Date = record
        day :1..31;
        month:1..12;
        year:integer;
       end;


Booking = record
           Guest:string[20];
           S_Date:date;
           E_date:date;
          end;


Booking_Mat= array[1..max] of Booking;

History_Booking = record
                   B_num:integer;
                   B_Mat:Booking_Mat;
                  end;

Room = record
        Num:integer;
        Bed_num:integer;
        Price:integer;
        Status:Boolean;
        H:History_Booking;
       end;

Data = record
       Ro:Room;
       m:integer;
       end;

Data_mat= array [1..max] of Data;



Procedure  Read_Data(filename:string; var table:Data_mat);
 var   df:text; i,j :integer;
  n,m,num,GN:integer;
  Bed_num,Price:integer;
  f:text;
  s,e:Date;
  Gname:string[20];
  ok:boolean;
  a:Data_mat;
 c:char;
 Begin
 writeln('Reading ',filename,' records into array.... ');
 assign(df,filename);
 reset(df);
i:=0;
   while (not eof) do
     begin
        i:=i+1;
         Read (f,num);
         a[i].Ro.num:=num;
         Read (f,Bed_num);
         a[i].Ro.Bed_num:=Bed_num;
         Read (f,Price);
      a[i].Ro.Price:=Price;
         Read(f,c);
          if (c ='Y') then
           a[i].Ro.status:= true
       else
           a[i].Ro.status:= false;

      readln;

  End; {while eof}
  close(df);
End; {Read_Data}
肯·怀特

您已在代码块中声明了两个类型为Textdff)的变量var

您可以df使用以下几行打开

assign(df,filename);
reset(df);

然后,您从几行中读取f不是您在上面打开的文件),例如这一行:

Read (f, num);

有趣的是,尽管您从未在循环中使用过它,但实际上您实际上已经设法关闭了您真正打开的文件:

close(df);

解决所有这些问题的方法是删除f的声明df,然后通过更正代码以使用剩余text变量来修复编译器错误(这里有两个重要的教训是

  1. 只声明您实际需要的变量。
  2. 使用您声明的变量。

您的循环也是无效的,因为您使用while not eof的没有提供要测试结束的文件。您的循环应改为读取while not Eof(df) do

最好在前缀类型前加上典型的命名约定T它清楚地表明它是类型而不是变量,并允许您更轻松地阅读代码。例如,我将您对的定义更改DataTRoomData,并相应地更改其他类型的声明。这是一个示例-注意,TRoomData现在有一个名为Roomtype的字段(成员)TRoom

TRoomData = record
  Room: TRoom;
  m: Integer;
end;

TRoom 被定义为

TRoom = record
  Num: Integer;
  Bed_num: Integer;
  Price: Integer;
  Status: Boolean;
  H: THistory_Booking;
end;

依此类推。这使您可以更清楚地编写代码:

var
  RoomData: TRoomData;
begin
  RoomData.Room.Num := 1;
  RoomData.Room.Price := 50;
  // etc.
end;

话虽如此,您的文件不包含text,因此首先使用的是错误的文件类型df: Text您应该使用File of TRoomData,一次允许读取和写入整个记录。这是一个这样做的例子:

var
  DF: File of TRoomData;
  RoomData: TRoomData;
  i: Integer;
const
  DataFileName = 'D:\TempFiles\RoomData.dat';

编写它:

// Put some data into the record
RoomData.Room.Num := 1;
RoomData.Room.Bed_num := 1;
RoomData.Room.Price := 40;
RoomData.Room.Status := True;
RoomData.Room.H.B_num := 1;
for i := 1 to Max do
begin
  RoomData.Room.H.B_Mat[1].Guest := Format('Guest %d', [i]);
  RoomData.Room.H.B_Mat[1].S_Date.Year := 2014;
  RoomData.Ro.H.B_Mat[1].S_Date.Month := i;
  RoomData.Ro.H.B_Mat[1].S_Date.Day := i;
end;

// Write it out to the file
AssignFile(DF, DataFileName);
try
  Rewrite(DF);
  Write(DF, RoomData);
finally
  CloseFile(DF);
end;

读回去:

AssignFile(DF, DataFileName);
try
  Reset(DF);
  Read(DF, RoomData);
finally
  CloseFile(DF);
end;

(或者,更好的是:如果您正在使用的Pascal版本支持它,请远离旧的文件I / O例程,而开始使用它TFileStream。)

最后但并非最不重要的一点是,学习正确格式化代码它使调试和维护变得更加容易,并且当您可以清楚地遵循执行路径时,它也使阅读变得更加容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文本文件中读取字符串到Pascal中的数组

来自分类Dev

Java读取文本文件中的不同数组

来自分类Dev

在不同的数组中逐列读取文本文件

来自分类Dev

如何从python中的文本文件读取int数组?

来自分类Dev

Java读取文本文件中的不同数组

来自分类Dev

从文本文件中读取数据作为列表数组

来自分类Dev

记录到文本文件-SSIS程序包“进度”选项卡中的项目

来自分类Dev

将警告消息从 DotNetCoreBuild 的蛋糕脚本记录到文本文件中

来自分类Dev

从文本文件中删除记录

来自分类Dev

在Delphi中读取文本文件

来自分类Dev

在Matlab中读取文本文件

来自分类Dev

读取R中的文本文件

来自分类Dev

从文本文件中逐行读取

来自分类Dev

在java中读取文本文件

来自分类Dev

Python 从文本文件中读取

来自分类Dev

从文本文件中读取数字

来自分类Dev

从文本文件中检测数组

来自分类Dev

从文本文件中读取数据并将其存储在python中的数组中

来自分类Dev

从文本文件中读取测量数据,并将其放入Fortran中的数组中

来自分类Dev

可以记录到ASP.net WEb服务器中的文本文件导致锁定

来自分类Dev

不从文本文件读取datatble中的空或空记录-C#

来自分类Dev

使用多行变量和数据记录在php中读取文本文件

来自分类Dev

读取保存在文本文件中的多个记录

来自分类Dev

根据起始前缀从文本文件中读取多行作为记录,然后对其进行处理

来自分类Dev

同时读取多个文本文件中的文本并将其拆分为单词数组

来自分类Dev

尝试从文本文件读取的多维数组中删除数组元素

来自分类Dev

Python写入以记录到新文本文件

来自分类Dev

将GET参数记录到文本文件?

来自分类Dev

从文本文件中读取行,反转并保存在新的文本文件中

Related 相关文章

  1. 1

    从文本文件中读取字符串到Pascal中的数组

  2. 2

    Java读取文本文件中的不同数组

  3. 3

    在不同的数组中逐列读取文本文件

  4. 4

    如何从python中的文本文件读取int数组?

  5. 5

    Java读取文本文件中的不同数组

  6. 6

    从文本文件中读取数据作为列表数组

  7. 7

    记录到文本文件-SSIS程序包“进度”选项卡中的项目

  8. 8

    将警告消息从 DotNetCoreBuild 的蛋糕脚本记录到文本文件中

  9. 9

    从文本文件中删除记录

  10. 10

    在Delphi中读取文本文件

  11. 11

    在Matlab中读取文本文件

  12. 12

    读取R中的文本文件

  13. 13

    从文本文件中逐行读取

  14. 14

    在java中读取文本文件

  15. 15

    Python 从文本文件中读取

  16. 16

    从文本文件中读取数字

  17. 17

    从文本文件中检测数组

  18. 18

    从文本文件中读取数据并将其存储在python中的数组中

  19. 19

    从文本文件中读取测量数据,并将其放入Fortran中的数组中

  20. 20

    可以记录到ASP.net WEb服务器中的文本文件导致锁定

  21. 21

    不从文本文件读取datatble中的空或空记录-C#

  22. 22

    使用多行变量和数据记录在php中读取文本文件

  23. 23

    读取保存在文本文件中的多个记录

  24. 24

    根据起始前缀从文本文件中读取多行作为记录,然后对其进行处理

  25. 25

    同时读取多个文本文件中的文本并将其拆分为单词数组

  26. 26

    尝试从文本文件读取的多维数组中删除数组元素

  27. 27

    Python写入以记录到新文本文件

  28. 28

    将GET参数记录到文本文件?

  29. 29

    从文本文件中读取行,反转并保存在新的文本文件中

热门标签

归档