Page 1 sur 1

[R] Supprimer ligne vide d'un fichier

Posté : mer. 13 août 2014 09:48
par jcaspar
B :D 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 :mrgreen:

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 ...

Code : Tout sélectionner

for filereadeline($fichier,$i) 
$i++
next
 

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

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 :

Code : Tout sélectionner

$sanslignesvides = StringStripWS($sanslignesvides, 3)

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.