Почему Ruby String#split не рассматривает последовательные завершающие разделители как отдельные объекты?

Я читаю из государственного текстового файла, в котором $ используется в качестве разделителя, но я не думаю, что символ-разделитель имеет значение...

Итак, это ожидается:

'a$b$c$d'.split('$')
# => ["a", "b", "c", "d"]

В файлах данных, с которыми я работаю, строка заголовков столбцов (первая строка) заполнена равномерно, т.е. нет пустого заголовка, как в:

'a$b$$d'
# or: 
'a$b$c$'

Однако каждая строка может иметь последовательные завершающие разделители, такие как:

"w$x$$\r\n"

Обычно я читаю каждую строку и пережевываюее. Но это приводит к тому, что String#split рассматривает последние два разделителя как один столбец:

"w$x$$\r\n".chomp.split('$')
# => ["w", "x"] 

Если я не выполняю chomp, я получаю желаемый результат, хотя я должен грызть последний элемент:

"w$x$$\r\n".split('$')
# => ["w", "x", "", "\r\n"]

Итак, либо я должен:

  • chomp строка ifконечные символы, не являющиеся символами новой строки, НЕ являются последовательными разделителями
  • сохранить новую строку, выполнить разбиение, а затем удалить последний элемент, ЕСЛИ последние символы являются последовательными разделителями

Это кажется действительно неудобным ... я что-то здесь упустил?

11
задан Zando 7 March 2012 в 15:34
поделиться