문제

다음 내용이있는 파일 입력이 있습니다.

123\n
456\n
789

Script.rb <입력과 같은 스크립트를 실행하고 싶습니다. 입력 파일의 내용을 배열로 변환하여 새 라인 문자를 분할하도록합니다. 그래서 나는 myArray = [123,456,789]와 같은 것을 가지고 있습니다. 여기에 내가하려고했던 것과 운이 많지 않습니다.

myArray = STDIN.to_s
myArray.split(/\n/)
puts field.size

나는 이것을 3 인쇄 할 것으로 기대하지만 15 명을 얻고있다. 나는 여기서 정말로 혼란스러워한다. 어떤 포인터?

도움이 되었습니까?

해결책

당신은 원합니다

myArray = $stdin.readlines

그것은 입력 라인 당 하나의 배열 항목이있는 배열로 $ stdin을 모두 얻을 수 있습니다.

이것은 큰 입력 파일이있는 장엄한 비효율적 인 (메모리 현명한)이므로 다음과 같은 것을 사용하는 것이 훨씬 좋습니다.

$stdin.each_line do |l|
  ...
end

대신에

a = $stdin.readlines
a.each do |l|
  ...
end

전자는 모든 것에 대한 메모리를 할당하지 않기 때문입니다. 다중 기가 바이트 로그 파일 처리를 시도해보십시오. 두 번째 방법은 시스템의 스왑 성능이 얼마나 좋은지 확인하십시오 ...u003Cgrin>

다른 팁

당신의 후에는 무엇입니까 사용 $stdin $ stdin.to_s 대신

ruby -e 'p $stdin.readlines.size' < INPUT
3

ruby -e 'p $stdin.to_s'
"#<IO:0x7fc7cc578af0>"

stdin.lines는 게으르지 만 배열과 같은 구조를 전달하고 반복 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top