2010-07-28 4 views
5

이것은 내 파일 내용입니다.루비 파일을 정렬하는 방법

내가 알파벳 순서로 내용을 정렬 할
Receivables=Por cobrar 
Payables=Cuentos por pagar 
ytdPurchases.label=Purchases YTD 
validationError.maxValue=Value is too large, maximum value allowed is {0} 

... 내가 어떻게 할 수 있습니다?

업데이트 : 이 코드는 내 파일을 정렬합니다.

new_array = File.readlines("#{$base_properties}").sort 
File.open("#{$base_properties}","w") do |file| 
    new_array.each {|n| file.puts(n)} 
end 

파일을 정렬하는 더 좋은 방법이 있습니까? 파일을 가정

+0

이 _better_ – ezpz

답변

6

명백한 단순화 :

new_array = File.readlines("#{$base_properties}").sort 
File.open("#{$base_properties}","w") do |file| 
    file.puts new_array 
end 

난 그냥 File.read의 반대를하고,이 같은 방법을 정의하는 것입니다. 그것은 매우 재사용, 그리고 정말 표준의 일부가되어야합니다 :

def File.write!(path, contents) 
    File.open(path, "w"){|fh| fh.write contents} 
end 

를 그리고이된다 정렬 :

File.write!($base_properties, File.readlines($base_properties).sort.join) 
0
File.open("out.txt", "w") do |file| 
    File.readlines("in.txt").sort.each do |line| 
    file.write(line.chomp<<"\n") 
    end 
end 
+0

내가 종류의 두 개의 파일을 사용하지 않고 파일 수에 의해 당신이 무슨 뜻인지 설명하라? –

+0

확실 :'a = File.readlines ("in.txt"). sort' 정렬 된 라인을 포함하는 배열'a'를 생성합니다. 그러면 결과로 원하는 모든 것을 할 수 있습니다. – AShelly

14

`sort abc -o abc` 

루비가 황금 망치로 사용해서는 안된다 "ABC"라고합니다. sort 명령을 사용하면 속도가 훨씬 빨라집니다.

+0

'strace'는 그것이 작동한다는 것을 암시하지만'abc'는'abc2 : sort '처럼 너무 일찍 겹쳐 쓰여지지 않을 것이라고 실제로 보장됩니까? – taw

+0

@taw : 만약 내가 디자인했다면 파일을 정렬하고 파일로 출력 할 것이므로 의도하지 않은 덮어 쓰기는 일어나지 않을 것입니다. 나는이 명령을 설계하는 사람들이 내가 생각했던 것보다 더 똑똑하고 이미 이것을 생각했다고 생각한다. –

+0

유닉스 명령에 대한 당신의 신념은 매우 순진합니다. 나는 본능적으로 그들 모두를 불신 할만큼 충분히 보았다 ;-) – taw

관련 문제