Supprimer chaque ligne d'un fichier jusqu'à trouver la bonne
yo612
Messages postés16Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention19 juillet 2007
-
6 mars 2007 à 23:44
yo612
Messages postés16Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention19 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
A voir également:
Supprimer chaque ligne d'un fichier jusqu'à trouver la bonne
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 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 ?
yo612
Messages postés16Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention19 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
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 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.
VBGenesis
Messages postés292Date d'inscriptionsamedi 25 février 2006StatutMembreDernière intervention22 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
yo612
Messages postés16Date d'inscriptionmercredi 21 février 2007StatutMembreDernière intervention19 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