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

VB.NET Discussion :

Reperer la position d'un mot qui se répète dans une chaine


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Reperer la position d'un mot qui se répète dans une chaine
    Bonjour à tous, je travail sur Visual Studio (VB 2008) et je souhaite modifier une chaine de caractere, je m'explique:

    J'ai une chaine de caractere qui contient X fois le mot "total", à coté de ça j'ai un tableau de X lignes, qui contient une chaine de caractère par ligne.

    Je souhaite modifier ma chaine de la maniere suivante :

    Je souhaite remplacer la 1ere occurence de "total" par
    "total" & tableau (0)
    la 2eme occurence par :
    "total" & tableau (1) etc ....

    Mon problème est que je n'arrive pas à reperer la position de chaque "total" dans ma chaine de caractère, je n'arrive qu'a reperer le 1er et le dernier total grâce à : IndexOf et lastIndexOf ...

    Pourriez vous m'aider svp?

    Je voudrais faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i=0 to tableau.lenght
    écrire dans fichier à l'index du ieme total : "total" & tableau(i)
    next i

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    euh tu peux donner un exemple de ce que tu as au debut et ce que tu veux obtenir?
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    admettons que j'ai ce fichier :

    total 0
    hey salut !
    total 1255
    yo
    total 45
    re salut
    .....
    ....

    Et que j'ai un tableau :
    tab(0)="test0"
    tab(1)="test1"
    tab(2)="test2"
    tab(3)="test3"
    tab(4)="test4"
    ...

    Je veux obtenir :
    test0
    total 0
    hey salut !
    test1
    total 1255
    yo
    test2
    total 45
    re salut
    .....
    ....
    je veux inserer le contenu du la Xeme case au dessus du Xeme total

  4. #4
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Salut,

    Peut être comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
            Dim originalLignes As New List(Of String)
            originalLignes.Add("total 0")
            originalLignes.Add("hey salut !")
            originalLignes.Add("total 1255")
            originalLignes.Add("yo")
            originalLignes.Add("total 45")
            originalLignes.Add("re salut")
     
            Dim tests As New List(Of String)
            tests.Add("test0")
            tests.Add("test1")
            tests.Add("test2")
            tests.Add("test3")
            tests.Add("test4")
     
            Dim modifiedLignes As New List(Of String)
     
            Dim i = 0
            For Each ligne In originalLignes
                If ligne.Contains("total") Then
                    modifiedLignes.Add(tests(i))
                    i += 1
                End If
                modifiedLignes.Add(ligne)
            Next
    J’ai des questions à toutes vos réponses!

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    1) je lis toutes les lignes de mon fichier ReadAllLines()

    2)une petite boucle sur mon fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim max As Integer
    If tab.Count<allLine.Count/2 Then 
        max =tab
    Else 
         max = allLine.Count/2 
    End If
    For i =0  to max -1
            Console.WriteLine(tab(i))
            Console.WriteLine(allLine(i*2)
            Console.WrileLine(allLine((i*2)+1)
        End if
    Next
    La solution de N4w4k a l'avantage de géré si il y a plus d'une ligne de résultat
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    je vous remercie pour vos réponses, mais en fait c'est un peu plus compliqué que ça, je vous explique, mon application devra lire un fichier tous les jours et le completer en ajoutant des commentaires au dessus des "total", le contenu est variable. Voici un prototype de fichier :

    total un nombre
    du texte (nombre de ligne variable)
    total un nombre
    du texte (nombre de ligne variable)
    total un nombre
    du texte (nombre de ligne variable)
    total un nombre
    du texte (nombre de ligne variable)
    total un nombre
    du texte (nombre de ligne variable)
    total un nombre
    du texte (nombre de ligne variable)
    ....

    C'est pour celà que je ne peux rien coder en dur. Voici comment j'ai procédé jusque maintenant:

    je lis mon fichier avec readallLine()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fileReader = My.Computer.FileSystem.ReadAllText(fichier_log)
    J'ai mon tableau "tabComments" qui contient X lignes (1 ligne par total) qui a été importé depuis un autre fichier, et chaque ligne doit se mettre au dessus du total correspondant.

    Je voudrais remplir un 2eme tableau de X ligne qui contiendra dans chaque case la position en integer du "total" associé.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    indexDuPremierTotal= fileReader.IndexOf("total")
    tabComments(0) = indexDuPremierTotal
    Vous comprenez mieux?

  7. #7
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Citation Envoyé par Hanooman Voir le message
    C'est pour celà que je ne peux rien coder en dur.
    Si c'est le fait que je rempli mon tableau en dur qui te gêne, c'est parce que j'avais la flemme de créer un fichier puis d'en extraire les lignes pour tester la solution.. Je suis parti du principe que tu n'avais pas de problème pour extraire les lignes de ton fichier.

    Sinon essaie avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim originalLignes As String()
            Using sr As New IO.StreamReader(filename1)
                originalLignes = sr.ReadToEnd.Split(vbCrLf)
            End Using
     
            Dim tests As String()
            Using sr As New IO.StreamReader(filename2)
                tests = sr.ReadToEnd.Split(vbCrLf)
            End Using
     
            'utilisation identique de originalLignes que dans mon précédent message
    J’ai des questions à toutes vos réponses!

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Citation Envoyé par -N4w4k- Voir le message
    Si c'est le fait que je rempli mon tableau en dur qui te gêne, c'est parce que j'avais la flemme de créer un fichier puis d'en extraire les lignes pour tester la solution.. Je suis parti du principe que tu n'avais pas de problème pour extraire les lignes de ton fichier.

    Sinon essaie avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim originalLignes As String()
            Using sr As New IO.StreamReader(filename1)
                originalLignes = sr.ReadToEnd.Split(vbCrLf)
            End Using
     
            Dim tests As String()
            Using sr As New IO.StreamReader(filename2)
                tests = sr.ReadToEnd.Split(vbCrLf)
            End Using
     
            'utilisation identique de originalLignes que dans mon précédent message
    Plus simple File.ReadAllLines
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    j'ai réussi ! merci

    Voici le code de ma fonction pour ceux que celà interesse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
       Public Sub insererRepertoiresDansLog()
     
            Dim fichier_log As String
            'Chemin de mon fichier LOG à modifier (rajouter un ligne au dessus de chaque "total"
            fichier_log = "..\..\docs\logs\putty_" & Replace(Date.Today, "/", "") & ".log"
            Dim Stream_log As New StreamReader(fichier_log)
            Dim ligne_log As String
            Dim liste As String
     
            Dim i As Integer = 0
            'Importation de mon tableau qui contient les lignes à rajouter au dessus de "total"
            tab = recupererListeRepertoiresBNDC()
            Do
                'lecture du fichier lignes par lignes
                ligne_log = Stream_log.ReadLine()
                If ligne_log <> Nothing Then
                    If ligne_log.Contains("total ") Then
                        'si la ligne contient total, on rajoute le commentaire avant
                        liste += tab(i) & vbCrLf
                        i += 1
                    End If
                    liste += ligne_log & vbCrLf
     
                End If
            Loop Until ligne_log Is Nothing
            Stream_log.Close()
     
            'On écrase l'ancien fichier par le nouveau contenu de "liste"
            My.Computer.FileSystem.WriteAllText(fichier_log, liste, False)
        End Sub
    N'hésitez pas si vous avez des questions

  10. #10
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Juste une remarque. Essaie de plus travailler avec des List(Of String) que des tableaux, c'est plus intuitif, il y a plus de fonctionnalités.. bref c'est mieux!

    En plus, dans le cas où on doit vraiment utiliser un tableau, on peut faire array = maListe.ToArray() pour l'obtenir, et dans le cas où l'on a un tableau, on peut créer la liste avec maListe = New List(Of String)(array).

    N'oublie pas le si tu n'as plus de problème.

    Bon code.
    J’ai des questions à toutes vos réponses!

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ok ! je te remercie pour l'astuce !

  12. #12
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Salut

    un peu en retard
    une proposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Function Process(ByVal fileinput As String) As List(Of String)
            Dim listinput As New List(Of String)
            Dim listoutput As New List(Of String)
            Dim counter As Integer
            Dim iter As Integer
            counter = 0
            Try
                listinput = System.IO.File.ReadAllLines(fileinput).ToList
                For iter = 0 To listinput.Count - 1
                    If listinput(iter).Contains("total") Then
                        listoutput.Add("test" & counter.ToString)
                        counter += 1
                    End If
                    listoutput.Add(listinput(iter))
                Next
     
     
            Catch ex As Exception
     
            End Try
            Return listoutput
        End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim listoutput As New List(Of String)
            listoutput = Process(Application.StartupPath & "\textin.txt")
            System.IO.File.WriteAllLines(Application.StartupPath & "\textout.txt", listoutput.ToArray)
    bonne continuation

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

Discussions similaires

  1. Background qui se répète dans une div et son contenu
    Par LeHudiaa dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/07/2009, 13h08
  2. Ligne qui se répète dans une table
    Par anywhere dans le forum PL/SQL
    Réponses: 1
    Dernier message: 19/09/2008, 16h16
  3. Afficher un mot qui se trouve dans une phrase.
    Par XpFive dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/08/2008, 19h47
  4. Réponses: 8
    Dernier message: 16/05/2008, 10h34
  5. Réponses: 10
    Dernier message: 22/05/2004, 13h51

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