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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par Boulanza le jeu. 25 févr. 2021 16:17, modifié 1 fois.
rgx
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#2

Message 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
Modifié en dernier par rgx le mer. 24 févr. 2021 14:43, modifié 1 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1960
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#3

Message par TommyDDR »

Votre fichier ressemble quasiment à un fichier ini, pourquoi ne pas simplement lui mettre une section et utiliser IniRead() ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#4

Message 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.
rgx
Niveau 4
Niveau 4
Messages : 52
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#5

Message 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.
Modifié en dernier par rgx le mer. 24 févr. 2021 15:04, modifié 1 fois.
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#6

Message par Boulanza »

Merci infiniment rgx pour votre aide. C'est parfait, le problème est résolu grâce votre intervention. :bisou:
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#7

Message 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.
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#8

Message 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
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#9

Message 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.
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6108
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#10

Message 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, "|") )
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#11

Message 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, "|") )
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#12

Message 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)
Modifié en dernier par Boulanza le ven. 26 févr. 2021 09:24, modifié 1 fois.
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6108
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#13

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 9
Niveau 9
Messages : 668
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#14

Message par Boulanza »

Bonjour,
OK, mikell, c'est mieux ainsi. Merci pour tout.
Cordialement.
Répondre