Как скопировать эту часть текстового файла и поместить в хеш с помощью rails?(Файл данных VATsim) - PullRequest
0 голосов
/ 30 декабря 2010

Я пытаюсь понять, как я могу вырезать раздел между! КЛИЕНТАМИ и ';;»а затем разобрать его в хеш для создания файла XML.Честно говоря понятия не имею, как это сделать.

Файл выглядит следующим образом: vatsim-data.txt оригинальный файл здесь

    ; Created at 30/12/2010 01:29:14 UTC by Data Server V4.0
    ;
    ; Data is the property of VATSIM.net and is not to be used for commercial purposes without the express written permission of the VATSIM.net Founders or their designated agent(s ).
;
; Sections are:
; !GENERAL contains general settings
; !CLIENTS contains informations about all connected clients
; !PREFILE contains informations about all prefiled flight plans
; !SERVERS contains a list of all FSD running servers to which clients can connect
; !VOICE SERVERS contains a list of all running voice servers that clients can use
;
; Data formats of various sections are:
; !GENERAL section -         VERSION is this data format version
;                            RELOAD  is time in minutes this file will be updated
;                            UPDATE is the last date and time this file has been updated. Format is yyyymmddhhnnss
;                            ATIS ALLOW MIN is time in minutes to wait before allowing manual Atis refresh by way of web page interface
;                            CONNECTED CLIENTS is the number of clients currently connected
; !CLIENTS section -         callsign:cid:realname:clienttype:frequency:latitude:longitude:altitude:groundspeed:planned_aircraft:planned_tascruise:planned_depairport:planned_altitude:planned_destairport:server:protrevision:rating:transponder:facilitytype:visualrange:planned_revision:planned_flighttype:planned_deptime:planned_actdeptime:planned_hrsenroute:planned_minenroute:planned_hrsfuel:planned_minfuel:planned_altairport:planned_remarks:planned_route:planned_depairport_lat:planned_depairport_lon:planned_destairport_lat:planned_destairport_lon:atis_message:time_last_atis_received:time_logon:heading:QNH_iHg:QNH_Mb:
; !PREFILE section -         callsign:cid:realname:clienttype:frequency:latitude:longitude:altitude:groundspeed:planned_aircraft:planned_tascruise:planned_depairport:planned_altitude:planned_destairport:server:protrevision:rating:transponder:facilitytype:visualrange:planned_revision:planned_flighttype:planned_deptime:planned_actdeptime:planned_hrsenroute:planned_minenroute:planned_hrsfuel:planned_minfuel:planned_altairport:planned_remarks:planned_route:planned_depairport_lat:planned_depairport_lon:planned_destairport_lat:planned_destairport_lon:atis_message:time_last_atis_received:time_logon:heading:QNH_iHg:QNH_Mb:
; !SERVERS section -         ident:hostname_or_IP:location:name:clients_connection_allowed:
; !VOICE SERVERS section -   hostname_or_IP:location:name:clients_connection_allowed:type_of_voice_server:
;
; Field separator is : character
;
;
!GENERAL:
VERSION = 8
RELOAD = 2
UPDATE = 20101230012914
ATIS ALLOW MIN = 5
CONNECTED CLIENTS = 515
;
;
!VOICE SERVERS:
voice2.vacc-sag.org:Nurnberg:Europe-CW:1:R:
voice.vatsim.fi:Finland - Sponsored by Verkkokauppa.com and NBL Solutions:Finland:1:R:
rw.liveatc.net:USA, California:Liveatc:1:R:
rw1.vatpac.org:Melbourne, Australia:Oceania:1:R:
spain.vatsim.net:Spain:Vatsim Spain Server:1:R:
voice.nyartcc.org:Sponsored by NY ARTCC:NY-ARTCC:1:R:
voice.zhuartcc.net:Sponsored by Houston ARTCC:ZHU-ARTCC:1:R:

;
;
!CLIENTS:
01PD:1090811:prentis gibbs KJFK:PILOT::40.64841:-73.81030:15:0::0::::USA-E:100:1:1200::::::::::::::::::::20101230010851:28:30.1:1019:
4X-BRH:1074589:george sandoval LLJR:PILOT::50.05618:-125.84429:10819:206:C337/G:150:CYAL:FL120:CCI9:EUROPE-C2:100:1:6043:::2:I:110:110:1:26:2:59:: /T/:DCT:0:0:0:0:::20101230005323:129:29.76:1007:
50125:1109107:Dave Frew KEDU:PILOT::46.52736:-121.95317:23877:471:B/B744/F:530:KTCM:30000:KLSV:USA-E:100:1:7723:::1:I:0:116:0:0:0:0:::GPS DIRECT.:0:0:0:0:::20101230012346:164:29.769:1008:
85013:1126003:Dmitry Abramov UWWW:PILOT::76.53819:71.54782:33444:423:T/ZZZZ/G:500:UUDD:FL330:ULAA:EUROPE-C2:100:1:2200:::2:I:0:2139:0:0:0:0:ULLI::BITSA DCT WM/N0485S1010 DCT KS DCT NE R22 ULWW B153 LAPEK B210 SU G476 OLATA:0:0:0:0:::20101229215815:62:53.264:1803:
;
;
!SERVERS:
EUROPE-C2:88.198.19.202:Europe:Center Europe Server Two:1:
;
;   END

Я хочу отформатировать XMLс тегами, где клиент является родителем, а вложенные теги выглядят следующим образом:

 callsign:cid:realname:clienttype:frequency:latitude:longitude:altitude:groundspeed:planned_aircraft:planned_tascruise:planned_depairport:planned_altitude:planned_destairport:server:protrevision:rating:transponder:facilitytype:visualrange:planned_revision:planned_flighttype:planned_deptime:planned_actdeptime:planned_hrsenroute:planned_minenroute:planned_hrsfuel:planned_minfuel:planned_altairport:planned_remarks:planned_route:planned_depairport_lat:planned_depairport_lon:planned_destairport_lat:planned_destairport_lon:atis_message:time_last_atis_received:time_logon:heading:QNH_iHg:QNH_Mb:

Любая помощь в решении этой проблемы будет принята с благодарностью!

1 Ответ

0 голосов
/ 30 декабря 2010

Вы можете сделать это с помощью регулярных выражений.

file = File.read("test.txt")
regex = Regexp.new(/!CLIENTS:.*;\n;/m)
parsed_text = regex.match(file)

parsed_text будет тогда соответствовать сопоставленному тексту в этом объекте.

Вот пример регулярного выражения, используемого для соответствия http://www.rubular.com/r/2mIRR4gozX

Это похоже на текстовый файлиспользует: в качестве разделителя

Таким образом, вы можете взять parsed_text и разделить его.

 #split the text on line breaks to an array
 lines = parsed_text.to_s.split("\n")

 #operate on each line
 lines.each do |line|
  #split each line into an array
  line_array = line.split(":")
  line_array.each do |item|
   puts item
  end
 end

Тогда вам необходимо отобразить каждую позицию массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...