dimanche 1 août 2010 Inscription
 English (United States) Français (France)


Vous etes ici Forums-Discussions
   
Les forums ExchangeInfos Réduire
Retirer les accents des chaines de caractères
Last Post 08 mars 2009 05:11 by Grégory Schiro. 1 Replies.
Printer Friendly
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages Informative
Administrator
Basic Member
Basic Member
Posts:87

--
26 sept. 2008 05:02  

"Bonjour,

Durant une longue nuit d'insomnie je me suis posé la question suivante:
Existe-t-il une fonction PowerShell pour retirer les accents des chaines de caractères. Exemple pratique, création des utilisateurs depuis un fichiers CSV dont les attributs name=NOM, givenname=Prénom et displayname=""NOM Prenom"".

Et ben, après une recherche avec mon ami Google sans résultat, ce qui m'a bcp déçus de ça part, je me suis mis à écrire la fonction qui permet de le faire.

Donc voici la fonction et bonne utilisation à tous:

************************************


## Function to remove accents
function RemoveAccents([string] $str)
{
[ARRAY]$ReplaceChr = (""E""),(""C""),(""A""),(""I""),(""O""),(""U""),(""Y"")
[ARRAY]$SpecialChr = (""È"",""É"",""Ê"",""Ë""),(""Ç""),(""À"",""Á"",""Â"",""Ã"",""Ä"",""Å"",""Æ""),(""Ì"",""Í"",""Î"",""Ï""),(""Ò"",""Ó"",""Ô"",""Õ"",""Ö""),(""Ù"",""Ú"",""Û"",""Ü""),(""Ý"")

$i=0
do
{
foreach ($chr in $SpecialChr[$i])
{
$str = $str.replace($chr,$ReplaceChr[$i])
$str = $str.replace($chr.ToLower(),$ReplaceChr[$i].ToLower())

}
$i+=1
}while($i -ne $SpecialChr.count)

return $str
}

**************************************"

Grégory Schiro
New Member
New Member
Posts:2

--
08 mars 2009 05:11  

Bonjour,

Je me permets de faire évoluer votre code PowerShell afin de le rendre plus générique. En effet, certains caractères accentués ne sont pas pris en charge.

Je vous propose donc une autre fonction un peu plus générique :

function Remove-Diacritics([string]$string)
{
    $objD = $string.Normalize([Text.NormalizationForm]::FormD)
    $sb = New-Object Text.StringBuilder

    for($i = 0; $i -lt $objD.Length; $i++) {
        $c = [Globalization.CharUnicodeInfo]::GetUnicodeCategory($objD[$i])
        if($c -ne [Globalization.UnicodeCategory]::NonSpacingMark) {
          [void]$sb.Append($objD[$i])
        }
    }

    return "$sb".Normalize([Text.NormalizationForm]::FormC)
}

 

PS> Remove-Diacritics -String 'éàçèöîïñùà'

eaceoiinua

 

Grégory

Grégory Schiro http://scriptingof.blogspot.com
You are not authorized to post a reply.

Active Forums 4.1
NOT LICENSED FOR PRODUCTION USE
www.activemodules.com
ConfidentialitéConditions d'utilisationCopyright ExchangeInfos.com

BorderBoxedGrayBoxedOrangeBlue Small width layoutMedium width layoutMaximum width layoutMaximum textMedium textSmall textBack Top!