다음 코드를 사용하여 파일에서 줄을 읽으려고했습니다. 그러나 파일을 읽을 때 내용은 모두 한 줄에 있습니다.
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|
답변
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