У меня есть некоторый код, который читает файл в массив строк, а затем анализирует эти строки, чтобы получить структурированные данные. Входной файл имеет различные типы данных, которые необходимо обрабатывать по-разному, кроме того, существуют основные разделы для различных учетных записей (мобильных номеров).
Я перебираю строки в поисках строки счета, идентифицирую учетную запись, а затем хочу использовать эту учетную запись, пока не обнаружу следующую строку счета. Линии между ними потенциально представляют различные типы данных, принадлежащих этой учетной записи. Проблема в том, что после того, как я нахожу строку счета и устанавливаю локальную переменную (cur_num), переменная устанавливается в nil, когда я хочу ее использовать. Почему, как это происходит? Я изучаю Ruby, поэтому я хочу больше, чем просто исправить - я хочу понять, почему это так работает.
Вот мой код:
count = 0
cur_num = ""
lines.each do |line|
unless (line.strip.eql?("")) # edited due to comment from normalocity
if (line.slice(0,15) == "Mobile Number:,")
cur_num = line.slice(15,12)
count = 1
puts "Current Number: #{cur_num}"
#puts "Object Type: #{cur_num.class}"
else
data = line.strip.split(',')
if (data.length > 8)
data.unshift(cur_num)
#if (count.modulo(10) == 0 || count == 1)
puts "[#{cur_num}] #{data.inspect}"
#pp data
#end
count += 1
end
end
end
end
Обзор структуры входных данных будет выглядеть следующим образом:
Account 1
Data Section A
data line 1
data line 2
Data Section B
data line 1
data line 2
Account 2
Data Section A
data line 1
data line 2
Data Section B
data line 1
data line 2
end
добавляя код в массив дублирующих строк, вы должны вставить этот пример кода выше, если вы пытаетесь продублировать. Я ставлю это здесь в конце, чтобы попытаться сделать мой вопрос более читабельным:
lines = []
lines.push("ATT Wireless Bill")
lines.push("")
lines.push("Mobile Number:,770-555-1212")
lines.push("item,date,time,number called,rate period,plan type,minutes,airtime charge,ld charge,total charge")
lines.push("")
lines.push("1,2011-01-02,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("2,2011-01-03,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("1,2011-01-03,7:56AM,404-555-1213,DT,UM2M,5,0.00,0.00,0.00")
lines.push("")
lines.push("Mobile Number:,770-555-1213")
lines.push("item,date,time,number called,rate period,plan type,minutes,airtime charge,ld charge,total charge")
lines.push("")
lines.push("1,2011-01-02,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("2,2011-01-03,6:56AM,404-555-1212,NW,UNW,4,0.00,0.00,0.00")
lines.push("")
lines.push("1,2011-01-03,7:56AM,404-555-1213,DT,UM2M,5,0.00,0.00,0.00")
lines.push("")