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 :

Récupérer l'information d'une ligne d'un fichier


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut Récupérer l'information d'une ligne d'un fichier
    Bonjour tout le monde,

    Voici ma problématique,

    Dans un programme j'ai fait un bouton parcourir, et en sélectionnant le fichier j'aimerais enregistrer dans une RichTextBox une partie du texte que contient le fichier, or je n'arrive qu'à avoir le texte en entier ou alors la première ligne seulement.

    Je passe par System.IO.StreamReader dans mon programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Dim OpenFile As New OpenFileDialog
            OpenFile.FileName = ""
            OpenFile.Filter = "Fichier Sage|*.mae;*.gcm;*.mdp;*.imo"
            OpenFile.ShowDialog()
            Try
                Dim lire As New System.IO.StreamReader(OpenFile.FileName)
                RichTextBox1.Text = lire.ReadToEnd          
            Catch ex As Exception
            End Try
    End Sub

    Mon fichier contient le texte suivant quand on l'ouvre avec bloc-note :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [CBASE]
    ServeurSQL=PORT-RAPHAEL
    Createur=COLU
    Type=CIAL
    J'aimerais avoir "PORT-RAPHAEL" dans RichTextBox1, dans le but de construire après coup une chaine de connexion à un sql server.

    J'ai essayé avec ReadToEnd et ReadLine sans obtenir le résultat escompté.


    Toutes les suggestions sont les bienvenues

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    RichTextBox.multiline = true bien que théoriquement cette propriété est par défaut définit à True
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Je crois que le code suivant fait ce que tu demandes ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            For Each Ligne As String In RichTextBox1.Lines
                If Ligne.IndexOf("ServeurSQL=") > -1 Then
                    MessageBox.Show(Ligne.Substring(Ligne.IndexOf("ServeurSQL=") + 11)) ' Affiche le nom du serveur
                    Exit For
                End If
            Next
    Bonne soirée,

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je crois que le code suivant fait ce que tu demandes ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            For Each Ligne As String In RichTextBox1.Lines
                If Ligne.IndexOf("ServeurSQL=") > -1 Then
                    MessageBox.Show(Ligne.Substring(Ligne.IndexOf("ServeurSQL=") + 11)) ' Affiche le nom du serveur
                    Exit For
                End If
            Next
    Bonne soirée,
    Pour la petite histoire, j'ai appris, un peu à la dure qu'une "Ligne VB" dans un RichTextBox, n'est pas forcément la ligne affichée dans le contrôle. Pour VB, la ligne d'un RichTextBox, c'est le texte entre deux «Enter», même si c'est 3 lignes à l'écran.

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Oui clementmarcotte ... tu as raison mais si tu vois bien la question initiale tu conviendras que c'est sans importance ici.
    Note encore que si tu as une meilleure solution, nous sommes tous preneurs ...

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour

    Citation Envoyé par Phil Rob Voir le message
    Oui clementmarcotte ... tu as raison mais si tu vois bien la question initiale tu conviendras que c'est sans importance ici.
    Effectivement, j'ai la même impression. Mais je pense à l'avenir. La conversation est quand même archivée, et cela pourrait servir à d'autres dans l'avenir.


    Note encore que si tu as une meilleure solution, nous sommes tous preneurs ...
    Pas sûr que ce soit meilleur, mais juste pour le fun et pas testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub TrouvePORT-RAPHAEL
        dim LeTexte as string = richtextbox1.text
        if letexte,contains("ServeurSQL=") then
                    MessageBox.Show(LeTexte.Substring(LeTexte.IndexOf("ServeurSQL=") + 11)) ' Affiche le nom du serveur
        else
                    messagebox.show("Nom du serveur pas trouvé, se plaindre à l'auteur qui n'a pas testé son affaire")
        End If
    end sub

  7. #7
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bravo clementmarcotte !
    Ton code est presque bon, il pend en une seule chaine tout le texte de RichTextBox. Seul ton test doit être corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim LeTexte As String = richtextbox1.text
            If LeTexte.IndexOf("ServeurSQL=") > -1 Then
     ................... LeTexte.Substring(LeTexte.IndexOf("ServeurSQL=") + 11, LongueurDeLaChaineCherchee)
    .....................
    Mais dans la suite, il faut ajouter à la méthode SubString(), le nombre de caractères de la chaine cherchée sinon, Substring() va lire tout le reste du texte, ce qui ne donnera pas le nom du serveur.
    D'autre part, pour travailler sur l'entièreté du texte du RichtextBox, il est possible de programmer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If RichTextBox1.Find("ServeurSQL=") > -1 Then ...............
    Bref, comme c'est souvent le cas, il y en a pour tous les goûts ...
    Bonne soirée

  8. #8
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Bravo clementmarcotte !
    Ton code est presque bon, il pend en une seule chaine tout le texte de RichTextBox. Seul ton test doit être corrigé :

    Mais dans la suite, il faut ajouter à la méthode SubString(), le nombre de caractères de la chaine cherchée sinon, Substring() va lire tout le reste du texte, ce qui ne donnera pas le nom du serveur.


    Bonne soirée
    Effectivement, il y a une «petite» différence entre lire une ligne et un texte au complet.

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Bon Voilà. Hier soir. chez-moi, je me suis permis cette nouvelle version. (Désolé pour le fichier-joint, c'est ce qui me semblait le plus simple, à cause de mon fichier texte.)

    J'ai repris ton exemple de fichier sous la forme d'un fichier texte, et j'ai modifié ton filtre de boîte de dialogue. Je fais lire le fichier une ligne à fois et j'envoie juste Port-Raphael dans le richtextbox. Mon fichier texte est dans le bin\debug.

    La lecture du fichier se fait ainsi:
    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
    31
    32
    33
    34
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim LaLigne As String = String.Empty
            Dim LExtrait As String = String.Empty
            Dim LaPlace As Integer = 0
            Dim LaLongueurLigne As Integer = 0
            Dim LaLongueurExtraite As Integer = 0
            Dim OpenFile As New OpenFileDialog
            OpenFile.FileName = ""
            OpenFile.Filter = "Fichier Sage|*.mae;*.gcm;*.mdp;*.imo|Fichiers texte|*.txt;*.csv|Tous le fichiers|*.*"
            OpenFile.ShowDialog()
            Try
                Dim lire As New System.IO.StreamReader(OpenFile.FileName)
                'Boucler sur les lignes du fichier
                Do Until lire.EndOfStream = True
                    LaLigne = lire.ReadLine
                    If LaLigne.StartsWith("Serveur") Then
                        'Je sais que cela pourrait être plus court
                        'Mais c'est mauditement plus facile à déboguer
                        'comme cela
                        LaPlace = LaLigne.IndexOf("=")
                        LaLongueurLigne = LaLigne.Length
                        LaLongueurExtraite = LaLongueurLigne - LaPlace - 1
                        LExtrait = LaLigne.Substring(LaPlace + 1, LaLongueurExtraite)
                        LExtrait = LExtrait.Trim
                        RichTextBox1.AppendText(LExtrait)
                    End If
                Loop
                lire.Close()
                lire = Nothing
            Catch ex As Exception
            End Try
     
     
        End Sub
    Fichiers attachés Fichiers attachés

  10. #10
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Encore une solution ... comme je l'écrivais hier, il y en a pour tous les goûts, et davantage ...
    Raphaelgp72 doit bien trouver son bonheur dans tout çà ..
    Très bonne soirée à tous

  11. #11
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Partant du postulat :

    Le contenu du fichier est structuré de type ".ini"

    Alors une autre solution serait :

    L'utilisation d'une classe de gestion de fichier .ini.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim Value as string = Ini.ReadValue("D:\Bureau\Test.txt", "CBASE", "ServeurSQL")
    Nb : La classe peut être épuré si OP n'utilise que la lecture de la paire clé valeur.

    A+

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/10/2018, 14h00
  2. [AC-2010] récupérer les informations d'une ligne d'un sous etat
    Par safa-ini dans le forum Access
    Réponses: 1
    Dernier message: 29/03/2014, 11h53
  3. Réponses: 5
    Dernier message: 27/07/2010, 12h59
  4. Réponses: 1
    Dernier message: 10/04/2010, 07h16
  5. Réponses: 5
    Dernier message: 23/12/2005, 19h19

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