Вероятно, CSV-модуль Ruby мог бы справиться с этим, но это простая задача - разбить вещи на что-то более организованное.
Из содержимого некоторых полей и нескольких быстрых поисков я бы сказал, что данные связаны с экспортом чая. Нет никакого способа узнать, что представляют собой некоторые поля, если ваш источник данных не указывает их, поэтому вам придется их обработать. В качестве предположения я бы сказал:
- field3 может быть инвентарным номером.
- field6 может быть ценой за единицу в недолларовой валюте из-за запятой, которая часто используется как десятичная дробь за пределами США.
- field7 - текущий уровень инвентаря.
#!/usr/bin/env ruby
data = <<END_DATA.split("\n")
5036;MORAN;68681J;FBOP;40;872,7;OUT
5037;MORAN;68624J;GFBOP;40;872,7;OUT
5038;ITAKHOOLI;12124J;TGFOP;40;712,7;245
5039;ITAKHOOLI;12183J;GBOP;40;872,7;125
5040;ITAKHOOLI;12294J;GBOP;40;832,7;125
5041;ITAKHOOLI;12421J;GBOP;32;792,7;125
5042;NYA GOGRA;87230K;TGFOP;20;732,7;OUT
END_DATA
Создать массив хэшей:
records = data.inject([]){ |ary, row|
fields = row.split(';')
record = Hash[ *[:id, :company_name, :field3, :category, :field5, :field6, :field7 ].zip(fields).flatten ]
ary << record
}
require 'pp'
pp records
Что выводит что-то похожее на то, что вы получите, если запросите данные, используя поиск SQL:
[{:id=>"5036",
:company_name=>"MORAN",
:field3=>"68681J",
:category=>"FBOP",
:field5=>"40",
:field6=>"872,7",
:field7=>"OUT"},
{:id=>"5037",
:company_name=>"MORAN",
:field3=>"68624J",
:category=>"GFBOP",
:field5=>"40",
:field6=>"872,7",
:field7=>"OUT"},
{:id=>"5038",
:company_name=>"ITAKHOOLI",
:field3=>"12124J",
:category=>"TGFOP",
:field5=>"40",
:field6=>"712,7",
:field7=>"245"},
{:id=>"5039",
:company_name=>"ITAKHOOLI",
:field3=>"12183J",
:category=>"GBOP",
:field5=>"40",
:field6=>"872,7",
:field7=>"125"},
{:id=>"5040",
:company_name=>"ITAKHOOLI",
:field3=>"12294J",
:category=>"GBOP",
:field5=>"40",
:field6=>"832,7",
:field7=>"125"},
{:id=>"5041",
:company_name=>"ITAKHOOLI",
:field3=>"12421J",
:category=>"GBOP",
:field5=>"32",
:field6=>"792,7",
:field7=>"125"},
{:id=>"5042",
:company_name=>"NYA GOGRA",
:field3=>"87230K",
:category=>"TGFOP",
:field5=>"20",
:field6=>"732,7",
:field7=>"OUT"}]
Альтернативный способ просмотра данных - это хеш хешей:
records = data.inject({}){ |h, row|
fields = row.split(';')
record = Hash[ *[:id, :company_name, :field3, :category, :field5, :field6, :field7 ].zip(fields).flatten ]
h[fields.first] = record
h
}
pp records
Какие выходы
{"5036"=>
{:id=>"5036",
:company_name=>"MORAN",
:field3=>"68681J",
:category=>"FBOP",
:field5=>"40",
:field6=>"872,7",
:field7=>"OUT"},
"5037"=>
{:id=>"5037",
:company_name=>"MORAN",
:field3=>"68624J",
:category=>"GFBOP",
:field5=>"40",
:field6=>"872,7",
:field7=>"OUT"},
"5038"=>
{:id=>"5038",
:company_name=>"ITAKHOOLI",
:field3=>"12124J",
:category=>"TGFOP",
:field5=>"40",
:field6=>"712,7",
:field7=>"245"},
"5039"=>
{:id=>"5039",
:company_name=>"ITAKHOOLI",
:field3=>"12183J",
:category=>"GBOP",
:field5=>"40",
:field6=>"872,7",
:field7=>"125"},
"5040"=>
{:id=>"5040",
:company_name=>"ITAKHOOLI",
:field3=>"12294J",
:category=>"GBOP",
:field5=>"40",
:field6=>"832,7",
:field7=>"125"},
"5041"=>
{:id=>"5041",
:company_name=>"ITAKHOOLI",
:field3=>"12421J",
:category=>"GBOP",
:field5=>"32",
:field6=>"792,7",
:field7=>"125"},
"5042"=>
{:id=>"5042",
:company_name=>"NYA GOGRA",
:field3=>"87230K",
:category=>"TGFOP",
:field5=>"20",
:field6=>"732,7",
:field7=>"OUT"}}