String # split в Ruby не работает должным образом - PullRequest
1 голос
/ 22 июля 2010
File.open(path, 'r').each do |line| 
  row = line.chomp.split('\t')
  puts "#{row[0]}"
end

path - это путь к файлу с таким содержимым, как имя, возраст, профессия, хобби

Я ожидаю, что выводом будет только имя, но я получаю всю строку.

Почему это так?

Ответы [ 2 ]

5 голосов
/ 22 июля 2010

На вопрос уже есть принятый ответ, но стоит отметить причину первоначальной проблемы:

Это проблемная часть:

split('\t')

В Ruby есть несколько форм длястрока в кавычках, которые имеют различия, обычно полезные.

Цитирование из Программирование на Ruby на wikibooks.org :

... двойные кавычки предназначены для интерпретацииэкранированные символы, такие как новые строки и вкладки, чтобы они отображались как новые строки и вкладки, когда строка отображается для пользователя.Однако в одинарных кавычках отображается фактическая escape-последовательность, например, вместо новой строки отображается \ n.

Прочтите далее в связанной статье, чтобы увидеть использование строк %q и %Q,Или Google для "разделителей строки ruby", или посмотрите этот вопрос SO .

Так что '\t' интерпретируется как "обратный слеш + t", тогда как "\t" является символом табуляции.

String#split также примет Regexp, что в этом случае может устранить двусмысленность:

split(/\t/)
0 голосов
/ 22 июля 2010

Ваш вопрос был не очень понятен

split("\n") - если вы хотите разделить на строки

split - если вы хотите разделить на пробелы

и как я понимаю, вам не нужен chomp, потому что он удаляет все "\ n"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...