Tuesday, September 07, 2010 Register
 English (United States) Français (France)


Vous etes ici Forums-Discussions
   
Les forums ExchangeInfos Minimize
Retirer les accents des chaines de caractères
Last Post 08 Mar 2009 05:11 PM 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 Sep 2008 05:02 PM  

"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 Mar 2009 05:11 PM  

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
Privacy StatementTerms Of UseCopyright ExchangeInfos.com

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