我必須通過以下文本並匹配以下各項,並將它們拆分爲單獨的記錄以保存到數據庫。所以,這樣的文字:在Ruby中匹配循環中的文本
ESTIMATED MINIMUM CENTRAL PRESSURE 951 MB
EYE DIAMETER 12 NM
MAX SUSTAINED WINDS 105 KT WITH GUSTS TO 130 KT
64 KT....... 25NE 25SE 25SW 25NW
50 KT....... 60NE 30SE 30SW 60NW
34 KT....... 75NE 50SE 50SW 75NW
12 FT SEAS.. 75NE 50SE 50SW 75NW
ALL QUADRANT RADII IN NAUTICAL MILES
REPEAT...CENTER LOCATED NEAR 25.5N 73.4W AT 23/0900Z
AT 23/0600Z CENTER WAS LOCATED NEAR 25.5N 72.6W
FORECAST VALID 23/1800Z 25.4N 75.6W
MAX WIND 110 KT...GUSTS 135 KT
50 KT... 60NE 60SE 60SW 60NW
34 KT... 75NE 75SE 75SW 75NW
FORECAST VALID 24/0600Z 25.5N 78.8W
MAX WIND 115 KT...GUSTS 140 KT
50 KT... 60NE 60SE 60SW 60NW
34 KT...100NE 100SE 100SW 100NW
FORECAST VALID 24/1800Z 25.8N 81.8W
MAX WIND 85 KT...GUSTS 105 KT
50 KT... 60NE 60SE 60SW 60NW
34 KT...100NE 100SE 100SW 100NW
...應該結束了看起來像以下:
forecastAdvisory = {
:centralPressure => 951,
:eyeDiameter => 12,
:vMax => 105,
:gMax => 130,
:windRadii => {
64 => [25, 25, 25, 25],
50 => [60, 30, 30, 60],
34 => [75, 50, 50, 75],
12 => [75, 50, 50, 75]
},
:forecastTrack => {
12 => {
:latitude => 25.4,
:longitude => 75.6,
:vMax => 110,
:gMax => 135
:windRadii => {
50 => [60, 60, 60, 60]
34 => [75, 75, 75, 75]
}
},
24 => {
:latitude => 25.5,
:longitude => 78.8,
:vMax => 115,
:gMax => 140
:windRadii => {
50 => [60, 60, 60, 60]
34 => [100, 100, 100, 100]
}
},
36 => {
:latitude => 25.8,
:longitude => 81.8,
:vMax => 85,
:gMax => 105
:windRadii => {
50 => [60, 60, 60, 60]
34 => [100, 100, 100, 100]
}
}
}
}
我知道我大概可以使用scan
方法在Ruby中String
,但我不知道關於如何按順序瀏覽文件並獲取這些值並正確解析它們。
UPDATE:這裏是我會用File.open
來分析幾個樣本文件,僅供參考:
如果沒有更好地理解問題,就很難提供任何建議,例如,這是一個文件的內容,你有很多文件?所有記錄都在一個文件中,但重複多次。你似乎有5塊數據,是永遠的情況下等 – 2009-09-06 20:28:50
@Steve - 這裏有多個變量,不幸的是: *不同的風半徑是34,50或64 KT。並非所有的風暴都有一定的風力半徑(所以有時風速半徑甚至不會包含在一個文本塊中),有些風速有34個,但不是50和64,等等。 *會有多個文件,但我會一次解析一個(每個諮詢一個) 以下是我將解析的幾個不同文件的示例: * http://is.gd/2XZ3N * http://is.gd/2XZ5N * http://is.gd/2XZ7y – 2009-09-06 20:33:43