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 :

Passer de VB6 à VB.NET - Fichiers séquentiels


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Passer de VB6 à VB.NET - Fichiers séquentiels
    Bonjour,

    Je n'arrive pas à trouver comment exploiter les données d'un fichier *.TXT dont les champs sont séparés par une virgule alors que j'y arrivais bien en VB6.
    Voici comment se présentent les lignes dans le fichier :

    8,1,"Lucien"
    9,1,"Alix"
    10,1,"Guillaume"
    11,1,"Hortense et Pauline"


    Voici un extrait de mon code en VB6 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i%, j%, m%
        If laDate = "" Or Not IsDate(laDate) Then laDate = Date
        titreMsg$ = "À souhaiter le " & Format(laDate, "dddd d mmmm")
        Open leChemin$ & "\" & nomFich1$ For Input As #1
        Do While Not EOF(1)
            Input #1, j%, m%, fete$
            If j% = Day(laDate) And m% = Month(laDate) Then
                Exit Do
            End If
        Loop
        Close #1
    --------

    Pouvez-vous m'aider ?

    D'avance, un grand merci !

  2. #2
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Les fichiers séquentiels en VB.Net, exemple :
    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
    Private Sub BLire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BLire.Click
     
        Dim FichierEntree As String = "X:\Tmp\MonFichierData.dat"
        Dim FEntree As BinaryReader
        FEntree = New BinaryReader(File.Open(FichierEntree, FileMode.Open, FileAccess.Read))
     ' *** Dans ton exemple, chaque enregistrement a 3 champs : 2 entiers et une chaine
        While FEntree.PeekChar() <> -1  ' Si = -1, alors c'est l'EOF
            PremierEntier = FEntree.ReadInt32()
            SecondEntier = FEntree.ReadInt32()
            LaChaine = FEntree.ReadString()
     ' *** utiliser les données de cet enregistrement
        End While  ' Tant qu'il y a des enregistremnt, on boucle ...
     
        FEntree.Close
     
    End Sub
    J'espère que ceci t'aidera ....

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Merci !
    Merci infiniment pour cette réponse rapide et efficace.
    Grâce à toi, je vais m'en sortir.
    Bonne semaine.

  4. #4
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Attention, ton exemple semble être un fichier de lignes plutôt qu'un vrai séquentiel.
    N'hésite pas à demander si problème ...
    ...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Effectivement, il y a un problème.
    Désolé si j'ai mal qualifié mon fichier texte, c'est probablement ce qui fait que ça ne fonctionne pas parfaitement.
    Voilà comment j'ai intégré ton code 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
    14
    15
    16
    17
    18
    19
        Private Sub BtnAfficheFete_Click(sender As Object, e As EventArgs) Handles BtnAfficheFete.Click
            Dim FichierEntree As String = "fetes.txt"
            Dim FEntree As BinaryReader
            FEntree = New BinaryReader(File.Open(FichierEntree, FileMode.Open, FileAccess.Read))
            ' *** Dans ton exemple, chaque enregistrement a 3 champs : 2 entiers et une chaine
            While FEntree.PeekChar() <> -1  ' Si = -1, alors c'est l'EOF
                jour = FEntree.ReadInt32()
                mois = FEntree.ReadInt32()
                fete = FEntree.ReadString()
                MsgBox(jour & ", " & mois & ", " & fete)' *************** Placé provisoirement ici pour contrôler au fur et à mesure la sortie ****************
                ' *** utiliser les données de cet enregistrement
            End While  ' Tant qu'il y a des enregistremnt, on boucle ...
     
            If jour = Date.Today.Day And mois = Date.Today.Month Then
                MsgBox("Aujourd'hui, on fête les " & fete)
            End If
     
            FEntree.Close()
        End Sub
    Je joins une copie d'écran des 3 premiers affichages du MsgBox (testFichier01.jpg).
    Ces affichages se poursuivent jusqu'au mois de Mai puis le programme plante (testFichier02.jpg) avec une erreur d'exception.

    Nom : testFichier01.jpg
Affichages : 188
Taille : 134,2 KoNom : testFichier02.jpg
Affichages : 180
Taille : 128,7 Ko

    Mon fichier "fetes.txt" comporte 366 lignes correspondant à chacun des jours d'une année, y compris le 29 février.
    Chaque ligne affiche le jour, le mois et le Saint du jour.
    Elle se termine par un "retour chariot".
    Chaque donnée étant séparée de la suivante par une virgule.

    Est-ce suffisamment clair pour toi ? Merci encore pour ton aide.
    Cordialement,

  6. #6
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Je m'y attendais ... mais t’inquiète, voila le code adapté à ton fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            Dim FichierEntree As String = "D:\Tmp\FauxSequentiel.txt"
            Dim FEntree As StreamReader
            Dim UneLigne As String
            Dim Resultat() As String
            FEntree = New StreamReader(FichierEntree)
            ' *** Dans ton exemple, chaque enregistrement a 3 champs : 2 entiers et une chaine
            While FEntree.Peek() <> -1  ' Si = -1, alors c'est l'EOF
                UneLigne = FEntree.ReadLine()
                Resultat = UneLigne.Split(",")  ' on obtient les résultats sous la forme de 3 chaines dans une table
                MessageBox.Show(Resultat(0) & " " & Resultat(1) & " " & Resultat(2).Replace("""", ""))  ' Pour tests
                ' *** utiliser les données de cet enregistrement
            End While  ' Tant qu'il y a des enregistrement, on boucle ...
            FEntree.Close()
    N'hésite pas si besoin ...

    Bon travail,

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Déjà !
    Trop fort !
    Je vais tester et revenir te donner le résultat.
    Merci, merci, merci !

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Ça fonctionne parfaitement maintenant.
    Que dire d'autre que "Merci infiniment" ?

    J'ai constaté que les guillemets dans mon fichier texte ne sont plus nécessaires.
    En revanche, contrairement à VB6, les lettres accentuées sont remplacées par un petit losange noir contenant un point d'interrogation (voir copie d'écran).

    Y a-t-il quelque chose à faire pour que ces lettres s'affichent correctement ?

    Nom : testFichier03.jpg
Affichages : 168
Taille : 102,2 Ko

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    quand tu ouvres ton streamreader tu dois pouvoir préciser le type d'encodage du fichier (utf8 ou autre)
    sans le préciser ca utilise celui par défaut dans windows (iso-88xx-? ou un truc dans le genre)
    et si c'est pas le bon certains caractères ne sont pas compris

  10. #10
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Voici la ligne d'ouverture adaptée (peut-être ... : j'ai utilisé Default, mais, il y a aussi UTF8, ASCII, ... et d'autres, si Default ne convient pas, tu dois faire des essais ... ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FEntree = New StreamReader(FichierEntree, System.Text.Encoding.Default)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Voilà un "Default" qui n'en est pas un.
    C'est exactement l'instruction qui change tout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Text.Encoding.Default
    convient parfaitement.

    Un très grand merci pour ton aide et ta disponibilité.

  12. #12
    Nouveau membre du Club Avatar de paradize99
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2019
    Messages : 60
    Points : 29
    Points
    29
    Par défaut
    oublie pas de mettre la discussion résolue

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/09/2014, 15h14
  2. Réponses: 5
    Dernier message: 17/07/2013, 18h25
  3. Réponses: 1
    Dernier message: 30/01/2008, 21h40
  4. Choix d'un langage : passer de VB6 à quoi ? Windev, Delphi ou VB.net ?
    Par New dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 05/10/2006, 21h45
  5. [VB6] Télécharger un fichier avec VB 6
    Par lechevbt dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/02/2004, 20h05

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