Возможно ли извлечь конкретную строку из файла, зная ее номер строки? Например, просто введите содержимое строки N
в виде строки из файла «text.txt»?Как получить определенную строку из файла
ответ
Попробуйте один из этих двух решений:
file = File.open "file.txt"
#1 solution would eat a lot of RAM
p [*file][n-1]
#2 solution would not
n.times{ file.gets }
p $_
file.close
Вы можете получить его по индексу от readlines
.
line = IO.readlines("file.txt")[42]
Используйте это только в том случае, если это небольшой файл.
Правильный ответ –
Это только правильный ответ, если файл небольшой, меньше пары МБ. В противном случае это заставит Ruby сразу загрузить весь файл, что в случае большого файла будет медленнее, чем использование решения 'foreach' или' get'.См. Http://stackoverflow.com/questions/25189262/why-is-slurping-a-file-bad, который содержит контрольные показатели. –
Я был удивлен, узнав, что это займет всего несколько МБ! –
def get_line_from_file(path, line)
result = nil
File.open(path, "r") do |f|
while line > 0
line -= 1
result = f.gets
end
end
return result
end
get_line_from_file("/tmp/foo.txt", 20)
Это хорошее решение, потому что:
- Вы не используете
File.read
, таким образом, вы не читать весь файл в память. Это может стать проблемой, если файл имеет размер 20 Мбайт, и вы достаточно часто читаете, чтобы GC не ускорялся. - Вы читаете только файл до нужной строки. Если ваш файл имеет 1000 строк, строка 20 будет читать только 20 первых строк в Ruby.
Вы можете заменить gets
с readline
, если вы хотите, чтобы вызвать ошибку (EOFError
) вместо того, чтобы возвращать ноль при пропускании недоступных линий.
linenumber=5
open("file").each_with_index{|line,ind|
if ind+1==linenumber
save=line
# break or exit if needed.
end
}
или
linenumber=5
f=open("file")
while line=f.gets
if $. == linenumber # $. is line number
print "#{f.lineno} #{line}" # another way
# break # break or exit if needed
end
end
f.close
Если вы просто хотите, чтобы получить линию и не делать ничего другого, вы можете использовать этот один лайнер
ruby -ne '(print $_ and exit) if $.==5' file
Ницца. Именно тогда становятся полезными глобальные $ -переменные. – Nakilon
Это продолжает чтение файла, когда линия уже найдена. – steenslag
Не имеет значения. Если номер строки является последней второй строкой, например, она должна читать до этой строки ... – ghostdog74
Файл имеет хороший lineno
метод.
def get_line(filename, lineno)
File.open(filename,'r') do |f|
f.gets until f.lineno == lineno - 1
f.gets
end
end
Вам действительно не нужно lineno(). Вы можете заменить строку «до» на '(lineno-1) .times {f.gets}'. –
Если вы хотите один лайнер и не заботиться об использовании памяти, используйте (предполагающие строки пронумерованы от 1)
lineN = IO.readlines('text.txt')[n-1]
или
lineN = f.readlines[n-1]
если вы уже открыли файл ,
В противном случае было бы лучше сделать так:
lineN = File.open('text.txt') do |f|
(n-1).times { f.gets } # skip lines preceeding line N
f.gets # read line N contents
end
- 1. Как получить определенную строку из файла? (android)
- 2. C++ Как получить определенную строку текстового файла
- 3. Удалить определенную строку из файла
- 4. Как заменить определенную строку из файла CSV?
- 5. Как получить определенную строку из .txt (C++)
- 6. Как читать определенную строку из большого файла?
- 7. Как извлечь определенную строку из файла (Linux)
- 8. Как удалить определенную строку из файла?
- 9. Как выбрать определенную строку из файла?
- 10. Как прочитать определенную строку из текстового файла
- 11. Как распечатать определенную строку из текстового файла
- 12. как читать определенную строку из файла
- 13. Как я могу получить определенную строку из текстового файла?
- 14. C программирование Как получить определенную строку строк из текстового файла?
- 15. Получить определенную строку из url
- 16. Получить определенную строку из NSString
- 17. Получить определенную строку из Url
- 18. Как прочитать определенную строку файла?
- 19. Получить определенную строку файла в Unix
- 20. php- как получить определенную строку из результата?
- 21. Как получить определенную строку из длинной строки
- 22. Как получить определенную строку из текста. C#
- 23. Как получить определенную строку из пути?
- 24. Как получить определенную строку из массива строк
- 25. как получить определенную строку из списка
- 26. MySQL, как получить определенную строку из таблицы
- 27. Получить определенную строку из txt-файла в java
- 28. подсчитывает определенную строку с разбивкой из файла
- 29. получить определенную строку таблицы из файла XML в php
- 30. Удалить определенную строку из текстового файла?
Является ли решение # 2 получать линии п + 1? –
@ Марк Томас, в # 1 тоже. Я предположил, что индексирование с 0. – Nakilon
Спасибо за '[* File.open ('...')]', не знал, что 'to_a' для экземпляра File может дать мне свои строки – tig