2015-05-06 1 views
0

У меня есть большой файл ruby, содержащий данные о продукте. Я пытаюсь разбить файл на разделы на основе регулярного выражения. У меня есть заголовки продуктов, обозначаемые словом Product, за которым следует пробел, а затем номер. После этого у меня есть ряд строк, содержащих информацию о продукте.Разбиение рубинового файла по шаблону?

Формат выглядит следующим образом.

Продукт 1:

...data 

Продукт 2:

... данные

...

Продукт N:

... данные

При чтении из файла я хотел бы игнорировать заголовки продуктов и вместо этого показывать только данные продукта. Для этого я пытаюсь разбить файл на основе регулярного выражения.

file = File.read('products.txt') 
products = file.split(/\Aproduct \d+:\z/i) 

Данное регулярное выражение работает и находит все заголовки продуктов. Проблема в том, что файл не разбивается на соответствующие разделы.

Когда я запустил puts products[0],, весь файл распечатывается на консоль.

+1

Вы можете экспериментировать с 'перечислимых # slice_before'. –

ответ

1

\A и \z матч начало и конец строки соответственно. В то время как вы хотите соответствовать началу и концу строки. Вместо этого, вы должны использовать ^ и $ якорей:

/^product \d+:$/i 
1

Файл будет прочтён полностью, нет способа избежать его. Но вы можете пройти по каждой строке, но не тот, который соответствует expresion:

File.open("file.txt", "r") do |file| 
    file.each_line do |line| 
    if # condition 
    #fancy stuff 
    else 
    # not that fancy 
    end 
end 
+0

Как вы собираетесь пропустить строку baseD на контенте, не читая его? – tebayoso

+0

Ничего, я думал, что вы говорите, что вам нужно было разложить весь файл сразу. –

 Смежные вопросы

  • Нет связанных вопросов^_^