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 :

Ecrire dans un fichier


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Développeur en alternance
    Inscrit en
    Février 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 107
    Points : 77
    Points
    77
    Par défaut Ecrire dans un fichier
    Bonjour,

    Je réalise un petit programme qui parcourt tous mes projets VB et les classes qu'ils contiennent. Le but plus précisément et de lire chaque fichier pour ajouter à la volé un bout de code dans chaque fonction et chaque procédure voici comment je procède :

    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
     
        Open chemin & "\" & fichier For Input As #1
     
        Do While Not EOF(1)
     
            Line Input #1, ligneTexte
     
                If Not isComplet Then
     
                    proc = InStr(1, ligneTexte, "Sub", vbTextCompare)
     
                If proc > 1 Then
                        ligneTexte = ligneTexte & vbNewLine
                        ligneTexte = ligneTexte & "if pile = 1" & vbNewLine
                        ligneTexte = ligneTexte & "NoFile = FreeFile" & vbNewLine
                        ligneTexte = ligneTexte & "Open NomFichier For Append As #NoFile" & vbNewLine
                        ligneTexte = ligneTexte & "Print #NoFile, MessageErreur" & vbNewLine
                        ligneTexte = ligneTexte & "Close #NoFile" & vbNewLine
                        ligneTexte = ligneTexte & "end if" & vbNewLine
                        Write #1, ligneTexte
                End If
     
                proc = InStr(1, ligneTexte, "Function", vbTextCompare)
     
                If proc > 1 Then
                        ligneTexte = ligneTexte & vbNewLine
                        ligneTexte = ligneTexte & "if pile = 1" & vbNewLine
                        ligneTexte = ligneTexte & "NoFile = FreeFile" & vbNewLine
                        ligneTexte = ligneTexte & "Open NomFichier For Append As #NoFile" & vbNewLine
                        ligneTexte = ligneTexte & "Print #NoFile, MessageErreur" & vbNewLine
                        ligneTexte = ligneTexte & "Close #NoFile" & vbNewLine
                        ligneTexte = ligneTexte & "end if" & vbNewLine
                        Write #1, ligneTexte
                End If
            End If
        Loop
        Close #1
    Je pense que l'écriture ne fonctionne pas car on ouvre le fichier en lecture seul "Input".

    Après de nombreuse recherches sur le net et le site en lui même, je n'ai pas trouvé de réponse assez semblable à mon problème. C'est pour cela que je me tourne vers vous. Un peu d'aide serait la bienvenue.

    Merci et bonne fin de journée.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2011
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 112
    Points : 209
    Points
    209
    Par défaut
    ___Ia ora na.
    Citation Envoyé par V_inSe Voir le message
    Je pense que l'écriture ne fonctionne pas car on ouvre le fichier en lecture seul "Input".
    ___En effet - il n'est pas possible d'écrire dans un fichier ouvert en mode input ; d'autant plus que, dans le cas présent, le nouvel enregistrement (plus long que l'ancien) écraserait les lignes suivantes avant même qu'elles ne soient lues.
    1) Vous trouverez par exemple ici, dans le message de Petit Rabot,
    http://www.developpez.net/forums/d13...-alphabetique/
    une procédure ReadAllText qui lit le fichier et place chaque ligne dans un tableau aLines. Vous pouvez ensuite
    2) faire le travail que vous indiquez sur chaque ligne du tableau [aLines(0), aLines(1), ...aLines(UBound(aLines))] ;
    3) à la fin, réenregistrer le tableau modifié en mode output (ou en mode binary avec quelques précautions).
    ___Bon courage pour la suite de votre projet.

    Post-scriptum :
    1) plus ou moins gênant :
    a}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not isComplet Then 
       proc = InStr(1, ligneTexte, "Sub", vbTextCompare)
       If proc > 1 Then
    ___Je ne sais pas en quoi consiste isComplet (fonction booléenne ? sur quels arguments ?) mais, tel quel, le test If proc > 1 va donner des faux positifs - ne serait-ce que pour les lignessans parler des SubFolders, SubItems ou Call MySub.
    ___Paradoxe : si une ligne se présente comme
    (syntaxe peu habituelle mais possible), elle ne sera pas détectée par le programme puisque dans ce cas proc = 1 (et donc pas > 1).
    ___Un filtre possible serait de n'accepter que les lignes commençant par Private Sub , Public Sub , Static Sub , Private Static Sub , Public Static Sub , ou Sub (l'espace qui suit Sub doit être prise en compte, surtout pour le dernier exemple ; même chose bien sûr pour Function)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Left(ligneTexte, 12) = "Private Sub " Or [...] _
       Or Left(ligneTexte, 4) = "Sub " Then
    b} Si le texte que vous insérez est du code Visual Basic, il faut modifier les lignes 14 et 27 en "if pile = 1 Then".
    c} Si vous écrivez sur le disque une variable (comme ligneTexte) à l'aide de Write #, VB ajoutera des guillemets devant et derrière le texte contenu dans cette variable. Soit ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim ligneTexte As String
    Open "c:\essai.txt" For Input As 1
    Line Input #1, ligneTexte: Close
    Open "c:\essai.txt" For Output As 1
    Write #1, ligneTexte :Close
    ___Si le fichier original contenait une ligne Sub Essai, il contiendra à la sortie une ligne
    "Sub Essai" (et s'il contenait "Sub Essai", il ressortira avec """Sub Essai""") .

    2) plus facultatif :
    a} l'exécution serait plus rapide en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If proc > 1 Then
       ligneTexte = ligneTexte & vbNewLine
       ligneTexte = ligneTexte & "if pile = 1" & vbNewLine
       [...]
       ligneTexte = ligneTexte & "end if" & vbNewLine
    End If
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim AjoutTexte As String
     
    AjoutTexte = vbNewLine & "If pile = 1 Then" & [...] & "End If" & vbNewLine
    [...]
    If proc > 1 Then
       ligneTexte = ligneTexte & AjoutTexte
    End If
    b} votre code
    - teste d'abord si la ligne est une déclaration de procédure (Sub) [lignes 10-12] et (si oui) modifie et essaie d'enregistrer les modifications ;
    - puis teste si la ligne est une déclaration de fonction (Function) [lignes 23-25] et (si oui) modifie et essaie d'enregistrer les modifications ;
    ___Comme ce sont les mêmes modifications et qu'une ligne ne peut pas déclarer à la fois une procédure et une fonction, il serait plus simple de regrouper les tests ; les lignes 10 à 34 pourraient tenir en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If EstSub Or EstFonct Then
         ligneTexte = ligneTexte & AjoutTexte
    End If
    en ayant EstSub = vrai si la ligne est une déclaraction de procédure et EstFonct = vrai si c'est une déclaraction de fonction (voir 1)a} plus haut). Si l'on devait avoir deux textes différents, on pourrait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If EstSub Then
         ligneTexte = ligneTexte & AjoutTexteSub
    ElseIf EstFonct Then
         ligneTexte = ligneTexte & AjoutTexteFonct
    End If
    c} déclarer et typer les variables n'est ni ringard ni superflu.

  3. #3
    Membre régulier
    Profil pro
    Développeur en alternance
    Inscrit en
    Février 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 107
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Merci pour votre réponse rapide. C'est exactement ce qui me fallait pour résoudre mon problème. De plus, j'ai bien pris en considération vos remarques pour améliorer mon code.

    Encore merci et désolé pour le retour un peu tardif.

    Très bonne journée.

  4. #4
    Membre actif
    Inscrit en
    Janvier 2011
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 112
    Points : 209
    Points
    209
    Par défaut
    ___Ia ora na.
    ___C'est une bonne nouvelle que vous ayez pu reprendre et continuer votre projet.
    ___Bonne réussite pour l'ensemble de vos travaux.

  5. #5
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    Un projet de type Addin et la librairie « Microsoft Visual Basic 6.0 Extensibility »
    sont tout autrement indiqués que de gérer directement les fichiers.

  6. #6
    Membre actif
    Inscrit en
    Janvier 2011
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 112
    Points : 209
    Points
    209
    Par défaut
    ___Ia ora na.
    Citation Envoyé par DarkVader Voir le message
    Un projet de type Addin et la librairie « Microsoft Visual Basic 6.0 Extensibility »
    sont tout autrement indiqués que de gérer directement les fichiers.
    ___Sans aucun doute, mais un petit amateur peut essayer à l'occasion de fournir la petite pelle ou la petite pioche demandées - le marteau-piqueur et le tracto-pelle sont au-dessus de ses moyens.
    ___Bonne semaine.

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Contrairement à ce que l'on peut penser, le tracto pelle est utilisable par quiconque veut s'en donner la peine.

    C'est la simplicité même dans le cas précité puisque l'on peut récupérer le code,
    le modifier module par module, procédure par procédure et sauvegarder les modules.

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

Discussions similaires

  1. Ecrire \" dans un fichier
    Par photorelief dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2005, 15h56
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    Réponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

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