Подтвердить что ты не робот

Каков наилучший способ поиска строки в файле?

Название говорит само за себя. Я только хочу знать, существует ли она, а не там, где она есть. Есть ли один лайнер для достижения этого?

4b9b3361

Ответ 1

File.open(filename).grep(/string/)

Это загружает весь файл в память. Если вы имеете дело с большими файлами, предпочитайте их разрывать.
Это означает загрузку одной строки за раз, а не весь файл.

File.foreach(filename).grep(/string/)

Хорошая практика, чтобы очистить после себя, а не позволить сборщику мусора обрабатывать его в какой-то момент. Это более важно, если ваша программа долговечна, а не просто быстрый script. Использование блока кода гарантирует, что объект File будет закрыт, когда блок завершится.

File.foreach(filename) do |file|
  file.grep(/string/)
end

Ответ 2

grep для foo ИЛИ bar ИЛИ baz, украден из ruby1line.txt.

$  ruby -pe 'next unless $_ =~ /(foo|bar|baz)/' < file.txt

Ответ 3

Ну, похоже, eed3si9n имеет один гильза, здесь более длинное решение:

f = File.new("file.txt")
text = f.read
if text =~ /string/ then
#relevant code
end

Ответ 4

Если ваша ОС имеет пакет grep, вы можете использовать системный вызов:

system("grep meow cat_sounds.txt")

Это вернет true, если grep возвращает что-либо, false, если это не так.

Если вы находите себя в системе с grep, вы можете обнаружить, что это "лучший" способ, поскольку Ruby может быть медленным, когда дело касается операций с файлами.

Ответ 5

Это читает файл только для первого появления строки "string" и обрабатывает его по строкам - не просматривая весь файл сразу.

def file_contains_regexp?(filename,regexp)
  File.foreach(filename) do |line|
    return true if line =~ regexp
  end
  return false
end