Page 1 sur 1

[R] Effacer la premiere et dernière ligne d'un fichier text

Posté : jeu. 31 mars 2011 19:12
par ethneldryt
Bonjour, je cherche a effacer la première et dernière ligne d'un fichier texte, si celle si sont vide. j'essaie la fonction
_FileWriteToLine("toto.txt",1,"",1),
_FileWriteToline("toto.txt",_FileCountLine("toto.exe")+1,"",1
mais cela ne marche pas, merci de votre aide.

exemple :

-----------------------------
ligne 1-
ligne 2-texte1
ligne 3-texte2
ligne 4-
-----------------------------

donnerai :

-----------------------------
ligne 1-texte1
ligne 2-texte2
-----------------------------

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : jeu. 31 mars 2011 21:20
par fred39
Bonjour,
perso pour manipuler les fichier textes, je passe par un array avec les fonctions
_FileReadToArray et _FileWriteFromArray

ce qui pourrait donner dans votre cas:

Code : Tout sélectionner

#Include <File.au3>
#Include <Array.au3>
Dim $aRecords
$fichier_a_lire=@ScriptDir&"\toto.txt"
_FileReadToArray($fichier_a_lire, $aRecords) ; c:\toto.txt le nom du fichier à lire


    _ArrayDelete($aRecords, 1)
    _ArrayDelete($aRecords, $aRecords[0]) ;$aRecords[0]indique le nombre de lignes du tableau donc du fichier

$File = FileOpen($fichier_a_lire, 2); on ouvre le fichier en ecrasant son contenu
_FileWriteFromArray($File, $aRecords, 1)
FileClose($File)
Bonne soirée

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : jeu. 31 mars 2011 21:40
par ethneldryt
bonsoir et merci, j'y avais penser mais je ne sais pas comment faire pour enlever la ligne SI elle est vide, il se peut par exemple qu'il y ai que la première ou dernière ligne de vide et non les deux

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : jeu. 31 mars 2011 22:59
par fred39
Alors comme ceci
► Afficher le texte
Dans ce cas, on commence par supprimer la derniere ligne si nécessaire car si on commence par la première $aRecords[0] risque de ne plus renvoyer la bonne ligne.

Bonne soirée

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : ven. 01 avr. 2011 00:53
par ethneldryt
bonsoir et merci, il y a un petit problème, si la derniere ligne est vide, elle n'est pas effacer. n'existe il pas une fonction pour supprimer carement les lignes vides d'un fichier? merci

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : ven. 01 avr. 2011 13:45
par fred39
Effectivement,
La dernière ligne si elle est vide n'est pas comptabilisée dans le tableau.
Et la fonction _FileCountLines a le même comportement.

Je ne sais pas...
Est ce que tant qu'il n'y a pas un retour chariot en fin de ligne elle ne compte pas?
à la section Remarks pour _fileCountlines
il est écrit: It does not count a final @LF as a line.

Si quelqu'un peut allumer la lanterne ;-)
merci

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : ven. 01 avr. 2011 17:01
par Tlem
Est-ce que dans votre fichier les mots "Ligne X" sont toujours stipulés, ou bien votre fichier peut ressembler à ceci :

Code : Tout sélectionner

Ligne 1
Ligne 2
 

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : ven. 01 avr. 2011 17:17
par ethneldryt
Voila, j'ai mis 2 exemple en fichier joint.
Dans toto_avant il y a plusieurs saut de lignes.
Et dans toto_apres, il n'y a plus aucun saut de ligne que ca sois en debut, milieu ou fin.

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : ven. 01 avr. 2011 17:36
par ZDS
Salut,

Voila un script qui devrait faire ce que tu souhaites :

Code : Tout sélectionner

Local $origine     = "toto_avant.txt"
Local $destination = "toto_apres2.txt"
Local $flux_origine = FileOpen($origine,0)
Local $flux_destination = FileOpen($destination,10)
Local $first_ligne = True

If $flux_origine <> -1 And $flux_destination <> -1 Then
    While 1
        $ligne = FileReadLine($flux_origine)
        If @error = -1 Then ExitLoop
        If $ligne = "" Then
            ; Ne rien faire, ligne vide à ne pas prendre en charge
        ElseIf $first_ligne Then
            ; Si c'est une premiere ligne à ajouter au fichier, ecrire simplement la ligne (pas de CR en fin avec ReadLine)
            FileWrite($flux_destination, $ligne)
            $first_ligne = False
        Else
            ; Si ce n'est pas une premiere ligne, ajouter un CR en début de ligne (pour ne pas ajouter à la suite de la précédente)
            FileWrite($flux_destination, @CRLF&$ligne)
        EndIf
    Wend
EndIf

FileClose($flux_origine)
FileClose($flux_destination)
A bientôt !

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : ven. 01 avr. 2011 17:38
par Tlem
Plein de chose sont possible, mais afin de ne pas être embêté par des limites quelconques, je vous suggère de faire une lecture du fichier ligne par ligne (avec FileReadLine en boucle comme dans l'exemple de la doc).
Pour chaque ligne lue, vous ré-écrivez un autre fichier (utilisez le FileOpen avant afin de travailler par le handle). Évidemment, avant de ré-écrire la ligne vous contrôlez si elle est vide ou non. :roll:

Voilà. Je pense que ce sera vraiment la solution la plus rapide et efficace (hormis celle utilisant une RegEx, mais qui sera limitée par la taille du fichier).

Edit : Grillé par ZDS ...

Re: [..] Effacer la premiere et derneire ligne d'un fichier

Posté : ven. 01 avr. 2011 18:03
par ethneldryt
A oui j'avais pas penser a cela. merci a tous :)

Re: [R] Effacer la premiere et dernière ligne d'un fichier t

Posté : ven. 01 avr. 2011 21:39
par sylvanie
Bonsoir,
J'avais préparé ça pendant la journée (je ne peux pas poster à ce moment là ...)
Du coups j'arrive un peu tard ...
► Afficher le texte
ça fait toujours une 2eme façon de faire ...