2010-07-28 7 views
5

Ceci est le contenu de mon fichier.comment trier les fichiers dans ruby ​​

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

je veux trier ce contenu par ordre alphabétique ... comment puis-je faire ??

Mise à jour: Ce code me permettra de trier mon fichier.

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

Existe-t-il un meilleur moyen de trier les fichiers?

+0

Expliquez ce que vous entendez par _better_ – ezpz

Répondre

6

simplification Obvious:

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

je voudrais définir juste une méthode comme celui-ci, en faisant le contraire de File.read. Il est très réutilisable, et devrait vraiment faire partie de la norme:

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

Et le tri devient alors:

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

i peut déposer type sans utiliser deux fichiers? –

+0

sûr: 'a = File.readlines (" in.txt "). Sort' crée un tableau' a' contenant les lignes triées. alors vous pouvez faire ce que vous voulez avec les résultats. – AShelly

14

En supposant que votre fichier est appelé "abc"

`sort abc -o abc` 

Ruby ne doit pas être utilisé comme un marteau d'or. En utilisant la commande sort, ce sera beaucoup plus rapide.

+0

'strace' suggère que cela fonctionne, mais est-il réellement garanti que' abc' ne sera pas écrasé trop tôt comme ce serait le cas avec 'sort abc'? – taw

+0

@taw: Si je devais le concevoir, je trierais le fichier puis le sortirais dans le fichier, donc aucun écrasement involontaire ne se produirait. Je pense que les gens qui conçoivent ces commandes sont plus intelligents que moi et y ont déjà pensé. –

+0

Votre croyance en la santé mentale des commandes Unix est charmante naïve. J'en ai vu assez pour se méfier d'eux tous instinctivement ;-) – taw

Questions connexes