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 dans un CSV et affichage de la ligne


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Par défaut Recherche dans un CSV et affichage de la ligne
    Bonjour,

    J'ai a rechercher dans un fichier CSV (contenant plusieurs lignes) une valeur incluse dans un combobox. Ensuite, je veux afficher les lignes avec cette valeur dans un DGV.

    J'ai testé 2 solutions sans succès. Admettons ici que je cherche les lignes contenant l'ID "1", à la 3e colonne de mon CSV.

    1-
    Avec la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InStr(String1, String2)
    Le problème c'est que si je cherche l'ID "1", il peut aussi être contenu dans l'heure (ex: 13h31). Donc il me retournera toute les lignes qui ont "1" à l'intérieur.

    Noter ici que la largeur des colonnes n'est pas prédéfini, donc je ne pourrais pas faire une comparaison de string à partir du Xe caractère par exemple.

    2-
    Je me suis donc dit que j'allais vérifier à la position exacte, soit la colonne 3. J'incrémente donc un compteur qui lit char par char avec un StreamReader, quand j'ai passé 2 virgules, je suis rendu à la colonne 3. Alors je concactène les char jusqu'à la virgule suivant et ensuite je vérifie ce mot avec mon filtre. Je trouve les bonnes lignes.

    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
                    While SR.EndOfStream = False
     
                        While compteur < index
                            Ascii = SR.Read
                            If Ascii = 44 Then
                                compteur += 1
                            End If
                        End While
     
                        compteur = 0
                        Ascii = 0
     
                        While Ascii <> 44
                            Ascii = SR.Read
                            If Ascii <> 44 Then
                                mot += Convert.ToChar(Ascii)
                            End If
                        End While
     
                        If mot.ToLower = filtre.ToLower Then
                            MessageBox.Show(SR.ReadLine())
                        Else
                            SR.ReadLine()
                        End If
     
                        mot = ""
                    End While
     
                End With
    Le problème c'est que le curseur est rendu à cette position, et si j'utilise StreamReader.ReadLine(), il lit la ligne jusqu'à la fin, mais en ommetant le début (évidemment car le curseur est rendu à la colonne 4). Moi je veux toute la ligne.

  2. #2
    Membre expérimenté Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Par défaut
    J'ai essayé de travailler avec la fonction BaseStream.Position

    Les ajouts sont en gras:

    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
    While SR.EndOfStream = False
                        position = SR.BaseStream.Position
                        While compteur < index
                            Ascii = SR.Read
                            If Ascii = 44 Then
                                compteur += 1
                            End If
                        End While
    
                        compteur = 0
                        Ascii = 0
    
                        While Ascii <> 44
                            Ascii = SR.Read
                            If Ascii <> 44 Then
                                mot += Convert.ToChar(Ascii)
                            End If
                        End While
    
                        If mot.ToLower = filtre.ToLower Then
                            SR.BaseStream.Position = position
                            MsgBox(position)
                            MessageBox.Show(SR.ReadLine)
                        Else
                            SR.ReadLine()
                        End If
    
                        mot = ""
                    End While
    La position semble est prise en considération, par contre il m'envoit encore que le restant de la ligne, après le filtre que je cherche dans mes lignes. J'ai vu qu'i fallait que le Stream.CanSeek = True pour fonctionner, ce qui est le cas.

    Je continue à me creuser la tête

  3. #3
    Membre expérimenté Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Par défaut
    HAHA!

    J'ai trouvé, j'aurais dû y penser plus tôt. Au fur et à mesure que je consulte ma ligne, j'ajoute les char consultés dans une string "ligne" et à la fin je l'inclus pour combler le vide!

    C'était trop facile pour y penser du premier coup...

    KISS (Keep It Simple&Stupid)



    À bientôt!

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

Discussions similaires

  1. Recherche dans 2 tables avec affichage
    Par cestmoi007 dans le forum Débuter
    Réponses: 1
    Dernier message: 02/06/2014, 09h55
  2. [XL-2003] Boucle pour (moteur de) recherche dans plusieurs colonnes et affichage réponse
    Par Cenotik dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/04/2011, 01h47
  3. recherche dans feuille excel et affichage spécial
    Par toutounette dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/10/2007, 11h16
  4. Recherche dans fichier CSV
    Par psal78 dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 02/05/2007, 08h48
  5. recherche dans une bas et affichage avec sal
    Par sabrina22 dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/01/2006, 14h33

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