Page 1 sur 1

[R] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 11:47
par Boulanza
Bonjour tout le monde,
Je sollicite vivement votre aide.
J'ai un souci lorsque je veux supprimer tout ce qui se trouve à gauche du signe =
Le contenu du fichier 'recup.txt':
$AbregeNomFiliere1=TM
$AbregeNomFiliere2=GI
$AbregeNomFiliere3=TTC
$AbregeNomFiliere4=DF
$AbregeNomFiliere5=GA
$AbregeNomFiliere6=DA
Le résultat lors de l'utilisation du script suivant:
Local $AbregeNomFiliere1
$fichier = @ScriptDir & "\recup.txt"
$file = FileRead($fichier)
$resultat = StringRegExpReplace($file, "[^=]+=([^=]+)=(\N*)(\R|$)", "\1\2\3")
If FileExists(@ScriptDir & "\sortie.txt") Then FileDelete(@DesktopDir & "\sortie.txt")
Filewrite(@ScriptDir & "\sortie.txt", $resultat)
Le résultat obtenu après exécution du code ci-dessus:
TM
$AbregeNomFiliere2GI
TTC
$AbregeNomFiliere4DF
GA
$AbregeNomFiliere6DA
Voici le résultat que je cherche:
TM
GI
TTC
DF
GA
DA
Cordialement.

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 14:36
par rgx
Bonjour,

Si tu tiens à utiliser les RegEx

Code : Tout sélectionner

$resultat = StringRegExpReplace($file, '=.+?\b', '')
Edit: j'ai mal lu, ceci supprime ce qui est à droite. Je reviens...

Mais il est bien plus simple d'utiliser StringSplit

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 14:42
par TommyDDR
Votre fichier ressemble quasiment à un fichier ini, pourquoi ne pas simplement lui mettre une section et utiliser IniRead() ?

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 14:46
par Boulanza
Bonjour,
Merci pour votre suggestion. Voici le résultat:
$AbregeFiliere1
$AbregeFiliere2
$AbregeFiliere3
$AbregeFiliere4
$AbregeFiliere5
$AbregeFiliere6.
J'ai besoin de supprimer tout ce qui ce trouve à gauche "=" c.a.d. que $resultat = StringRegExpReplace($file, '=.+?\b', '') supprime tout ce qui se trouve à droite de "=".
Cordialement.

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 14:52
par rgx
Voici pour supprimer à gauche

Code : Tout sélectionner

Local $AbregeNomFiliere1
$fichier = @ScriptDir & "\recup.txt"

$file = FileRead($fichier)

$resultat = StringRegExpReplace($file, '.+=(.+?)', '$1')

FileDelete(@ScriptDir & "\sortie.txt")
Filewrite(@ScriptDir & "\sortie.txt", $resultat)

Code : Tout sélectionner

TM
GI
TTC
DF
GA
DA
Mais comme suggéré par TommyDDR, IniRead est aussi utilisable (et bien plus lisible)

PS. Il est aussi conseillé d'utiliser FileOpen et FileClose pour fermer correctement les fichiers. En plus on peut spécifier $FO_OVERWRITE pour l'ouverture de fichier et ainsi ne pas avoir à utiliser FileDelete.

PS/2. Le seul intérêt de cette méthode est qu'il n'y a qu'une seule écriture pour tout le fichier contrairement aux autres méthodes (INI et StringSplit), mais cela ne se voit pas au niveau des performances. Néanmoins c'est une bonne habitude que de minimiser les écritures disque.

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 15:03
par Boulanza
Merci infiniment rgx pour votre aide. C'est parfait, le problème est résolu grâce votre intervention. :bisou:

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 15:39
par Boulanza
Bonjour Monsieur TommyDDR,
Oui, vous avez raison, est un fichier ini.
TommyDDR:.. pourquoi ne pas simplement lui mettre une section et utiliser IniRead() ?
$fichier = @ScriptDir & "\recup.txt" suivant:
[Parametres]
$AbregeFiliere1=TEC
$AbregeFiliere2=GA
$AbregeFiliere3=TG
$AbregeFiliere4=DA
$AbregeFiliere5=FS
$AbregeFiliere6=GP
$a = 0
While 1
    $a += 1
    ;ConsoleWrite("Count > " & $a & @LF)
    Local $sFilePath = @ScriptDir & "\Config.ini"
    Local $file02 = @ScriptDir & "\Résultat.txt"
Local $sRead = IniRead($sFilePath, "Parametres", "$AbregeFiliere"&$a, "Default Value")
   If $a = 7 Then ExitLoop
FileWriteLine($file02, $sRead)
WEnd
Ma question: Comment svp utiliser IniRead() précisément dans mon cas afin de copier le résultat dans un combo ?
Ceci peut être utile pour tout le monde.
Merci pour votre compréhension.
Cordialement.

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 19:24
par Boulanza
Bonsoir,
je suis bloqué pour résoudre ce problème. Baaaaaa
Pour intégrer les lignes ci-dessous dans combobox je doit transformer la colonne du fichier texte :
TEC
GA
TG
DA
FS
GP
En ligne, avec la séparation '|' pour avoir le format suivant:
TEC|GA|TG|DA|FS|GP
Votre aide svp.
Cordialement

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 21:36
par Boulanza
Bonsoir,
A optimiser... Je croix quand peut faire mieux ! il reste à intégrer la ligne "TEC|GA|TG|DA|FS|GP" du fichier "Résultat2.txt" dans combobox. Votre aide serait la bienvenue ...
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

Local $texte = @ScriptDir & "\Résultat.txt"
Local $ligne1 = FileReadLine($texte,1)
Local $ligne2 = FileReadLine($texte,2)
Local $ligne3 = FileReadLine($texte,3)
Local $ligne4 = FileReadLine($texte,4)
Local $ligne5 = FileReadLine($texte,5)
Local $ligne6 = FileReadLine($texte,6)
;MsgBox(0, "", $ligne1&"|"&$ligne2&"|"&$ligne3&"|"&$ligne4&"|"&$ligne5&"|"&$ligne6)
FileWrite( @ScriptDir & "\Résultat2.txt" , $ligne1&"|"&$ligne2&"|"&$ligne3&"|"&$ligne4&"|"&$ligne5&"|"&$ligne6 )
Cordialement.

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 22:26
par mikell
Peut-être ?
;$txt = FileRead(@ScriptDir & "\Résultat.txt")
$txt = "TEC" & @crlf & _
   "GA" & @crlf & _
   "TG" & @crlf & _
   "DA" & @crlf & _
   "FS" & @crlf & _
   "GP"

Msgbox(0,"", StringReplace($txt, @crlf, "|") )

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : mer. 24 févr. 2021 23:11
par Boulanza
Bonsoir Monsieur mikell,
C'est excellant... Bien vu. C'est un travail de pro. Merci.
Comme vous allez le remarquer dans résultat suivant: TEC|GA|TG|DA|FS|GP|
On n'a un '|' à la fin de la ligne en plus, je vous prie de me donnez svp le moyen pour le supprimer, afin d'avoir la solution suivante:
TEC|GA|TG|DA|FS|GP
Cordialement.
$txt = FileRead(@ScriptDir & "\Résultat.txt")
Msgbox(0,"", StringReplace($txt, @crlf, "|") )

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : jeu. 25 févr. 2021 11:41
par Boulanza
Bonjour,
Pour le partage:
- Pour supprime le premier caractère:
StringRegExpReplace($file, "^.", "") aussi « ".(.+).", "\1" »
- Pour supprime le premier caractère à droite le symbole ici '|' est obligatoire dans tous les cas:
;StringRegExpReplace($file,'^|.$', "")
- Pour supprime le 1° et le suivant c.a.d. le 2° caractère
StringRegExpReplace($file, "^.(.+?)", "")
-Pour supprime le premier caractère et on ajoute à la place un nouveau caractère (ou plus) ici par exemple : ?
StringRegExpReplace($file, "^.", "?")
- Pour supprime tout ce qui est à gauche la ligne à partir du caractère =
StringRegExpReplace($file, ".+ =(.+?)", "")
- Pour supprime tout ce qui est à droite de la ligne à partir du caractère =
StringRegExpReplace($file,"=.+?\b", "") aussi « "=.*", "" »
- Pour supprime le premier caractère à gauche et le dernier à droite
StringRegExpReplace($file,'^.|.$', "")
ils y en a sûrement d'autres !
Cordialement.
Code d'utilisation:
#include <MsgBoxConstants.au3>
$fichier = @ScriptDir & "\Résultat2.txt"
$file = FileRead($fichier)
$resultat = StringRegExpReplace($file,'^|.$', "") ;On supprime le premier caractère à droite. Le symbole ici '|' est obligatoire dans tous les cas
FileDelete(@ScriptDir & "\sortie.txt")
Filewrite(@ScriptDir & "\sortie.txt", $resultat)

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : jeu. 25 févr. 2021 14:22
par mikell
Boulanza a écrit : mer. 24 févr. 2021 23:11On n'a un '|' à la fin de la ligne en plus
Parce qu'il y a une ligne vide en fin de fichier. Utilisez
$txt = StringStripWS(FileRead(@ScriptDir & "\Résultat.txt"), 3)

Re: [..] Supprimer les caractères se trouvant à gauche de "="

Posté : jeu. 25 févr. 2021 16:17
par Boulanza
Bonjour,
OK, mikell, c'est mieux ainsi. Merci pour tout.
Cordialement.