Я пытался использовать следующий код для чтения строк из файла. Но при чтении файла содержимое все в одной строке:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Но этот файл печатает каждую строку отдельно.
Я должен использовать стандартный ввод, например ruby my_prog.rb < file.txt
, где я не могу предположить, какой символ конца строки использует файл. Как я могу справиться с этим?
ruby
line-endings
привлечь
источник
источник
line_num = 0
, вы могли бы использоватьeach.each_with_index
или возможноeach.with_index
.read
.line.chomp
для обработки концов строк (любезно предоставлено @SreenivasanAC )Ответы:
Я считаю , что мой ответ покрывает ваши новые опасения по поводу обработки любого типа окончания строк , так как
"\r\n"
и"\r"
преобразуются в стандарт Linux"\n"
перед разбором строки.Чтобы поддержать
"\r"
символ EOL наряду с обычным"\n"
и"\r\n"
из Windows, вот что я хотел бы сделать:Конечно, это может быть плохой идеей для очень больших файлов, поскольку это означает загрузку всего файла в память.
источник
/\r?\n/
которое будет охватывать как \ r \ n, так и \ n без объединения пустых строк, как это сделал бы комментарий ПодаУ Ruby есть метод для этого:
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
источник
with_index
это?File.readlines(filename).each_with_index { |line, i| puts "#{i}: #{line}" }
Это будет выполнять данный блок для каждой строки в файле, не сохраняя весь файл в памяти. Смотрите: IO :: foreach .
источник
Ваш первый файл имеет окончание строки Mac Classic (
"\r"
вместо обычного"\n"
). Откройте егоуказать окончания строки.
источник
Это из-за концов в каждой строке. Используйте метод chomp в ruby, чтобы удалить конечную строку '\ n' или 'r' в конце.
источник
Я неравнодушен к следующему подходу для файлов с заголовками:
Это позволяет обрабатывать строку заголовка (или строки) иначе, чем строки содержимого.
источник
как насчет получает ?
источник
Не забывайте, что если вы беспокоитесь о чтении файла, который может содержать огромные строки, которые могут затопить вашу оперативную память во время выполнения, вы всегда можете прочитать файл по частям. Смотрите « Почему плохой файл наплевать ».
источник