[ruby] Ruby에서 파일의 행을 읽는 방법

다음 코드를 사용하여 파일에서 줄을 읽으려고했습니다. 그러나 파일을 읽을 때 내용은 모두 한 줄에 있습니다.

line_num=0
File.open('xxx.txt').each do |line|
  print "#{line_num += 1} #{line}"
end

그러나이 파일 은 각 줄을 개별적으로 인쇄합니다.


stdin을 사용해야합니다 ruby my_prog.rb < file.txt. 여기서 줄 끝 문자가 파일이 사용하는 것을 가정 할 수 없습니다. 어떻게 처리 할 수 ​​있습니까?



답변

내 대답은 모두 이후에 행 끝의 모든 종류의 처리에 대한 새로운 우려 커버 생각 "\r\n""\r"리눅스 표준으로 변환 "\n"선을 구문 분석하기 전에합니다.

"\r"일반 "\n""\r\n"Windows에서 EOL 문자 를 지원하려면 다음 과 같이 하십시오.

line_num=0
text=File.open('xxx.txt').read
text.gsub!(/\r\n?/, "\n")
text.each_line do |line|
  print "#{line_num += 1} #{line}"
end

물론 이것은 전체 파일을 메모리에로드하는 것을 의미하기 때문에 매우 큰 파일에는 좋지 않을 수 있습니다.


답변

루비에는 이것을위한 방법이 있습니다 :

File.readlines('foo').each do |line|

http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines


답변

File.foreach(filename).with_index do |line, line_num|
   puts "#{line_num}: #{line}"
end

이것은 전체 파일을 메모리에 넣지 않고 파일의 각 줄에 대해 주어진 블록을 실행합니다. IO :: foreach를 참조하십시오 .


답변

첫 번째 파일에는 Mac Classic 줄 끝이 있습니다 ( "\r"일반적인 대신 "\n"). 로 열어

File.open('foo').each(sep="\r") do |line|

줄 끝을 지정합니다.


답변

각 줄의 끝 때문입니다. 루비에서 chomp 메소드를 사용하여 끝에서 ‘\ n’또는 ‘r’을 삭제하십시오.

line_num=0
File.open('xxx.txt').each do |line|
  print "#{line_num += 1} #{line.chomp}"
end


답변

헤더가있는 파일에 대한 다음 접근법의 일부입니다.

File.open(file, "r") do |fh|
    header = fh.readline
    # Process the header
    while(line = fh.gets) != nil
        #do stuff
    end
end

이를 통해 컨텐츠 행과 다르게 헤더 행을 처리 할 수 ​​있습니다.


답변

방법에 대한 얻는다 ?

myFile=File.open("paths_to_file","r")
while(line=myFile.gets)
 //do stuff with line
end