Ada 从文件的行中获取变量

Ada 从文件的行中获取变量,ada,Ada,我想知道你们中是否有人能帮我回答一个简短的问题。我现在正在处理记录,在我的程序中,我需要它来理解我导入的文件的行包含什么。我的问题在于,我不知道如何将行“拆分”为实际变量。例如,该行是 22134.09 Kia Bernice 我如何让程序知道第一部分22134.09是可变价格,起亚是可变公司,伯尼斯是可变模型,然后将它们全部排序到一个记录中 比如 type PriceCompModel is record price : Float range 1.0..99999.99; company

我想知道你们中是否有人能帮我回答一个简短的问题。我现在正在处理记录,在我的程序中,我需要它来理解我导入的文件的行包含什么。我的问题在于,我不知道如何将行“拆分”为实际变量。例如,该行是

22134.09 Kia Bernice
我如何让程序知道第一部分22134.09是可变价格,起亚是可变公司,伯尼斯是可变模型,然后将它们全部排序到一个记录中

比如

type PriceCompModel is record
price : Float range 1.0..99999.99;
company : String (1..CompNameLength);
Model : String (1..ModelNameLength);
谢谢

编辑代码

    with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;

procedure Testexercise is

   type Inventory is Record

      CarPrice : Float := 0.0;
      CarType  : String (1..40);
      -- CarType will include both the model and company
   end record;

   InventoryItem  : Inventory;
   ImportedFile   : File_Type;
   FileName       : String := "Cars.txt";
   WordsFromFile  : String(1..40);
   LengthofWords  : Integer ;
   PriceofCar     : Float := 0.0;
   LoopCount      : Integer := 1;

   type Cars is array (1..12) of Inventory;

   begin

      Open(File => ImportedFile, Mode => In_File, Name => FileName);

      --for I in 1..12 loop

      while LoopCount /= 12 loop

         Get(File => ImportedFile, Item => InventoryItem.CarPrice);

         Get_Line(File => ImportedFile, Item => WordsFromFile, Last=> LengthofWords);       

         Put (Integer(InventoryItem.CarPrice),1);

         Put (WordsFromFile(1..LengthofWords));

         New_Line;

         LoopCount := LoopCount + 1;

         InventoryItem.CarType := WordsFromFile;      


      end loop;
     close(ImportedFile);



   end Testexercise;
所以我试着在循环中这样做

for I in 1..12 loop
    Cars := Inventory;
   end loop;
在我开始工作后,这对我起了作用

汽车:汽车

for I in 1..12 loop
Car(I) := Inventory;
end loop;

<> P>当定义包含信息的记录时,有很多因素需要考虑。p> 创建float的命名子类型或命名浮点类型将非常有用,这样I/O例程就可以检查price组件的输入值

字符串类型的字段必须约束为预定义的大小。这意味着所有“公司”字符串的大小必须相同,所有“模型”字符串的大小必须相同,尽管模型字符串的长度可能不同于公司字符串。如果公司和/或模型的名称可能不同,那么您应该考虑使用有界字符串(艾达语言参考手册A.4.4)或无界字符串(艾达语言参考手册A.4.5)。 如果输入文件的字符串大小固定,您可以使用Ada.Text_IO.Text_Streams(Ada语言参考手册第A.12.2节)读取记录的每个字段。如果字符串大小不同,则需要使用Ada.Text\u IO手动读取和解析每个字段

——从文件中读取记录数据
使用Ada.Text_Io;使用Ada.Text\u IO;
使用Ada.Strings.Unbounded;使用Ada.Strings.Unbounded;
使用Ada.Strings.Fixed;使用Ada.Strings.Fixed;
程序读取记录为
类型价格为delta 0.01位,范围为0.0..99999.99;
自动库存类型为记录
价格:价格:=0.0;
公司:无界\u字符串:=Null\u无界\u字符串;
模型:无界_字符串:=Null_无界_字符串;
结束记录;
包AI_IO是新的Ada.Text_IO.Decimal_IO(价格);
使用人工智能;
存货项目:自动存货;
_文件:文件类型;
文件名:字符串:=“inventory.txt”;
输入字符串(1..1024);
长度:自然长度;
开始、结束:正;
开始
打开(文件=>_文件,
模式=>在_文件中,
名称=>文件名);
获取(File=>_文件,
项目=>存货(项目价格);
获取\u行(File=>该\u文件,
项目=>Inpt\U Str,
最后=>长度);
关闭(_文件);
开始:=索引非空(源=>Inpt_Str(1..Length));
Finis:=开始;
而Finis<长度,然后输入Str(Finis)=''循环
Finis:=Finis+1;
端环;
存货_Item.Company:=To _无界字符串(Inpt_Str(Start..Finis));
开始:=索引非空白(输入字符串(Finis+1..Length));
存货项目模型:=到无界字符串(输入字符串(开始..长度));
放置行(“价格:&价格”图像(库存项目.Price));
放置行(“公司:&到字符串(库存项目.公司));
放置行(“模型:&到字符串(Inventory\u Item.Model));
结束读取记录;
如果要读取包含许多记录的文件,需要在某种容器中收集信息。以下示例使用通用包Ada.Containers.Vectors中的向量

——自动清点包规范
使用Ada.Text_IO;使用Ada.Text\u IO;
使用Ada.Containers.Vectors;
使用Ada.Strings.Unbounded;使用Ada.Strings.Unbounded;
包装自动库存为
类型价格为delta 0.01位,范围为0.0..99999.99;
类型汽车被标记为私家车;
程序打印(项目:汽车);
功能集返回汽车;
函数获取价格(项目:汽车)退货价格;
函数Get_Company(项目:汽车)返回字符串;
函数Get_Model(项目:Automobile)返回字符串;
类型存货被标记为私有;
程序读取(项目:外库存;文件:文件类型)
Pre=>模式(文件)=在_文件中;
程序写入(项目:在库存中;文件:文件类型)
Pre=>模式(文件)=输出文件;
程序打印(项目:库存);
私有的
类型汽车被贴上标签记录
价格:价格:=0.0;
公司:无界\u字符串:=Null\u无界\u字符串;
模型:无界_字符串:=Null_无界_字符串;
结束记录;
软件包自动更新
Ada.Containers.Vectors(索引类型=>正值,
元素类型=>汽车);
使用自动向量;
类型存货被标记为记录
列表:向量;
结束记录;
结束自动库存;
此包的主体是:

带有Ada.Strings.Fixed;使用Ada.Strings.Fixed;
包体自动库存为
包装价格是新的Ada.Text\u IO.Decimal\u IO(价格);
使用价格;
-----------
--印刷品--
-----------
程序打印(项目:汽车)为
使用价格;
开始
放置行(“价格:&价格”图像(Item.Price));
放入行(“公司:&至字符串(项目公司));
放置行(“模型:&到字符串(Item.Model));
新线;
结束打印;
---------
--设置--
---------
返回汽车的功能集为
温度:汽车;
输入字符串(1..1024);
长度:自然长度;
开始
卖出(“输入汽车价格:”);
获取(项目=>临时价格);
Put(“进入汽车公司:”);
获取行(项目=>Inpt\u Str,最后=>Length);
临时公司:=To_无界字符串(Inpt_Str(1..Length));
放置(“输入汽车型号:”);
获取行(项目=>Inpt\u Str,最后=>Length);
Temp.Model:=To_无界_字符串(Inpt_Str(1..Length));
返回温度;
端集;
---------------
--拿到价格--
---------------
功能获取价格(项目:汽车)退货请购单
StringTokenizer(String str, String delim)

     StringTokenizer st = new StringTokenizer("this is a test", "$a; ");
 while (st.hasMoreTokens()) {
     System.out.println(st.nextToken());
 }
StringTokenizer st = new StringTokenizer("this is a test");
    String line = reader.readLine();

  String[] tokens = line.split("\\s"); 
 String price =  tokens[1]  and so on