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 6 et antérieur Discussion :

[VB6] lecture et écriture de fichier


Sujet :

VB 6 et antérieur

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut [VB6] lecture et écriture de fichier
    salut

    j'ai un fichier texte la position des données est importante.

    1 caractère signifie...
    2 cractèere signifie
    3 au 6 caractèere signifie....
    ...

    voici un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    000001000111100000000000000001263806080616500116491900042    0000008470000000000000000000008470000003860000008470000000000000000000080000100003520000100000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000002000111100000000000000001974406080616513516510500030    0000007955000000000000000000007955000003540000007955000000000000000000020000300003070000080000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    après le 00042 et le 00030, il y a 4 espaces

    lorsque j'écrit chaque valeur sur une ligne j'obtiens le fichier
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    0
    0
    0001
    0001111
    0000000000
    0000
    00
    12638
    060806
    165001
    164919
    00042
     
    000000847000
    0000000000
    0000000084
    7000000386
    000000847000
    000000000000
    000008
    000010
    000352
    000010
    000006
    000000
    000000
    000000
    000000
    000000
    000000
    000000
    000000
    000000
    0000
    0000
    0000
    0000
    000000000000
    000000000000
    000000000000
    000000000000
    000000000000
    000000000000
    000000000000000000000000000000000000000000000000000000000000000000000000
    A
     
     
     
     
    0000
    0200011
    1100000000
    0000
    00
    00197
    440608
    061651
    351651
    05000
    30  
      0000007955
    0000000000
    0000000000
    7955000003
    540000007955
    000000000000
    000000
    020000
    300003
    070000
    080000
    070000
    000000
    000000
    000000
    000000
    000000
    000000
    000000
    000000
    0000
    0000
    0000
    0000
    000000000000
    000000000000
    000000000000
    000000000000
    000000000000
    000000000000
    000000000000000000000000000000000000000000000000000000000000000000000000
    0
    0
    A
    il y a donc un problème après le premier A... il y a une ligne blanche et un genre de carré que je suis pas capable d'affiché ici...


    mon code

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    Open "c:\numeraire\trieuse_out.txt" For Output As #2
    Open "c:\numeraire\trieuse.txt" For Input As #1
    While EOF(1) = False
        RecordType = Input(1, #1)
        Print #2, RecordType
     
        RecordSubtype = Input(1, #1)
        Print #2, RecordSubtype
     
        SequenceNumber = Input(4, #1)
        Print #2, SequenceNumber
     
        OperatorId = Input(7, #1)
        Print #2, OperatorId
     
        AccountNumber = Input(10, #1)
        Print #2, AccountNumber
     
        LabelA = Input(4, #1)
        Print #2, LabelA
     
        LabelB = Input(2, #1)
        Print #2, LabelB
     
        LabelC = Input(5, #1)
        Print #2, LabelC
     
        PCSystemDate = Input(6, #1)
        Print #2, PCSystemDate
        'MsgBox PCSystemDate
     
        TransEndTime = Input(6, #1)
        Print #2, TransEndTime
     
        TransStartTime = Input(6, #1)
        Print #2, TransStartTime
     
        TransElapsedTime = Input(5, #1)
        Print #2, TransElapsedTime
     
        Spaces = Input(4, #1)
        Print #2, Spaces
     
        TotalValue = Input(12, #1)
        Print #2, TotalValue
        'MsgBox TotalValue
     
        AmountClaimed = Input(10, #1)
        Print #2, AmountClaimed
     
        AmountOverShort = Input(10, #1)
        Print #2, AmountOverShort
     
        TotalQtCur = Input(10, #1)
        Print #2, TotalQtCur
     
        TotalValCur = Input(12, #1)
        Print #2, TotalValCur
     
        TotalValCash = Input(12, #1)
        Print #2, TotalValCash
     
        Processed100 = Input(6, #1)
        Print #2, Processed100
     
        Processed50 = Input(6, #1)
        Print #2, Processed50
     
        Processed20 = Input(6, #1)
        Print #2, Processed20
     
        Processed10 = Input(6, #1)
        Print #2, Processed10
     
        Processed5 = Input(6, #1)
        Print #2, Processed5
     
        Processed2 = Input(6, #1)
        Print #2, Processed2
     
        Processed1 = Input(6, #1)
        Print #2, Processed1
     
        Manual100 = Input(6, #1)
        Print #2, Manual100
     
        Manual50 = Input(6, #1)
        Print #2, Manual50
     
        Manual20 = Input(6, #1)
        Print #2, Manual20
     
        Manual10 = Input(6, #1)
        Print #2, Manual10
     
        Manual5 = Input(6, #1)
        Print #2, Manual5
     
        Manual2 = Input(6, #1)
        Print #2, Manual2
     
        Manual1 = Input(6, #1)
        Print #2, Manual1
     
        ChecksUnit = Input(4, #1)
        Print #2, ChecksUnit
     
        CoinUnits = Input(4, #1)
        Print #2, CoinUnits
     
        Denom1Units = Input(4, #1)
        Print #2, Denom1Units
     
        List2Unit = Input(4, #1)
        Print #2, List2Unit
     
        Zeros = Input(12, #1)
        Print #2, Zeros
     
        Zeros = Input(12, #1)
        Print #2, Zeros
     
        ChecksValue = Input(12, #1)
        Print #2, ChecksValue
     
        CoinsValue = Input(12, #1)
        Print #2, CoinsValue
     
        Denom1Value = Input(12, #1)
        Print #2, Denom1Value
     
        List2Value = Input(12, #1)
        Print #2, List2Value
     
        Zeros = Input(72, #1)
        Print #2, Zeros
     
        PollAddress = Input(1, #1)
        Print #2, PollAddress
     
      Wend
     
    Close #1
    Close #2
    après la dernière écriture avant le Wend,c'est là que le problème sembe se passé car un saut de ligne se fait et le caractère carré bizare est ajouté... ce qui fause ensuite la lecture de la deuxième ligne

    une idée?

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    l'instruction print .. provoque par défaut un saut de ligne pour l'éviter rajoute un ; par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print #2, Denom1Value ;

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Mets un ; après chaque donnée sauf en fin de ligne

    A+

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    si je rajoute un ";" à chaque print mais que j'en met pas au dernier, j'obtiens

    [CODE]
    000001000111100000000000000001263806080616500116491900042 0000008470000000000000000000008470000003860000008470000000000000000000080000100003520000100000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A

    000002000111100000000000000001974406080616513516510500030 000000795500000000000000000000795500000354000000795500000000000000000002000030000307000008000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    0A
    [/CODE

    si je mets aussi un ";" au derniers print, les deux première lignes sont ok... mais dans la dernière ligne du fichier il manque les 4 derniers caractères

    et dans les deux cas j'obtiens une erreur: Run time error '62' Input past end of file

    le fichier original
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    000001000111100000000000000001263806080616500116491900042    0000008470000000000000000000008470000003860000008470000000000000000000080000100003520000100000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000002000111100000000000000001974406080616513516510500030    0000007955000000000000000000007955000003540000007955000000000000000000020000300003070000080000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000003000111100000000000000003812406080616535316531400039    0000017580000000000000000000017580000005360000017580000000000000000000860000080004210000110000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000004000111100000000000000003892406080616562916545500134    0000012195000000000000000000012195000005140000012195000000000000000000260000170004190000210000310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000005000111100000000000000001265406080616581416572600048    0000012540000000000000000000012540000005630000012540000000000000000000080000350004870000170000160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000006000111100000000000000009400106080617071817031100407    000000000000000005874000-000058740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    le fichier obtenu avec des ";" a tous les print
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    000001000111100000000000000001263806080616500116491900042    0000008470000000000000000000008470000003860000008470000000000000000000080000100003520000100000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000002000111100000000000000001974406080616513516510500030    0000007955000000000000000000007955000003540000007955000000000000000000020000300003070000080000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000003000111100000000000000003812406080616535316531400039    0000017580000000000000000000017580000005360000017580000000000000000000860000080004210000110000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000004000111100000000000000003892406080616562916545500134    0000012195000000000000000000012195000005140000012195000000000000000000260000170004190000210000310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000005000111100000000000000001265406080616581416572600048    0000012540000000000000000000012540000005630000012540000000000000000000080000350004870000170000160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A
    000006000111100000000000000009400106080617071817031100407    000000000000000005874000-000058740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    tel que dit, on remarque qu'il manque certain caractère

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    comme te la signalé .. ousk' un peu plus haut met un ; à la fin de tous.. les print (aprés la variable) sauf sur le dernier print de la boucle while...

    ensuite à la lecture il te faut sauter les caractéres de fin de lignes .. modifie ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     ..
    While EOF(1) = False
      RecordType = vbCr
        While RecordType = vbCr Or RecordType = vbLf
          RecordType = Input(1, #1)
        Wend
        Print #2, RecordType;
    ...

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Moi, je lis et relis le tout premier message...
    Je rerelis et rerelis...
    et (je ne sais trop pourquoi...) je "sens" le parsing d'un fichier XML (où le choix des tags est laissé à l'auteur du document)....
    Est-ce le cas ?
    Si oui : VB ne me parait pas indiqué (voir plutôt du côté de Java API for XML Parsing, c'est à dire JAXP)
    Mais je peux bien évidemment me tromper...

  7. #7
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    A ta place au lieu de lire caractere par caractere, je lirais ligne par ligne, pour chaque ligne,je fais le traitement puis j'écris mon résultat dans une ligne. Cela permet d'éclater la partie lecture/ecriture de la partie traitement d'une chaine de caractére et au niveau des performances, cela devrais etre bien plus rapide.
    Mais je ne suis pas sur d'avoir saisis l'objectif de ton projet, ni quel est vraiment ton problème.

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Mais je ne suis pas sur d'avoir saisis l'objectif de ton projet,
    Parsing d'un XML, pardi !

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

Discussions similaires

  1. Lecture et écriture de fichier de sauvegarde pour un jeu.
    Par while.dede dans le forum Entrée/Sortie
    Réponses: 113
    Dernier message: 21/04/2015, 19h54
  2. Lecture et écriture de fichiers BMP 24bit et 1bit
    Par electroremy dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/04/2014, 18h55
  3. [Dvp.NET|Intégré] Lecture et écriture de fichiers INI
    Par tomlev dans le forum Contribuez
    Réponses: 12
    Dernier message: 23/01/2009, 01h15
  4. [Lazarus] Lecture et écriture de fichier Excel
    Par Vazily dans le forum Lazarus
    Réponses: 3
    Dernier message: 19/04/2008, 16h10
  5. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30

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