Stdin 내용을 배열로 변환하는 방법은 무엇입니까?
문제
다음 내용이있는 파일 입력이 있습니다.
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는 게으르지 만 배열과 같은 구조를 전달하고 반복 할 수 있습니다.
제휴하지 않습니다 StackOverflow