阿达:从文件问题中读取

时间:2017-03-13 06:03:48

标签: ada

所以我必须从文本文件中读取关系以对它们执行拓扑排序。问题是关系中的数据是异构的。大约有3种不同的枚举数据类型,混合中也有整数和浮点数。从文件中读取此数据时,根据我的理解,它将被读取并存储为String,直到您执行Unchecked_Conversion。最后我的问题是,如果我要读取任意混合这些类型的文本文件,我是否需要扫描每个我遇到的文件以查看它在转换之前的类型?比如,我是否必须扫描检查一段时间的每个元素,"。",以确定是将其转换为整数还是浮点数?谢谢!

更新: 每个文件中的数据将是由我生成的纯文本,而不是另一个程序。就结构和顺序而言,我将展示我必须处理的数据集,然后解释我计划如何将它们放入文件中。所以这里是我需要处理的数据集(每个都在一个单独的文件中):

Mary < Tom, Tom < Bob, Tom < Sam, Joe < Sam, Sam < Betty, and Mary < Sam, Bob < Betty, Joe < Betty

1<2, 1<3, 2<3, 4<1, 3<8, 8<9, 8<2, 4<2, 4<5, 6<4, 5<7, 2<7, 7<9, 9<8, 9<6, 2<7, 4<2, 9<8

(Ford, 2) < (Apple, 30.0), (Joe, sorcerer) < (orange, 56.2), (apple, 30.0) < (banana, 45.0), ... , (Bennett, warrior) < (Ford, 2)

这些是3个基本的:字符串,名称,整数和对象。有3种不同的对象:CAR(类型,numDoors),FOOD(类型,numCalories),PERSON(名称,类)。我打算逐行顺序地将所有信息放在文件中。通过这种方式,我可以逐行处理每一行,因为关系成对出现。但是对于Objects,每4行将是一个关系,我需要成对收集每一行来初始化Object的字段。 (上次我说关系是混合类型。这对我来说是个错误,因为我不明白某些数据是Object字段。)在这样做时,我需要实例化一个Generic传递文件的名称我我正在阅读和处理。对于字符串和整数,我可以保持读取它们的字符串,并使用&#39; Value属性将整数转换为整数。我的问题是对象。您认为我应该如何阅读并转换信息?我是否需要扫描每一个以查看它属于3的对象?致谢

2 个答案:

答案 0 :(得分:1)

使用Unchecked_ConversionString转换很少是个好主意。您通常会使用'Value属性。

答案 1 :(得分:1)

假设对象的名称唯一地标识其类型,例如Banana始终是Fruit并且没有指定心态或其他任何东西,比如说,然后在输入行的适当部分使用'Value。然后,或者,您可以也使用暴力和Ada.Text_IO包:每当文本&#34; BANANA&#34;可以传递给Enumeration_IO.Get Fruit的实例,生成Fruit类型的值,就在那里。 (请注意,'<'等也可以作为枚举类型的文字,以便您使用相同的方法来阅读排序。)

<强>然而!你可能真的需要一个解析器或接近它的东西;非标准语法文本的I / O绝不是完全无关紧要的。例如。从一个模式匹配库开始,例如正则表达式,以隔离文本的各个部分。另一种查找文件部分的方法 - 因为您知道它们 - 是使用Ada.Strings.Fixed中的字符串搜索例程。

但是,如果您将文件的语法更改为广泛支持的语法之一,例如JSON,XML,Graphviz表示法......那么合适的库将可用。流行语包括&#34;序列化&#34;或&#34;编组&#34;。

<pair type="name">
  <first>Tom</first>
  <second>Sam</second>
</pair>

JSON会更短,因为如果需要,您可以删除自描述标记和/或键入XML信息。