2013-05-02 3 views
0

나는을 CSV이 같은 형식의 파일이 : 나는 표준 입력을 사용하여 읽어ARGF를 사용할 때 줄 끝 문자가 없습니까?

Wed Mar 07 00:00:00 CET 2012,78.0 
Thu Mar 08 00:00:00 CET 2012,46.0 
... 

를하고 사용하여 각 라인의 일부를 일치하도록 시도 :

ARGF.each_line do |line| 
    time << line.scan(/^\w{3} (\w{3}) (\d{2}) (\d{2}:\d{2}:\d{2}) \w+ (\d{4}),([.\d]+)$/) 
end 

어떤 이유로 마지막 반환 파일의 행.

CSV 파일을 문자열 변수에 복사하면 각 줄이 올바르게 일치하기 시작합니다. 정규식에서 달러 기호를 제거하면 정확하게 일치하지만 ARGF에서 읽을 때 $이 작동하지 않는 이유를 알지 못합니다. 어떤 아이디어?

+1

왜 ARGF를 사용합니까? IMO는 그게 진짜가 아니야. –

+0

@DaveNewton 저는 루비 초보자입니다. 정교하게 제발 주시겠습니까? –

답변

0

ARGF를 사용해야하는 이유가 있습니까? 처리를 쉽게하기위한 도구를 제공하는 CSV class in the standard library을 확인할 수 있습니다.

다음은 foreach하기 위해 한 번에 하나의 행을 생성하는 예제입니다. 이것이 어디에서 시작하거나 끝나는 지에 대해 걱정할 필요가 없다고 생각합니다.

require "csv" 

CSV.foreach("path/to/file.csv") do |row| 
    time << line.scan(/^\w{3} (\w{3}) (\d{2}) (\d{2}:\d{2}:\d{2}) \w+ (\d{4}),([.\d]+)$/) 
end 
+0

훨씬 편리 해 보이네. 고마워요! 하지만 ARGF를 사용할 때 '$'가 작동하지 않는 이유를 알고 싶습니다. –

관련 문제