2010-07-28 8 views
5

Questo è il mio contenuto di file.come ordinare il file in ruby ​​

Receivables=Por cobrar 
Payables=Cuentos por pagar 
ytdPurchases.label=Purchases YTD 
validationError.maxValue=Value is too large, maximum value allowed is {0} 

voglio ordinare questo contenuto in ordine alfabetico ... Come posso fare questo ??

Aggiornamento: Questo codice ordinerà il mio file.

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

C'è un modo migliore per ordinare il file?

+0

Spiegare cosa si intende per _better_ – ezpz

risposta

6

Ovvio semplificazione:

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

avevo appena definire un metodo come questo, fare il contrario di File.read. E 'altamente riutilizzabile, e in realtà dovrebbe essere parte dello standard:

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

E poi l'ordinamento diventa:

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

possono I sorta di file senza l'utilizzo di due file? –

+0

sicuro: 'a = File.readlines (" in.txt "). Sort' crea l'array' a' contenente le righe ordinate. allora puoi fare tutto ciò che vuoi con i risultati. – AShelly

14

Assumendo che il file si chiama "abc"

`sort abc -o abc` 

Rubino non deve essere utilizzato come un martello d'oro. Usando il comando sort sarà molto più veloce.

+0

'strace' suggerisce che funzioni, ma è effettivamente garantito che' abc' non verrà sovrascritto troppo presto come sarebbe con 'sort abc'? – taw

+0

@taw: Se dovessi progettarlo, vorrei ordinare il file e quindi inviarlo al file, quindi non si verificherebbe sovrascrittura involontaria. Penso che le persone che progettano questi comandi siano più intelligenti di me e ci hanno già pensato. –

+0

La tua credenza nella sanità mentale dei comandi Unix è affascinante e ingenua. Ho visto abbastanza per sfidarli tutti istintivamente ;-) – taw

Problemi correlati