Tri et caractères accentués


#1

Y-a-t-il une solution simple et propre pour trier un ensemble de chaines
de caractère contenant des accent?

Un exemple concrêt de mon problème

script/console

[“az”,“aea”,“aéb”].sort
=> [“aea”, “az”, “aéb”]

Bien sur, j’aimerais obtenir
[“aea”, “aéb”, “az”]

Je n’ai pas su obtenir de réponse rapidement avec google, je m’en remet
donc à vos lumières!

Seb


#2

Voici une solution…

class String
def no_accent
require ‘rubygems’
require ‘htmlentities’

HTMLEntities.new.encode( self, :named ).gsub(

/&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml);/, ‘\1’
).gsub( /&([A-za-z]{2})(?:lig);/, ‘\1’ ).gsub( /&[^;]+;/, ‘’ )
end
end

[“az”,“aea”,“aéb”].sort { |x, y| x.no_accent <=> y.no_accent }

Greg

Le 22 janvier 2009 19:55, Sébastien Lamy removed_email_address@domain.invalid a écrit :


#3

Hum…

C’était sans compter sur String.tr_s

Donc je propose :

class String
def no_accent
self.tr_s( ‘ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝáàâäãåçéèêëíìîïñóòôöõúùûüýÿ’,
‘AAAAAACEEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy’ )
end
end

[“az”,“aea”,“aéb”].sort { |x, y| x.no_accent <=> y.no_accent }

Le 22 janvier 2009 21:04, Gregoire LEJEUNE
removed_email_address@domain.invalid a écrit :


#4

Saperlipopette ! Il y a un E de trop…

Donc :

class String
def no_accent
self.tr_s( ‘ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝáàâäãåçéèêëíìîïñóòôöõúùûüýÿ’,
‘AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy’ )
end
end

2009/1/22 Gregoire LEJEUNE removed_email_address@domain.invalid:


#5

Salut Greg et Sébastien,

Juste pour la forme, voici une version utilisant la libraire ‘unicode’
plutôt que ‘htmlentities’, et avec un peu de magie :slight_smile: La fonction n’est
pas de moi, elle avait été postée l’année dernière sur la ML Rubyfr-public.

http://gist.github.com/50689

Le 22.01.2009 21:04, Gregoire LEJEUNE a écrit :

end

Un exemple concrêt de mon problème

script/console

[“az”,“aea”,“aéb”].sort
=> [“aea”, “az”, “aéb”]

Bien sur, j’aimerais obtenir
[“aea”, “aéb”, “az”]


Farzad FARID / Architecte Open Source - Associé
Pragmatic Source / http://www.pragmatic-source.com
Tel : +33 9 53 19 21 90 / Mob : +33 6 03 70 65 46


#6

Héhé, il faudra que je fasse un patch à mon projet
http://naturalsort.rubyforge.org/
(pub perso gratos) avec une de ces bonnes idées :wink:

On Jan 22, 9:21 pm, Gregoire LEJEUNE removed_email_address@domain.invalid