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 :

recherche de texte en deux caractére d'un fichier texte


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut recherche de texte en deux caractére d'un fichier texte
    Bonjour,

    j'ai un fichier texte dans lequel je dois afficher toutes les lignes situé entre un numéro choisis par l'utilisateur (bdd_op) et le mot (intervention) :

    voici mon code, malheureusement ça ne fonctionne pas, rien ne s'affiche dans la textbox, le chemin du fichier et bon (car j'arrive affiche le contenu en fesant un for each line )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            For Each ligne As String In IO.File.ReadAllText("C:\Users\laurent\Documents\reception.txt")
                If TextBox1.Text.StartsWith(bdd_op) And TextBox1.Text.EndsWith("Intervention") Then
                    TextBox1.Text = TextBox1.Text & ligne
                End If
            Next
    si vous voyez une erreur ??

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Deux choses :
    - Dans ton ForEAch, tu charges la variable "ligne", alors que dans ton If, tu testes la valeur de Textbox
    - Je pense que tu n'as pas compris le fonctionnement de "EndsWith" et "StartsWith"

    D'après ce que je comprends de ton énoncé, je ferais ça :
    (PS : Mon code ne compile certainement pas, j'ai jamais fait de VB.NET de ma vie, que du VB6 et du C#)

    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
     
    dim resultat as string
    dim i as integer
    i = 0
     
    For Each ligne As String In IO.File.ReadAllText("C:\Users\laurent\Documents\reception.txt")
                i = i + 1
                if i < bdd_op then
                          continue
                end if
     
                If ligne.IndexOf("Intervention") then
                          resultat = resultat & ligne.substr(ligne, 0, ligne.IndexOf("Intervention"))
                           break
                else
                          resultat = resultat & ligne & vbcrlf
                End If
    Next

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Citation Envoyé par gastoncs Voir le message
    Bonjour,

    j'ai un fichier texte dans lequel je dois afficher toutes les lignes situé entre un numéro choisis par l'utilisateur (bdd_op) et le mot (intervention) :

    voici mon code, malheureusement ça ne fonctionne pas, rien ne s'affiche dans la textbox, le chemin du fichier et bon (car j'arrive affiche le contenu en fesant un for each line )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            For Each ligne As String In IO.File.ReadAllText("C:\Users\laurent\Documents\reception.txt")
                If TextBox1.Text.StartsWith(bdd_op) And TextBox1.Text.EndsWith("Intervention") Then
                    TextBox1.Text = TextBox1.Text & ligne
                End If
            Next
    si vous voyez une erreur ??
    Bonjour,

    deux choses :

    - Tu n'affectes pas la ligne à ta textbox, alors que tu regardes dans la textbox pour voir si le numéro est le mot sont présents
    - Si tu affectes la ligne à la textbox ton code fonctionnera seulement dans le cas ou ta ligne commence pas le numéro (ça je suppose que c'est OK) et finit par "Intervention", là je suppose que ce n'est pas ce que tu veux, je pense que tu veux plutôt que la ligne contienne (contains) "Intervention" (attention à la casse aussi)

    StringBuilder en effet topn code ne passera pas :

    If ligne.IndexOf("Intervention") then retourne l'index, si "Intervention" n'est pas présent ça plante, mais tu ne retournera jamais un booléen.
    Break dans le if ?
    Continue dans le if ?

  4. #4
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    En utilisant les méthodes d'extension tu peux tenter quelque chose comme ceci:
    (Note, la ligne contenant intervention ne sera pas récupérée, même s'il y a autre chose avant sur cette ligne)
    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
     
    TextBox1.Text =
        IO.File.ReadAllLines("C:\Users\laurent\Documents\reception.txt").
        Skip(bdd_op).
        TakeWhile(Function(line) Not line.Contains("intervention")).
        Aggregate(New Text.StringBuilder,
                  Function(builder, line) builder.AppendLine(line)).
        ToString
     
    'Input de test:
    'line 0
    'line 1
    'line 2
    'line 3
    'line intervention
    'line 5
    'line 6
     
    'Output de Test (bdd_op = 1):
    'line 1
    'line 2
    'line 3
    À comprendre, adapter, et sécuriser (si le fichier n'existe pas, si bdd_op est négatif par exemples)

    Cordialement !

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Bonjour,

    deux choses :

    - Tu n'affectes pas la ligne à ta textbox, alors que tu regardes dans la textbox pour voir si le numéro est le mot sont présents
    - Si tu affectes la ligne à la textbox ton code fonctionnera seulement dans le cas ou ta ligne commence pas le numéro (ça je suppose que c'est OK) et finit par "Intervention", là je suppose que ce n'est pas ce que tu veux, je pense que tu veux plutôt que la ligne contienne (contains) "Intervention" (attention à la casse aussi)

    StringBuilder en effet topn code ne passera pas :

    If ligne.IndexOf("Intervention") then retourne l'index, si "Intervention" n'est pas présent ça plante, mais tu ne retournera jamais un booléen.
    Break dans le if ?
    Continue dans le if ?
    En effet, il manque un ">= 0" après le indexof()

    Pour le break et le continue... on fait comment pour continuer ou sortir d'un for selon une condition si on peut pas les mettre dans un if ???

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    En effet, il manque un ">= 0" après le indexof()

    Pour le break et le continue... on fait comment pour continuer ou sortir d'un for selon une condition si on peut pas les mettre dans un if ???
    Ah OK, donc pour le "index of" il manque le control de savoir si il est dans la chaine avant.
    Pour sortir du for on fait "Exit For"
    Pour passer à une nouvelle occurence on utilise peut-être continue, je n'ai pas encore eu l'occasion de le faire, j'ai plutôt l'habitude d'enfermer mon traitement dans le if comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if i = bdd_op then
     
    If ligne.contains("Intervention") then
         resultat = resultat & ligne.substr(ligne, 0, ligne.IndexOf("Intervention"))
         exit for
    End If
     
    end if

Discussions similaires

  1. Recherche du caractère "³" dans un fichier texte
    Par SearchProblem dans le forum Langage
    Réponses: 5
    Dernier message: 25/06/2013, 20h51
  2. Réponses: 4
    Dernier message: 14/06/2011, 18h58
  3. Réponses: 6
    Dernier message: 07/06/2011, 12h00
  4. Réponses: 3
    Dernier message: 25/07/2006, 09h40
  5. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 17h35

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