Page 1 sur 1
[R] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 09:48
par jcaspar
B

onjour à tous !
Je souhaiterais supprimer les lignes vides d'un fichier avec le code ci dessous je parviens à lire le contenu du fichier, mais je ne vois pas comment detecter si une ligne est vide puis la supprimer .... la creation d'un tableau sans ligne vide me conviendrait également ....
Il me semble qu'une piste se trouve dans le topic suivant
http://www.autoitscript.fr/forum/viewto ... f=3&t=7224
En vous remerciant pour vos conseils
Jean-Marc
Code : Tout sélectionner
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
$fichier=FileOpen("console.log")
$lecture=FileReadLine($fichier, 1)
$tableau=FileReadToArray($fichier)
_ArrayDisplay($tableau)
if StringCompare($tableau[1],"",0)=0 Then _ArrayDelete($tableau, 1)
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 10:19
par jchd
Tu ne veux certainement pas ne traiter que la ligne 1 ! Faut boucler m'sieur Michu.
Sinon, plus rapide :
Code : Tout sélectionner
#include <Array.au3>
;~ Local $fichier = "console.log"
;~ Local $lecture = FileRead($fichier)
$lecture = @CRLF & "abc" & @CRLF & "def" & @LF & @CR & "ghi" & @CRLF ; pseudo-fichier d'essai
Local $avant = StringRegExp($lecture, "(?m)(.*)\R", 3)
ConsoleWrite("Avant :" & @LF & "============" & @LF & $lecture & @LF & "============" & @LF)
_ArrayDisplay($avant)
Local $sanslignesvides = StringRegExpReplace($lecture, "(?m)(^\R)", "")
ConsoleWrite("Après :" & @LF & "============" & @LF & $sanslignesvides & "============" & @LF)
; si tu veux un tableau :
Local $tableau = StringRegExp($sanslignesvides, "(?m)(^.*$)", 3)
_ArrayDisplay($tableau)
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 10:42
par jcaspar
Merci beaucoup pour cette réponse !
POuriez vous svp donner à Monsieur Michu lol un exemple avec une boucle ?
Je presume qu'il s'agit d'une boucle for next ... mais mon idée n'est pas bonne ...
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 10:54
par aulus
Bonjour,
Je remarque que le code proposé pour supprimer les lignes vides d'un fichier ne supprime pas les lignes vides situées en fin de fichier. Quelle en est la raison ?
Code : Tout sélectionner
Local $lecture = FileRead($monFichierTexte)
Local $sanslignesvides = StringRegExpReplace($lecture, "(?m)(^\R)", "")
Local $hFileWrite = FileOpen($monFichierTexte,2) ; réécriture du fichier
FileWrite($hFileWrite, $sanslignesvides)
FileClose($hFileWrite)
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 11:01
par jchd
Ahem, avec 310 posts au compteur on pourrait supposer que tu as été informé qu'il y avait une aide complète sur beaucoup de choses.
Si tu tiens absolument à rendre cette opération beaucoup plus lente, tu peux faire ça :
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
Local $hFichier = FileOpen("console.log")
Local $ligne, $sanslignesvides
While 1
$ligne = FileReadLine($hFichier)
If @error Then ExitLoop
If $ligne <> "" Then $sanslignesvides &= $ligne & @CRLF
WEnd
FileClose($hFichier)
Local $tableau = StringRegExp($sanslignesvides, "(?m)(^.*$)", 3)
_ArrayDisplay($tableau)
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 11:06
par jchd
Aulus,
Bah, c'est un vieux débat. Doit-on conserver/compter ou pas la dernière terminaison de ligne d'un fichier texte ?
Corollaire : qu'est-ce qu'une ligne ?
Selon la convention qu'on applique à soi-même, on considèrera donc que "abc" & @CRLF contient 1 ou 2 lignes.
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 11:48
par aulus
J'ai résolu le problème par :
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 12:07
par mikell
jc, ton code n'enlève pas les lignes "vides" qui contiennent quelques espaces (\s*)
Perso j'utilise ça
Code : Tout sélectionner
#Include <Array.au3>
$file = FileRead("1.txt")
$lines = StringRegExp($file, '(?m)(^.+)\s*\R?', 3)
_ArrayDisplay($lines)
Re: [..] Supprimer ligne vide d'un fichier
Posté : mer. 13 août 2014 12:31
par jchd
Là encore, tout dépend de ce qu'on appelle vide. Pour moi " " <> "". Si on parle de lignes non significatives, alors c'est autre chose : est-ce que "<br>" est significative ?
Comme toujours, définition ou spécification vague = tsunami de "oui mais ceci", "du coup cela". Mais ce n'est pas un scoop pour toi.