Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 使用不同分隔符分析文本-使用分组_Ruby_Parsing_Text - Fatal编程技术网

Ruby 使用不同分隔符分析文本-使用分组

Ruby 使用不同分隔符分析文本-使用分组,ruby,parsing,text,Ruby,Parsing,Text,我正在编辑我以前的帖子,因为我已经取得了一些进展,但现在有点卡住了: 下面是文本文件示例。我现在可以读取文件并进行一些解析,以获取所需的数据并输出文件。但是,输出将数据放在单独的行上,我需要将输出文件(名称、过期日期、上次使用、地址1、地址2、城市、州、邮政编码)放在一行上,用逗号分隔 以下是迄今为止的代码: def is_numeric?(object) true if Float(object) rescue false end def load_file raw_records =

我正在编辑我以前的帖子,因为我已经取得了一些进展,但现在有点卡住了:

下面是文本文件示例。我现在可以读取文件并进行一些解析,以获取所需的数据并输出文件。但是,输出将数据放在单独的行上,我需要将输出文件(名称、过期日期、上次使用、地址1、地址2、城市、州、邮政编码)放在一行上,用逗号分隔

以下是迄今为止的代码:

def is_numeric?(object)
true if Float(object) rescue false
end



def load_file
raw_records = []
infile = File.open("testfile.txt", "r") 
#counter =1 

while line = infile.gets
possible_account_number = line[0,16]
if is_numeric?(possible_account_number)
  account_number= possible_account_number[5,11]
  name = line[21,27].strip.gsub(/\,/,"")
  expire_date = line[108,8].strip
  last_used = line[117,8].strip    
  line = infile.gets
  line = infile.gets
  address1 = line.strip.gsub(/\,/,"") #needed for some random commas
  line = infile.gets
  address2 = line.strip.gsub(/\,/,"")
  line = infile.gets
  city = line[21, 20].strip.gsub(/\,/,"")
  state = line[42, 2]
  zip = line[45, 5]
  record = [name, expire_date,last_used, address1, address2, city, state, zip]
  raw_records << record
  #counter = counter + 1
 end

end
infile.close
puts raw_records.map {|record| record*','}

File.open('test_w.txt', 'w') do |f2|   
f2.puts raw_records.map {|record| record*','} 
end


end

#the_string.gsub(/\,/,"")


load_file

Andrew

如果没有输入文件,很难给出任何代码作为示例,但是文件的图像看起来相当可预测,因此带有一些RegExp魔术的状态跟踪器应该可以做到这一点

文件看起来以制表符分隔,因此可以按制表符拆分行:

File.open('filename', 'r') do |file|
  lines = file.inject([]){|memo, line| memo.push line.split(/\t/)}
  # Now you have an array of arrays that you can parse with a state tracker
end

您的状态跟踪器只需跟踪您最后输入的内容,如编号、名称或发布日期,然后填充适当的值。

如果没有输入文件,很难给出任何代码作为示例,但是文件的图像看起来相当可预测,因此具有某种RegExp魔力的状态跟踪器应该可以做到这一点

文件看起来以制表符分隔,因此可以按制表符拆分行:

File.open('filename', 'r') do |file|
  lines = file.inject([]){|memo, line| memo.push line.split(/\t/)}
  # Now you have an array of arrays that you can parse with a state tracker
end

您的状态跟踪器只需跟踪您上次输入的内容,如编号、姓名或发布日期,然后填充正确的值。

不使用数据图片会有很大帮助。为我们提供可用的数据样本有助于我们帮助您。查看数据会有一点帮助,但我不打算输入整个图像的价值。我很乐意发布该文件,但我看不到在问题中包含文件的选项。对不起,我是新手。不要发布整个文件,只需包含足够的文本样本,这样我们就可以得到格式的要点。通过编辑您的问题并将其粘贴到中来插入它。使用
..
标记将样本包裹起来,或将其缩进四个空格。作为替代,将数据发布到gist.com,并将链接包含在你的问题中。Tin Man-这是文件的一部分。谢谢你的建议。我生病了,所以没有机会发帖。如果有任何帮助,将不胜感激。放置原始记录,当原始记录是一个数组时,数组将在不同的行上打印每个元素。如果您希望子数组的所有元素都以逗号分隔,请使用:puts raw_records.map{| record | record*',}不使用数据的图片会有很大帮助。为我们提供可用的数据样本有助于我们帮助您。查看数据会有一点帮助,但我不打算输入整个图像的价值。我很乐意发布该文件,但我看不到在问题中包含文件的选项。对不起,我是新手。不要发布整个文件,只需包含足够的文本样本,这样我们就可以得到格式的要点。通过编辑您的问题并将其粘贴到中来插入它。使用
..
标记将样本包裹起来,或将其缩进四个空格。作为替代,将数据发布到gist.com,并将链接包含在你的问题中。Tin Man-这是文件的一部分。谢谢你的建议。我生病了,所以没有机会发帖。如果有任何帮助,将不胜感激。放置原始记录,当原始记录是一个数组时,数组将在不同的行上打印每个元素。如果希望子数组的所有元素都以逗号分隔,请使用:put raw_records.map{| record | record*,}该文件看起来像数据库报表的输出,可能根本没有选项卡,特别是如果它来自大型机或旧系统。该文件看起来像数据库报表的输出,可能根本没有选项卡,特别是如果它来自大型机或遗留系统。
File.open('test_w.txt', 'w') do |f2|   
f2.puts raw_records.map {|record| record*','} 
end
File.open('filename', 'r') do |file|
  lines = file.inject([]){|memo, line| memo.push line.split(/\t/)}
  # Now you have an array of arrays that you can parse with a state tracker
end