Bonjour !
tout est dans le titre .
j'ais une methode qui consiste a lire les lignes une par une
et de les ecrires vers un autre fichier sauf pour les 5 premieres !
Mais ces un peut lourd !
Merci !
Supprimer 5 lignes en debut de fichier ?
-
- Messages : 40
- Inscription : mar. 23/mars/2004 10:23
tu peux essayer quelque chose comme ca:
Code : Tout sélectionner
If ReadFile(0, ..)
For k=1 to 5
ReadString() ; Saute les 5 premieres lignes
Next
TailleRestante = Lof()-Loc()
*Buffer = AllocateMemory(0, TailleRestante)
ReadData(*Buffer, TailleRestante)
; Utiliser WriteData() sur l'autre fichier
CloseFile(0)
EndIf
Bonjour
Comme je suis assez adepte de la vitesse et de la souplesse je te propose de passer par un block mémoire.
Dans un premier temps le petit programme suivant va créer un fichier de 1000 enregistrements séparés par une combinaison quelconque de caractère Ascii appellée ici "FinDeLigne" (on prendra ici le codage normal d'une fin de ligne).
J'ai admis qu'un enregistement ne ferait jamais plus de 1000 caractères ce qui semble assez peu vraissemblable mais il n'est pas impossible d'augmenter ce paramètre.
Dans le code qui suit on ouvre le fichier précedement créer pour l'exemple
Le tour est joué et pour faire plus rapide ...
Les deux lignes "Debug" ne sont là que pour visionner rapidement le bon déroulement du programme !
En bricolant un peu ce code on se rendra compte qu'il est ainsi possible de supprimer n'importe quel nombre de ligne à nimporte quelle position dans le fichier !
Comme je suis assez adepte de la vitesse et de la souplesse je te propose de passer par un block mémoire.
Dans un premier temps le petit programme suivant va créer un fichier de 1000 enregistrements séparés par une combinaison quelconque de caractère Ascii appellée ici "FinDeLigne" (on prendra ici le codage normal d'une fin de ligne).
J'ai admis qu'un enregistement ne ferait jamais plus de 1000 caractères ce qui semble assez peu vraissemblable mais il n'est pas impossible d'augmenter ce paramètre.
Code : Tout sélectionner
CreateFile(#1,"c:\exemple.txt")
FinDeLigne.s=Chr(13)+Chr(10)
For n=1 To 1000
WriteString("ligne " +Str(n)+FinDeLigne)
Next
CloseFile(#1)
Code : Tout sélectionner
;On défini le nombre de lignes à éffacer
NbLignesAEffacer.l = 5
;On défini le séparateur d'enregistrement
FinDeLigne.s=Chr(13)+Chr(10)
;On charge en mémoire l'intégralité du fichier
res=OpenFile(#1,"c:\exemple.txt")
*mem=AllocateMemory(#2,Lof())
ReadData(*mem,Lof())
CloseFile(#1)
Debug PeekS(*mem,1000)
;On déplace le pointeur à la Xième occurence de "FinDeLigne" définie ici par "NbLignesAEffacer".
For x=1 To NbLignesAEffacer
txt.s = PeekS(*mem,10000)
pos=FindString(txt,FinDeLigne,1)
*mem + pos + 1
Next
Debug PeekS(*mem,1000)
;On écrase le précedent fichier par un vide
CreateFile(#1,"c:\exemple.txt")
;On sauvegarde le bloc mémoire dans le fichier vide.
WriteData(*mem,MemoryStringLength(*mem))
;On ferme le fichier modidier !
CloseFile(#1)
;On libère la mémoire
FreeMemory(#2)
Les deux lignes "Debug" ne sont là que pour visionner rapidement le bon déroulement du programme !
En bricolant un peu ce code on se rendra compte qu'il est ainsi possible de supprimer n'importe quel nombre de ligne à nimporte quelle position dans le fichier !
Dernière modification par brossden le mar. 23/mars/2004 15:45, modifié 2 fois.
Denis
Bonne Jounée à tous
Bonne Jounée à tous
Voilà le code torturé sous forme de procédure mais sans commentaires, je pense qu'avec un peu de réflexion ils ne seront pas nécessaires.
Code : Tout sélectionner
Procedure SupLigne(Fichier.s,NbLignesASauter.l,NbLignesAEffacer.l,FinDeLigne.s)
res=OpenFile(#1,Fichier)
*mem=AllocateMemory(#2,Lof())
ReadData(*mem,Lof())
CloseFile(#1)
CreateFile(#1,Fichier)
FinSaut=0
Debug NbLignesASauter
*mem1=*mem
For x=1 To NbLignesASauter
txt.s = PeekS(*mem1,1000)
pos=FindString(txt,FinDeLigne,FinSaut+1)
*mem1 + pos +1
Next
FinSaut.l = *mem1 - *mem
For x=1 To NbLignesAEffacer
txt.s = PeekS(*mem1,1000)
pos=FindString(txt,FinDeLigne,1)
*mem1 + pos + 1
Next
Debug PeekS(*mem,FinSaut)
WriteData(*mem,FinSaut)
WriteData(*mem1,MemoryStringLength(*mem1))
CloseFile(#1)
FreeMemory(#2)
EndProcedure
SupLigne("c:\exemple.txt", 10, 15, Chr(13)+Chr(10))
End
Denis
Bonne Jounée à tous
Bonne Jounée à tous
-
- Messages : 40
- Inscription : mar. 23/mars/2004 10:23