bj33
Messages postés145Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention 1 mai 2012
-
25 nov. 2011 à 23:28
hasnaa -
13 sept. 2013 à 14:02
Bonjour
Par obligation je me suis m'y à .NET v4 et je suis confronté à une transformation d'une méthode php en .NET. Un simple nettoyage de chaine mais çà me prend la tête et me bloque. Donc, un peu d'aide ne serait pas de trop. Merci par avance.
Elle fonctionne parfaitement et dommage qu'en .NET on ne puisse apparement faire aussi simple.
Mes essais
Private Function Nettoie(ByVal sIn As String)
Dim i As Integer
Dim sIntermédiaire As New StringBuilder
Dim sOut As New StringBuilder
Dim doubleQuote As String = "34"
Dim parentGauche As String = "40"
Dim parentDroite As String = "41"
Dim under As String = "151"
Dim esper As String = "38"
Dim caractNul As String = "00"
Dim sRemplacerQuoi() As Char = {doubleQuote, parentGauche, parentDroite, under, esper, "ä", "à", "â", "é", "è", "ê", "ë", "î", "ï", "ô", "œ", "ö", "ü", "ù", "û", "ÿ", "Ä", "À", "Â", "ñ", "É", "È", "Ê", "Ë", "Î", "Ï", "Ô", "Œ", "Ö", "Ü", "Ù", "Û", "ç", "Ç", "Ÿ", "æ", "Æ"}
Dim sRemplacerPar() As Char = {caractNul, caractNul, caractNul, caractNul, "e", "a", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "o", "u", "u", "u", "y", "A", "A", "A", "n", "E", "E", "E", "E", "I", "I", "O", "O", "O", "U", "U", "U", "c", "C", "Y", "a", "a"}
sIn = sIn.Trim.ToLower
sIntermédiaire.Append(sIn)
For i = 0 To (sRemplacerQuoi.Length - 1)
sIntermédiaire.Replace(sRemplacerQuoi(i), sRemplacerPar(i))
Next i
For i = 0 To (Len(sIntermédiaire.ToString) - 1)
' caractère accepté de 0 à 9 et de A à Z
'If (sIntermédiaire.Chars(i) >= Chr(48)) And (sIntermédiaire.Chars(i) <= Chr(57)) _
'Or (sIntermédiaire.Chars(i) >= Chr(65)) And (sIntermédiaire.Chars(i) <= Chr(90)) Then
sOut.Append(sIntermédiaire.Chars(i))
'End If
Next i
Return sOut.ToString
End Function
Private Function NettoieSpeciaux(ByVal Chaine As String)
Dim TableauSup() As String = {"(", ")", "_", "?", "'"}
Dim ChaineNet As String = ""
Dim Nb As Integer
For Nb = 0 To UBound(TableauSup)
ChaineNet = Replace(Chaine, TableauSup(Nb), "")
Next Nb
Return ChaineNet
End Function
La première fonctionne uniquement sur les caractères accentués et la deuxième sur rien, renvoie la chaine sans remplacement.
Donc, ma question: Comment en .NET supprimer les caractères contenus dans le tableau de la deuxième méthode?
ils ne savaient pas que c'était impossible, alors ils l'on fait. mon modeste site
bj33
Messages postés145Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention 1 mai 2012 25 nov. 2011 à 23:59
Pardon mais en fait c'est résolu. Pour qui voudrais avoir la solution. supprimer la variable temporaire et utiliser le paramètre.
Private Function NettoieSpeciaux(ByVal Chaine As String)
Dim TableauSup() As String = {"(", ")", "_", "?", "'"}
'Dim ChaineNet As String = ""
Dim Nb As Integer
For Nb = 0 To UBound(TableauSup)
Chaine = Replace(Chaine, TableauSup(Nb), " ")
Next Nb
Return Chaine
End Function
Je vais pouvoir faire un mix des deux. Maintenant si un spécialiste à mieux, je prends.
ils ne savaient pas que c'était impossible, alors ils l'on fait. mon modeste site
C'est bien, sauf que, si par hasard tu tombes sur un caractère autre, exemple un ¤ ou un $, tu vas être obligé de l'insérer dans ton tableau manuellement, à chaque fois que tu as un nouvel caractère.
On pourrait de façon contraire réfléchir à ce qu'on va garder et pas ce qu'on doit éliminer.
Private Function NettoieSpeciaux(ByVal Chaine As String)
'On récupère les caratères de A à Z, de a à z, et de 0 à 9 uniquement
For Each Caractere In Chaine
If (Asc(Caractere) > 64 And Asc(Caractere) < 91) Or _
(Asc(Caractere) > 96 And Asc(Caractere) < 123) Or _
(Asc(Caractere) > 47 And Asc(Caractere) < 58) Then
'Le caratère est valide
Else
'Le caratère n'est pas valide et on le remplace
Chaine = Replace(Chaine, Caractere, " ")
End If
Next
Return Chaine
End Function
'On récupère les caratères de A à Z, de a à z, et de 0 à 9 uniquement
Dim Rt As Integer
Dim St As String
For Rt = 1 To Len(Chaine)
St = Mid(Chaine, Rt, 1)
If (Asc(St) > 64 And Asc(St) < 91) Or _
(Asc(St) > 96 And Asc(St) < 123) Or _
(Asc(St) > 47 And Asc(St) < 58) Then
'Le caratère est valide
Else
'Le caratère n'est pas valide et on le remplace
Chaine = Replace(Chaine, St, " ")
End If
Next
Me.Caption = Chaine