Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用rails将文本文件的这一部分复制出来并放入散列?(VATsim数据文件)_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何使用rails将文本文件的这一部分复制出来并放入散列?(VATsim数据文件)

Ruby on rails 如何使用rails将文本文件的这一部分复制出来并放入散列?(VATsim数据文件),ruby-on-rails,Ruby On Rails,我在想我怎样才能把中间的部分剪掉!客户与“;”的关系然后将其解析为散列以生成xml文件。老实说,我不知道怎么做 文件如下:vatsim-data.txt原始文件 我想将xml格式化为以client为父项的标记和嵌套标记,如下所示: callsign:cid:realname:clienttype:frequency:latitude:longitude:altitude:groundspeed:planned_aircraft:planned_tascruise:planned_depairp

我在想我怎样才能把中间的部分剪掉!客户与“;”的关系然后将其解析为散列以生成xml文件。老实说,我不知道怎么做

文件如下:vatsim-data.txt原始文件

我想将xml格式化为以client为父项的标记和嵌套标记,如下所示:

 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:

如果您能帮助解决此问题,我们将不胜感激

您可以使用正则表达式来实现这一点

file = File.read("test.txt")
regex = Regexp.new(/!CLIENTS:.*;\n;/m)
parsed_text = regex.match(file)
然后,解析的_文本将等于该对象中匹配的文本

下面是一个用于匹配的正则表达式示例

看起来文本文件使用:作为分隔符

因此,您可以获取解析的_文本并将其拆分

 #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

然后您需要映射阵列的每个位置。

Awe brilliant万分感谢。再问一个问题,说我想删除!客户:以及;从已解析的文本中,我将如何执行此操作?已解析的_text=regex.match(file).gsub(“!CLIENTS:”,”).gsub(“;\n;”,”)
 #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