IT story

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

hot-time 2020. 4. 18. 09:39
반응형

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

런타임 중에 RAM을 늪에 빠뜨릴 수있는 큰 줄이있는 파일을 읽는 데 관심이있는 경우 항상 파일 조각을 읽을 수 있습니다. " 파일 슬러 핑이 나쁜 이유 "를 참조하십시오 .

File.open('file_path', 'rb') do |io|
  while chunk = io.read(16 * 1024) do
    something_with_the chunk
    # like stream it across a network
    # or write it to another file:
    # other_io.write chunk
  end
end

참고 URL : https://stackoverflow.com/questions/6012930/how-to-read-lines-of-a-file-in-ruby

반응형