Forum: Rails France tri et caractères accentués

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
72cb32060772721a561890385172355e?d=identicon&s=25 Sébastien Lamy (Guest)
on 2009-01-22 19:55
(Received via mailing list)
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
935c6ae999384ffddd00721420cb39fc?d=identicon&s=25 Gregoire LEJEUNE (Guest)
on 2009-01-22 21:04
(Received via mailing list)
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 <lamyseba@free.fr> a écrit :
935c6ae999384ffddd00721420cb39fc?d=identicon&s=25 Gregoire LEJEUNE (Guest)
on 2009-01-22 21:18
(Received via mailing list)
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
<gregoire.lejeune@gmail.com> a écrit :
07086dbcfa310677eff50902f4f4ec96?d=identicon&s=25 Farzad FARID (Guest)
on 2009-01-22 21:21
(Received via mailing list)
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 :) 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
935c6ae999384ffddd00721420cb39fc?d=identicon&s=25 Gregoire LEJEUNE (Guest)
on 2009-01-22 21:21
(Received via mailing list)
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 <gregoire.lejeune@gmail.com>:
9084b2410f497f773e342b2d522b3818?d=identicon&s=25 francisoud (Guest)
on 2009-02-05 10:21
(Received via mailing list)
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 ;)

On Jan 22, 9:21 pm, Gregoire LEJEUNE <gregoire.leje...@gmail.com>
This topic is locked and can not be replied to.