Remplacement d'un caractère [Résolu]

Signaler
Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour,

J'ai un string qui correspond à un code html

Dans ce code, j'ai besoin de remplacer à un endroit (un lien http:// vers une image), les espaces par "_"

J'utilise la fonction suivante pour rechercher dans le string et je remplace par replace, mais cela ne fonctionne pas.

Quelqu'un a-t'il une idée ?

mon_string = Replace(MidStr(mon_string, "http://", ">"), " ", "_")


Private Function MidStr(ByVal Str As String, ByVal sStart As String, ByVal sEnd As String, Optional ByVal Start As Integer = 30) As String
Try
Dim iStart As Integer = Str.IndexOf(sStart, Start) + sStart.Length.ToString
Dim iEnd As Integer = Str.IndexOf(sEnd, iStart)
Return Str.Substring(iStart, iEnd - iStart)
Catch ex As Exception
Return String.Empty
End Try
End Function

8 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
... ok

beh du coup c'est le premier snippet mais que tu utilises mal

(et en plus il est pas bon, je le modifie)

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim mon_string As String = "blabla TOUTE LA SOURCE HTML   lien   FIN"
        Dim sLink As String
        Dim iLastPosition As Integer = 0

        Do
            iLastPosition = mon_string.IndexOf("http://", iLastPosition + 1)
            sLink = MidStr(mon_string, "http://", ">", iLastPosition)
            If sLink.Contains(" ") Then
                mon_string = mon_string.Replace(sLink, sLink.Replace(" "c, "_"c))
            End If
        Loop While sLink.Contains(" ")

        MessageBox.Show(mon_string)
    End Sub

    Private Function MidStr(ByVal Expression As String, ByVal sLeft As String, ByVal sRight As String, Optional ByVal iStart As Integer = -1) As String
        Dim iPosL As Integer = Expression.IndexOf(sLeft, iStart)
        If iPosL > -1 Then
            Dim iPosR As Integer = Expression.IndexOf(sRight, iPosL + sLeft.Length)
            If iPosR = -1 Then
                'pas le caractère de fin, on prend la chaîne complète
                iPosR = Expression.Length - iPosL - sLeft.Length
                sRight = String.Empty
            End If
            Return Expression.Substring(iPosL, iPosR - iPosL)
        End If
        Return String.Empty
    End Function
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,
ton lien est dans les 30 premiers caractères?
il vient de où ce code, http://www.codyx.org/snippet_recuperer-chaine-inconnue-placee-entre-deux-chaines-connues_334.aspx#1046 ?

il te renvoie une chaine inconnue entre 2 connues, tu ne l'utilises pas correctement

cette chaine peut exister ailleurs aussi dans ta page et tu remplaces toutes les occurrences de la chaine, pas juste dans la partie manquante

je te poste une solution ici :
http://www.codyx.org/snippet_remplacer-chaine-inconnue-placee-entre-deux-chaines-connues_303.aspx#2449

ReplaceString(mon_string, "http://", ">", "_")

++
[hr]
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
et tu me mets le doute maintenant

tu veux remplacer juste les espaces d'un lien/image en particulier?

tu récupères donc un seul lien hein...

mon_string = MidStr(mon_string, "http://", ">").Replace(" "c, "_"c)
Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
2
Je vais être précis dans action.

Je charge des mails d'une boite IMAP que j'enregistre au format .html en unicode ( System.Text.Encoding.Unicode) car sinon j'ai plein de caractères bizarre !

Mais le problème est que tous les liens http:// sont modifiés. Le caractère "_" est remplacé par un espace. Je cherche donc à remplacer tous les espaces de chacun de lien du mail par un "_".

Ouf!!!!
Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
2
J'ai un message d'erreur "L'index était hors limite. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
Nom du paramètre : StartIndex"
Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
2
J'ai trouvé la source de cette erreur car certain mail n'ont pas de lien http:// J'ai donc ajouter un if mon_string.contains("http://")

Par contre mes espaces subsistent dans les liens. Ils ne sont pas remplacés par "_".
Messages postés
134
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
15 février 2011
2
bon bah cela fonctionne mais pas avec que 'http'. il a besoin de 'http://www..."
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
Optional ByVal iStart As Integer = -1
Optional ByVal iStart As Integer = 0

Return Expression.Substring(iPosL, iPosR - iPosL)
Return Expression.Substring(iPosL + sLeft.Length, iPosR - iPosL - sLeft.Length)

++