IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Trouver une chaine dans une chaine


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Trouver une chaine dans une chaine
    Bonjour tout le monde.

    Je suis devant un problème que j'ai du mal à concevoir.

    Prenons une chaine de caractère comme ça :
    Voici une chaine ##untruc## et je veux remplacer "untruc"
    La chaine exemple explique ce que je cherche à faire.
    Mon souci est que "untruc" peut être n'importe quoi. Le seul point de référence est la prise en les ##.

    Et je ne sais pas trop comment lui dire de chercher les ## et de prendre ce qu'il y a entre les deux.

    Pouvez vous m'aider ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Par défaut
    Salut,

    J'utiliserais, pour ma part, sûrement IndexOf() et LastIndexOf(), Afin de trouver le premier # puis de réduire la chaine de façon récursive si on veut jusqu'a obtenir le texte situé entre tes #. C'est une idée à tester.
    Voici un pdf avec l'ensemble des fonctions sur les String si tu veux:

    http://jca.developpez.com/fichiers/C...gs/Strings.pdf

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    LastIndexOf, j'y avais pas pensé et en même temps je pense ne pas pouvoir l'utiliser. Entre ton lien trés interressant et un peu de tatonnement j'ai fini par trouver un truc dans ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim s As String = Voici une chaine ##untruc## et je veux remplacer 'untruc' 
                lTexte.Text = Replace(s, s.Substring(s.IndexOf("##"), s.Length - s.IndexOf("##", s.IndexOf("##") + 2) - 3), Paragraphe.repTexte(s.Substring(s.IndexOf("##"), s.Length - s.IndexOf("##", s.IndexOf("##") + 2) - 3)))
    La Function repTexte va prendre ##untruc## en argument et renvoyer une chaine qui va bien.

    Dans ce que je viens de produire je ne comprends pas un détail : je fais un +2 pour faire en sorte qu'il me trouve l'occurence des ## aprés la première, mais pourquoi je fais un -3 dérrière ?

    J'ai un problème de compréhension des index dans la chaine

    Problème subsidiaire (et c'est pour ça que le LastIndexOf me parait pas top) : il est possible que j'ai une chaine qui fasse comme ça :
    Voici une chaine ##untruc## et je veux remplacer 'untruc' et je peux avoir un autre ##autre truc## à remplacer également
    Du coup (et parce que la récursivité n'est pas mon fort) je ne sais pas trop comment gérer la chose

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 220
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Merci pour ton aide.

    LastIndexOf, j'y avais pas pensé et en même temps je pense ne pas pouvoir l'utiliser. Entre ton lien trés interressant et un peu de tatonnement j'ai fini par trouver un truc dans ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim s As String = Voici une chaine ##untruc## et je veux remplacer 'untruc' 
                lTexte.Text = Replace(s, s.Substring(s.IndexOf("##"), s.Length - s.IndexOf("##", s.IndexOf("##") + 2) - 3), Paragraphe.repTexte(s.Substring(s.IndexOf("##"), s.Length - s.IndexOf("##", s.IndexOf("##") + 2) - 3)))
    La Function repTexte va prendre ##untruc## en argument et renvoyer une chaine qui va bien.

    Dans ce que je viens de produire je ne comprends pas un détail : je fais un +2 pour faire en sorte qu'il me trouve l'occurence des ## aprés la première, mais pourquoi je fais un -3 dérrière ?

    J'ai un problème de compréhension des index dans la chaine

    Problème subsidiaire (et c'est pour ça que le LastIndexOf me parait pas top) : il est possible que j'ai une chaine qui fasse comme ça :


    Du coup (et parce que la récursivité n'est pas mon fort) je ne sais pas trop comment gérer la chose

    Erf j'avais oublié que tu étais en VB, désolé pour le lien qui est en C# du coup..
    Sinon, tu t'es pas mal débrouillé, j'aurais fais un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim s As String = Voici une chaine ##untruc## et je veux remplacer 'untruc' 
    Dim x As String = s.Substring(s.IndexOf("##")+2) 
    Dim y As String = x.remove(x.IndexOf("##"))
    de cette façon la chaine y vaut la valeur de ce qui était entre ##, tu peux ensuite utiliser ta fonction replace

    (désolé pour l'intégrité du code le VB c'est pas mon truc)

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par papouuu Voir le message
    Erf j'avais oublié que tu étais en VB, désolé pour le lien qui est en C# du coup..
    Sinon, tu t'es pas mal débrouillé, j'aurais fais un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim s As String = Voici une chaine ##untruc## et je veux remplacer 'untruc' 
    Dim x As String = s.Substring(s.IndexOf("##")+2) 
    Dim y As String = x.remove(x.IndexOf("##"))
    de cette façon la chaine y vaut la valeur de ce qui était entre ##, tu peux ensuite utiliser ta fonction replace

    (désolé pour l'intégrité du code le VB c'est pas mon truc)
    Pas grave pour le en C#, y a un moment où je fini par comprendre, tout le monde me balance du C#, du coup, ça me fait bosser, c'est cool.

    Sinon, je vois bien ton idée et ça marche bien.

    Maintenant j'ai du mal à traiter la chose de manière récursive.
    Je tente un While, mais je me barre en boucle infinie, je dois pas prendre la bon truc au départ.

    Voilà comment j'essaie de le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            Dim s As String = "le lien vers ##contactIti## est à modifier ##autrechose## à remplacer aussi"
            While s.IndexOf("##") <> -1
                Dim x As String = s.Substring(s.IndexOf("##") + 2)
                Dim y As String = x.Remove(x.IndexOf("##"))
                Response.Write(y)
            End While
    Je dois me gourré sur la condition, mais j'avoue ne pas être trés doué avec les While.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    c'est très bien expliqué dans ce tutorial pour modifier des chaines via des expressions régulières.
    http://lgmorand.developpez.com/dotnet/regex/

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Par défaut
    ce ne serait pas plus simple d'utiliser une expression régulière. il y a un bon tutorial sur developpez.com. et puis ca peut toujours servir pour la suite.

  8. #8
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par rattlehead Voir le message
    ce ne serait pas plus simple d'utiliser une expression régulière. il y a un bon tutorial sur developpez.com. et puis ca peut toujours servir pour la suite.
    L'expression régulière, j'y ai un peu pensé mais :
    - je suis carrément nul avec ça
    - je ne vois pas comment récupérer la chaine

    L'idée est de récupérer la chaine avec les ##, de la modifier (car elle a un sens dans mon application) et dela réintégrer dans la chaine initiale.
    Et là, avec une expresson régulière, je vois pas du tout comment faire.

    Maintenant si tu as un lien de tuto pour débile profond (c'est mon cas !!!) je prends. Toujours dipsosé à apprendre un truc moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo