2017-03-13 42 views
0

所以我不得不從文本文件中讀取關係來對它們執行拓撲排序。問題在於關係中的數據是異構的。有大約3種不同的枚舉數據類型,並且還有整數和浮點數。當從文件中讀取這些數據時,根據我的理解,它會被讀取並存儲爲字符串,直到執行Unchecked_Conversion。最終,我的問題是,如果我要用任意組合的這些類型讀取任何文本文件,是否需要掃描每一個我遇到的類型,然後再轉換它?像,我必須掃描每個元素檢查一段時間,「。」,以確定是否將其轉換爲整數或浮點數?謝謝!Ada:從文件讀取問題

已更新: 每個文件中的數據將由我生成純文本,而不是另一個程序。就結構和順序而言,我將展示我必須處理的數據集,然後解釋我打算如何將它們放入文件中。因此,這裏有我需要處理(在每一個單獨的文件)中的數據集:

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(名稱,類)。我計劃將所有信息按順序逐行放入文件中。通過這種方式,我可以每行處理兩行,因爲關係是成對的。對於對象,每4行將是一個關係,並且我需要成對收集每行以初始化對象的字段。 (上次我說關係是混合類型的,這對我來說是一個錯誤,因爲我不明白某些數據是Object字段。)在這樣做時,我需要實例化一個Generic,傳遞文件的名稱I正在閱讀和處理。對於字符串和整數,我可以保留讀取的字符串,並使用'Value'屬性將整數轉換爲整數。我的問題是與對象。你認爲我應該如何閱讀和轉換信息?我需要掃描每一個來看看它屬於3的對象嗎?謝謝

+1

如果您對文件中的數據一無所知,那麼您無法以計算方式處理它。嘗試解釋數據在文件中的組織方式。它是純文本還是原始數據?什麼是結構?有沒有訂單? –

+0

看起來文件內容有點知道:枚舉,整數和浮點數。這些文件最初是使用典型的Ada手段生成的嗎?例如,[streams](https://stackoverflow.com/documentation/ada/8865/files-and-i-o-streams),或者使用'Output'? – B98

+0

請至少給我們一些工作。一些示例行將是一個開始。另外,我編輯了你的標籤;唯一與_this_問題有關的是[ada]。 –

回答

1

假設對象的名稱唯一地標識它們的類型,例如Banana永遠是Fruit而不是命名心態或其他任何東西,比如說,然後在輸入行的合適部分使用'Value。然後,可能也可以使用蠻力和Ada.Text_IO包:只要文本「BANANA」可以傳遞到Enumeration_IO.Get的實例爲Fruit,產生一個Fruit類型的值,就是這樣。 (請注意,'<'等也可以製作爲枚舉類型的文字,以便您可以使用相同的方法來讀取排序。)

但是!你可能真的需要一個解析器或接近它的東西;非標準語法文本的I/O永遠都不是微不足道的。例如。從模式匹配庫之一開始,比如正則表達式,以隔離文本的各個部分。查找文件各部分的另一種方式 - 因爲您知道它們 - 是使用Ada.Strings.Fixed中的字符串搜索例程。

但是,如果您將文件的語法更改爲廣泛支持的語法之一,例如JSON,XML,Graphviz表示法......則適用的庫將變爲可用。流行語包括「序列化」或「編組」。

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

由於您可以放棄XML的自描述標記和/或類型信息,因此JSON會更短。

1

使用Unchecked_Conversion很難從String轉換爲好主意。您通常會使用'Value屬性。

+1

''價值',而不是''圖片' –

+0

謝謝!更正答案。 –

+0

是的你是對的,我將使用'價值屬性 – Numnumberry