Разбор текстовых файлов в Ruby, когда содержимое не правильно сформировано - PullRequest
1 голос
/ 21 февраля 2010

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

put 3
returns 3
between
 3
pargraphs 1
4
 3
#foo 18
****** 2

Слово становится ключом, а число - значением. Обратите внимание, что интервал довольно неустойчивый. Слово не всегда является словом (которое не определяется / \ w + /), и число, связанное с этим словом, не всегда находится в одной строке. Вот почему я называю это плохо сформированным. Если бы в одной строке было одно слово и одно число, я бы просто разделил его, но, к сожалению, это не так. Я пытаюсь создать хэш-карту, как это.

{"put"=>3, "#foo"=>18, "returns"=>3, "paragraphs"=>1, "******"=>2, "4"=>3, "between"=>3}

Исходя из Java, это довольно просто. Используя Scanner Я мог бы просто использовать scanner.next () для следующего ключа и scanner.nextInt () для номера, связанного с ним. Я не совсем уверен, как это сделать в Ruby, когда мне кажется, что я должен использовать регулярные выражения для всего.

1 Ответ

2 голосов
/ 21 февраля 2010

Я бы порекомендовал просто использовать split, как в:

h = Hash[*s.split]

где s - ваш текст (например, s = open('filename').read. Верьте или нет, это даст вам именно то, что вы ищете.

РЕДАКТИРОВАТЬ: я понял, что вы хотели значения в виде целых чисел. Вы можете добавить это следующим образом:

h.each{|k,v| h[k] = v.to_i}
...