首页 文章

阿达:从文件问题中读取

提问于
浏览
0

因此,我必须从文本文件中读取关系以对它们执行拓扑排序 . 问题是关系中的数据是异构的 . 大约有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传递文件的名称我我正在阅读和处理 . 对于字符串和整数,我可以保持读取它们的字符串,并使用'Value属性将整数转换为整数 . 我的问题是对象 . 您认为我应该如何阅读并转换信息?我是否需要扫描每一个以查看它属于3的对象?谢谢

2 回答

  • 1

    假设对象的名称唯一地标识它们的类型,例如 Banana 始终是 Fruit 并且没有命名心态或其他任何东西,比如说,然后在输入行的合适部分使用 'Value . 然后,或者,你也可以使用暴力和 Ada.Text_IO 包:只要文本"BANANA"可以传递给 Enumeration_IO.Get 的实例 Fruit ,产生 Fruit 类型的值,那么你就是 . (注意 '<' 等也可以作为枚举类型的文字,因此您可以使用相同的方法来阅读排序 . )

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

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

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

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

  • 1

    使用 Unchecked_Conversion 很难从 String 转换 . 您通常会使用 'Value 属性 .

相关问题