2017-08-17 83 views
0

我對這類問題有疑問。 有一個包含未知行數的.txt文件,其格式如下:從文本文件中讀取多種類型的行,並將它們分開存儲?

Cityname(max 30 char)temperature(float)wind_speed(float)air_pressure(float)。

在一個文件中的行的示例: 巴黎-80.81010 其中巴黎是一個城市名稱,-8是溫度(浮動),0.8(浮點)是風速和1010(浮動)的空氣壓力。

需要讀取所有行,並將每行存儲在具有特定數據類型的結構中。結果需要是結構列表。

如何讀取這樣的一行並正確存儲所有不同的數據類型而不會丟失信息? 我已經嘗試過所有我可能想到的,我不知道如何做到這一點。

+0

此外,城市名稱也可以有一個數字,因爲它可以是該城市的一個氣象站的數量。例如Paris02,Amsterdam21,Berlin03等 – CptWhoWent

+1

還有沒有分隔符?如果是這樣,這是不可能解決的。 –

+0

Iharob Al Asimi,謝謝,但我需要一個主意。 :) – CptWhoWent

回答

2

這是一個依賴於信息結構方式的問題。

例如,如果城市名稱總是以字母結尾,那麼您肯定知道下一個數字是溫度的開始。這很容易。

但它並不總是很簡單。在你的例子中,你怎麼知道溫度不是-80.81,風速是0,氣壓是10?

沒有關於不同變量的可能結構和值的更多信息,您無法知道。

2

閱讀該行。然後反向處理它,使用以下假設:

  • 空氣壓力是9XX和10XX百帕之間的整數,因此,任何數量的在端部滿足該繞圈是空氣壓力(除非你是在火星) ;

  • 風速在0.0到80節之間,除非有颶風。符合這個標準的任何數字都是風速。

  • 溫度在-40到+50之間,除非你在火星,金星或北極或南極。符合這個標準的任何數字都是攝氏溫度。

  • 其餘是城市名稱。

沒有分隔符,您需要這些假設才能處理該行。解析中的任何錯誤都是由數據格式引起的。將這些假設傳達給數據提供者,讓他挑戰假設。

+0

我諮詢了一些高年級學生。 他們說,即使doe它沒有在問題中指定,文件的行被寫入的方式,它在行中的數據之間有空格(空格)。 所以關鍵是讓學生得出結論,任何其他方式都是不可能解決的。 有了這個信息,這個問題將被容易地與一個解決: '而(FEOF(FILE *)== 0){ 的fscanf(FILE *, 「%S%F%F%F」,字符* somestring,float1,float2,float3); /*然後將它存儲在一個結構體*/ }' 作爲代碼的一部分。 所有這些都有一個合理的變量名稱。 非常感謝您的幫助! – CptWhoWent

相關問題