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 :

Fichier txt à modifier


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 146
    Par défaut Fichier txt à modifier
    bonjour

    Je dois créer un fichier txt "final" à partir d'un autre fichier txt "origine" mais en modifiant certaines données selon un critére propre sur chaque ligne.

    ma première question : Comment puis-je connaitre le nombre exacte de ligne dans le fichier txt "origine" pour pouvoir faire une boucle ?

    ma seconde question : Comment sur une ligne de 120 caratères je peux récupére les données qui se trouvent entre le caractere 11 à 14 ?

    exemple : 0012512698RCL756320070707 mais je veux récupérer que RCL.

    merci par avance de votre aide.

    nefertari

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Tu n'as pas besoin de connaitre le nombre de lignes de ton fichiers, il suffit de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     do....loop until eof(Nf)
    Si tu as ouvert ton fichier avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Open "Monfichier.txt" for input as #Nf
    Pour récupérer des caractères à une position précise, regarde l'aide sur l'instruction MID

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MID(Machaine, 11,6)
    permet de récupérer 6 caractères à partir du 11ème.

  3. #3
    Expert éminent


    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
    Par défaut
    Il y as une astuces dans la Vbscript qui te permet d'éviter
    la lecture ligne à ligne de ton fichier pour les compter ... :
    Comment obtenir le nombre de lignes d'un fichier texte ? ...
    c'est facilement adaptable en VB6 ( puis de toutes façon cela doit fonctionner tel-quel..)

    mais comme le dit ohMonbato à priori tu n'as pas besoin du nombre de lignes..


  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 146
    Par défaut
    voici le code que j'ai pu établir :
    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
     
     
    Const ForWriting = 2, ForReading = 1
    Dim I, intLongeur As Integer
    Dim StrArgument, strRSS, strRUM As String
    Dim StructureFinal, StructureOrigine, FichierFinal, FichierOrigine
     
        'Procédure qui récupére le nombre de ligne
        Call RecupereNbreLigne
     
        'Fichier en lecture
        Set StructureOrigine = CreateObject("Scripting.FileSystemObject")
        Set FichierOrigine = StructureOrigine.OpenTextFile("C:\Documents and Settings\ve\Mes documents\test1.txt", ForReading)
     
        'Fichier Final en écriture
        Set StructureFinal = CreateObject("Scripting.FileSystemObject")
        Set FichierFinal = StructureFinal.OpenTextFile("C:\Documents and Settings\ve\Mes documents\Test2.txt", ForWriting, True)
     
        I = 0
     
        'Boucle sur les données du fichier d'origine
        For I = 0 To NbreLigne
     
            'Evite un message d'erreur
            If I = NbreLigne - 1 Then Exit Sub
     
            'Récupère ligne à ligne les données
            StrArgument = FichierOrigine.ReadLine
     
            intLongeur = Len(StrArgument)
     
            'Copie la première ligne à l'identique
            If I = 0 Then FichierFinal.write StrArgument
     
            If I > 0 Then
     
            strRSS = Mid(StrArgument, 10, 3)
            strRUM = Mid(StrArgument, 25, 3)
     
                If strRSS = 111 Then
                    FichierFinal.write StrArgument
                Else
                    StrArgument = Mid(StrArgument, 1, 9) & Mid(strRSS, 1, 2) & "1" & Mid(StrArgument, 13, 12) & Mid(strRSS, 1, 1) & "11" & Mid(StrArgument, 28, 7) & Space(20) & Mid(StrArgument, 35, 13) & Space(5) & Mid(StrArgument, 48, intLongeur)
                    FichierFinal.write StrArgument
                End If
            End If
        Next I
     
        FichierFinal.Close
        Set StructureFinal = Nothing
     
        FichierOrigine.Close
        Set StructureOrigine = Nothing
     
    End Sub
    Mais en regardant le fichier final, j'ai toutes mes données à la suite hors je voudrais faire un retour ligne après chaque copie.

    Comment puis je faire un retour chariot ?

    De même, j'arrive à obtenir le nombre de ligne avec une des procédure qui se trouvais sur la FAQ Vbscript mais j'ai un message d'erreur qui me dis que je "dépasse la capacité" quand j'appelle le vrai fichier d'entré.

    Donc ma question, est ce qu'on est limité au nombre de ligne ?

  5. #5
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    Voila comment moi je procède (cela ne correspond peut-être pas à la FAQ) :
    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
     
    Dim AdresseOrg As String
    Dim AdresseFin As String
    Dim Contenu As String
    Dim NbLignes As String
    Dim Lignes() As String
    Dim Boucle As Integer
     
    'adresses des fichier d'origine et final
    AdresseOrg = "C:\MonFichier.txt"
    AdresseFin = "C:\FichFinal.txt"
     
    'ne traite le fichier que si celui-ci existe
    If Dir(AdresseOrg) = "" Then
     
        'réccupère le contenu du fichier d'origine
        Contenu = Space(FileLen(AdresseOrg))
        Open AdresseOrg For Binary As #1
            Get #1, , Contenu
        Close #1
     
        'Sépare chaque ligne du fichier et les met dans un tableau
        Lignes = Split(Contenu, vbCrLf)
     
        'réccupère le nombre de lignes
        NbLignes = UBound(Lignes) 'Attention, c'est le nombre de lignes -1 car la première à pour
                              'indice 0
     
        'Parcours chaque ligne
        For Boucle = 0 To NbLignes
     
            'Affiche 6 caractère à partir du 11eme si la ligne fait au moins 16 caractères
            If Len(Lignes(Boucle)) > 15 Then
                MsgBox Mid(Lignes(Boucle), 11, 6)
            End If
     
            'ajoute un "." à la fin de chaque ligne
            Lignes(Boucle) = Lignes(Boucle) & "."
     
        Next Boucle
     
        'Recompose le fichier final (retour à la ligne entre chaque ligne)
        Contenu = Join(Lignes, vbCrLf)
     
        'détruit le fichier final si celui-ci existe
        If Dir(AdresseFin) <> "" Then Kill AdresseFin
     
        'réécrit le fichier final
        Open AdresseFin For Binary As #1
            Put #1, , Contenu
        Close #1
    End If
    J'éspère que tu y trouveras ton bonheure
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  6. #6
    Expert éminent


    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
    Par défaut
    pour écrire une ligne tu as la méthode "WriteLine"...

    ensuite attention à tes déclaration de type du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim I, intLongeur As Integer

    en VB il faut répéter le "type" pour chaque variable, ici seul intLongueur est un entier , I est un variant.


    Pour le nombre de lignes, combien y en as-t'il dans ton fichier "vrai fichier d'entrée.."? , j'ai toujours pas compris à quoi cela te sert de connaître le nombre de lignes contenues dans ton fichier ..?

    pour l'objet FileSystemObject.. tu n'en as pas besoin de deux (StructureOrigine, StructureFinal ..) un seul suffit .. pour écrire un code un peu plus VB6 ... rajoute à ton projet la référence à "Microsoft Scripting runtime" .

    puis inspire toi du code suivant :

    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
     
    Dim oFSO As New FileSystemObject
    Dim FichierOrigine  as TextStream
    Dim FichierFinal   as TextStream
    Dim stLigne as string
    'Fichier en lecture
        Set FichierOrigine = oFSO .OpenTextFile("C:\Documents and Settings\ve\Mes documents\test1.txt", ForReading)
     
        'Fichier Final en écriture
        Set FichierFinal = oFSO .OpenTextFile("C:\Documents and Settings\ve\Mes documents\Test2.txt", ForWriting, True)
     
    Do While FichierOrigine.AtEndOfStream <> True
      stLigne = FichierOrigine.ReadLine 'Lecture d'une ligne..
      FichierFinal.WriteLine stLigne 'Ecriture de la ligne
    Loop
     
    FichierOrigine.close
    FichierFinal.close
    ...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 146
    Par défaut
    Merci de votre aide.

    J'arrive à faire mon fichier.

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

Discussions similaires

  1. modifier fichier .txt avec Visual Basic
    Par marco1980 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/09/2006, 20h19
  2. comment modifier un fichier txt
    Par marco1980 dans le forum C++
    Réponses: 3
    Dernier message: 29/09/2006, 01h47
  3. [VB6]Modifier ligne d'un fichier .TXT
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 19h43
  4. Réponses: 1
    Dernier message: 27/06/2006, 18h34
  5. Modifier un fichier txt avec FSO?
    Par flo456 dans le forum ASP
    Réponses: 6
    Dernier message: 25/10/2005, 22h16

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