file.each_char не работает сразу после file.each_line в Ruby - PullRequest
1 голос
/ 13 мая 2011

Я пытаюсь сделать file.each_char сразу после file.each_line, но он никогда не вызывается, когда это так.Если я избавлюсь от file.each_line, вызов file.each_char будет работать идеально.

Вот мой код для справки:

file.each_line do |line|
  if line =~ /^\s*$/
    next
  end
  lines += 1
end

file.each_char do |char|
  if char =~ /\s/
    next
  end
  chars += 1
end

Как я могу управлять вызовом file.each_char сразу послеfile.each_line

1 Ответ

6 голосов
/ 13 мая 2011

Когда вы запускаете each_line, он оставляет указатель на конец вашего потока ввода-вывода (в данном случае файл).Чтобы выполнить итерацию по всему файлу во второй раз, вам нужно сбросить его так, чтобы он указывал на начало потока.IO#rewind сделает это за вас:

file.each_line do |line|
  if line =~ /^\s*$/
    next
  end

  lines += 1
end

file.rewind

file.each_char do |char|
  if char =~ /\s/
    next
  end

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