Supprimer chaque ligne d'un fichier jusqu'à trouver la bonne

yo612 Messages postés 16 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 19 juillet 2007 - 6 mars 2007 à 23:44
yo612 Messages postés 16 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 19 juillet 2007 - 7 mars 2007 à 13:44
Bonsoir,

Je souhaite supprimer chaque (premières) lignes d'un fichier qui ne commence par par une date.
Bien sûr après la date, il y a des informations diverses que je dois conserver.
Mais avant ces lignes commencant par des dates, il y a un entête de longueur variable que je veux supprimer.
J'ai essayé avec ça, mais j'ai du me gourrer quelquepart ou alors il y a une astuce que je ne maitrise pas.
    'Lit une ligne du fichier #i et la met dans la variable Texte
    Line Input #i, texte
    'affecte la variable texte dans la variable lire
    lire = texte
    Dim debut, check
    debut = Mid(texte, 1)
    'vérifier si le début de la ligne commence par une date
    check = IsDate(debut)
    While Not EOF(i)
       'vérifie si la condition isdate est fausse
        If check = False Then
            Line Input #i, texte
            lire = texte
        End If
    Wend
    'écrit les données du presse-papiers dans le fichier destination
    Print #i, strContenuFileName
    'ferme le fichier suite à la commande open
    Close #i

merci de votre coup de main

5 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 mars 2007 à 00:23
"j'ai du me gourrer quelquepart"


quelquepart, c'est un euphémisme ?
des erreurs il y en a partout

d'abord ça ne ressemble pas du tout à du .Net
le Mid(texte,1) et texte c'est la même chose
et que fait ce print dans un fichier ouvert en input (je suppose)
et que vient faire le presse-parpier là-dedans ?
et que contient donc strContenuFileName ?

Daniel
0
yo612 Messages postés 16 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 19 juillet 2007
7 mars 2007 à 01:13
euh sorry c'est pas du vbnet mais du vb6 j'ai pas dû poster ou il faut.

bon je vais pas recopier tout mon code qui fait presque 2 pages...
donc j'ouvre un fichier 1 que je copie dans le presse-papiers et que j'affiche dans un textbox, je récupère son nom et modifie son extension que j'affiche dans une autre text box. Je récupère le contenu du presse-papiers fait mes bidouilles de conversion et affiche le résultat dans une autre textbox
strcontenufilename est donc le fichier 2 modifié

Merci pour les encouragements mais pour l'instant, j'arrive à faire fonctionner tout mes bidules sauf cette suppression de lignes qui ne contient pas de dates en début de lignes
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 mars 2007 à 01:50
Salut,
oui mais si t'as mis qu'une partie du code, là c'est incompréhensible
on voit que seules les lignes à supprimer sont lues, le fichier en entrée et en sortie est le même,
lire ne sert à rien, debut ne sert à rien, etc..

j'aurais fais comme ça:

j'ouvre le fichier 1
   première phase:
      lire les lignes d'entête (nombre de lignes fixes ou test de la dernière ligne)
   deuxième phase:
      lire les lignes sans date ?
      test par Isdate du début de la Ligne avec Left$ ou Mid$ sans oublier la longueur de la date Mid$(Texte,1,20)
      ou test par autre chose (présence de / ou de : à voir)
      si pas date on boucle, sinon fin de la phase
      attention la dernière ligne lue (donc avec date) est à copier
   troisième phase:
      lire et copier dans strContenuFileName toutes les lignes qui restent.
je ferme le fichier 1

tout ceci sans oublier le test EOF avant chaque lecture
et peut se faire dans la même boucle avec des tests:
While Not EOF(i)
        Line Input #i, texte
        If phase = 1 Then ...
        If phase = 2 Then ...
        If phase = 3 Then ...
    Wend

dernière phase:
  écrire strContenuFileName dans un nouveau fichier.

il y a encore d'autres possibilités:
compter le nombre de caractères par cumul de chaque ligne (+2) pour savoir ou commence début
fermer le fichier, le réouvrir en binaire, relire à partir de début et copier le tout.

mais si tu part du Testbox ou d'une variable (contenu du presse-papier) c'est pas la même chose
tu peux récupérer chaque ligne par split et travailler en table.

Daniel
0
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
7 mars 2007 à 08:43
Je crois que le problème viens du faite que tu essaye de chercher une date dans un seul caractère. Deux solutions:
-Met IsNumeric à la place de IsDate mais dans ce cas tu ne chercheras que les lignes commançants par un chiffre,
- ou fais en sorte que "début" soit de la longueur de la date que tu cherches
VBGenesis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yo612 Messages postés 16 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 19 juillet 2007
7 mars 2007 à 13:44
Merci de vos réponses, mais désolé je suis un novice !

j'avais pensé à split mais je le maitrise pas et pourtant je vais en avoir beaucoup besoin pour la suite...
" que les lignes commence par un chiffre" oui mais il y a des lignes qui commence par un chiffre et qui ne m'interresse pas puisque qu'elle ne commence pas par une date.

"test par Isdate du début de la Ligne avec Left$ ou Mid$ sans oublier la longueur de la date Mid$(Texte,1,20)" j'y avais pensé mais si la date est ainsi :
07/03/07 ou 07/03/2007 ou 7/03/07 etc... comment trouver la bonne longueur ?

si la ligne 1 n'est pas la bonne quelle est la commande pour la supprimer ?
je passe à la ligne 2 et fait un print ensuite (si elle est bonne) ?

si je mets ça :
        dim crlf as string
        crlf = Chr$(13) + Chr$(10) 'créé un caractère crlf
        i = FreeFile() 'pour obtenir le No de fichier disponible
        Open strOpenFileName For Input As #i
            If Err Then
                MsgBox "Impossible d'ouvrir le fichier: " + strOpenFileName
            End If
'
        Dim CptLine As Long
        Line Input #i, texte 'Lit une ligne du fichier #i et la met dans la variable Texte
        lire = texte 'Met la variable Texte dans la variable lire
        While Not EOF(i) 'Lit toutes les lignes jusqu'à la fin du fichier
            Line Input #i, texte
            lire = lire & crlf & texte
           
            'compte le nombre de lignes du fichier
            CptLine = CptLine + 1

mais je vois pas comment dire par exemple de ne pas rajouter la ligne 1 ou 2 ou etc... si elle ne commence pas par date
0
Rejoignez-nous