IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Effacer des caractères compris entre deux zones
Options
EmatuM
posté 12 Jan 2021, 01:15
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 90
Inscrit : 3 Jul 2020
Membre no 211 998



Bonjour smile.gif

Je suis en train de créer un script afin d'épurer un fichier CSV que je récupère de ma banque en ligne afin d'inclure son contenu dans un tableau Excle.
Le problème c'est que j'ai certaines transactions qui contiennent d'innombrables caractères qui ne servent à rien.
Pour imager cela, voilà un exemple (j'ai volontairement modifier certaines données mais la structure est la même) :

PRLV SEPA XXX : IT00000000000 00000000000000000000000000000000000 DE XXX : 00000000000000000000000000000000000 IT00000000000;;50,00;EUR;

Ce que je souhaiterais faire, c'est de supprimer l'ensemble des caractères qui sont en gras.
Je n'arrive pas à trouver la bonne commande qui permette de faire cela.
Si une âme charitable pouvait m'aiguiller. Merci rolleyes.gif


--------------------
Carte mère : Z390 Designare - Proc : i9900K - RAM : HyperX Predator 64Go 3600MHz - CG : Radeon VII
SSD : Samsung 970 EVO Plus M.2 (500 Go) - SSD : Samsung 970 EVO Plus M.2 (1 To) - HDD : SEAGATE IronWolf 6 To
Refroidissement : Alphacool Eisbaer LT240 - Alim : Corsair AX850
Boitier : Phanteks P600S Blanc - Ecran 1: ViewSonic VP2768-4K 27" - Ecran 2: Iiyama GB3461WQSU-B1 34"
Carte WiFi/BT: ABWB BCM94360CS2 - Clavier/Souris : Logitech G502 SE et Corsair K100
Go to the top of the page
 
+Quote Post
baron
posté 12 Jan 2021, 01:37
Message #2


Macbidouilleur d'Or !
*****

Groupe : Modérateurs
Messages : 19 302
Inscrit : 22 Jul 2004
Lieu : Louvain-la-Neuve (Gaule Gelbique)
Membre no 21 291



Le problème est toujours de déterminer quel est le pattern pertinent.
Ensuite, il ne doit pas être très difficile de créer une expression régulière qui le décrive (avec une recherche grep.)

Est-ce que toutes les parties que tu veux effacer, et seulement elles ! pourraient être décrites comme suit :
« Une chaîne de caractères quelconques, qui commence avec le premier deux-points rencontré dans un paragraphe et qui se termine devant le premier point-virgule ? »

Avec un seul exemple, c'est impossible à déterminer… mais sinon, inspire-toi de cet exemple pour décrire ce qui doit être recherché.


--------------------
MacBook Pro 14’’ 2021, M1 Pro, 16 Go/1 To – macOS  12.6 “Monterey”  MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 8 Go/SSD Samsung 860EVO 1 To – Mac OSX 10.6.8  Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 — + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C   B-Box 3 + HP LaserJet 4000 N  
La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même.
Les corsaires mettent en berne…
Go to the top of the page
 
+Quote Post
jeandemi
posté 12 Jan 2021, 09:49
Message #3


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 1 854
Inscrit : 20 Aug 2020
Lieu : Belgique
Membre no 212 269



Ce sont toujours les mêmes caractères (comme lorsque les caractères accentués sont remplacés) ou ils changent ?
Dans le premier cas, tu peux utiliser la fonction rechercher/remplacer
Go to the top of the page
 
+Quote Post
EmatuM
posté 12 Jan 2021, 12:33
Message #4


Adepte de Macbidouille
*

Groupe : Membres
Messages : 90
Inscrit : 3 Jul 2020
Membre no 211 998



Citation (baron @ 12 Jan 2021, 01:37) *
Le problème est toujours de déterminer quel est le pattern pertinent.


En effet on peut par exemple voir pour un pattern qui dirait "commence par les 2 points et supprime tous les caractères (quelconques) jusqu'au point virgule"
L'idée étant de supprimer également les 2 points du début, mais de ne pas supprimer le point virgule.

Citation (jeandemi)
Ce sont toujours les mêmes caractères (comme lorsque les caractères accentués sont remplacés) ou ils changent ?
Dans le premier cas, tu peux utiliser la fonction rechercher/remplacer

Alors c'est possible en effet car il me semble que les caractères sont toujours les mêmes. J'ai déjà exploité cette méthode avec le pattern suivant pour d'autres éléments qui se trouvaient à plusieurs endroits.

set text of front document to replace_eur(text of front document, "eur", "") of me
on replace_eur(le_texte, recherche, replace)
set AppleScript's text item delimiters to the recherche
set the item_list to every text item of le_texte
set AppleScript's text item delimiters to the replace
set le_texte to the item_list as string
set AppleScript's text item delimiters to ""
return le_texte
end replace_eur


Le problème c'est que là, ça fait un sacré paquet pour une seule chose à supprimer. Cette fonction ci-dessus est utile quand tu as plusieurs lignes dans un même fichier. Je ne trouve pas cela pertinent d'écrire un si gros paquet pour seulement une ligne de caractère qui n'apparait qu'une fois par mois dans mes relevés de compte.


--------------------
Carte mère : Z390 Designare - Proc : i9900K - RAM : HyperX Predator 64Go 3600MHz - CG : Radeon VII
SSD : Samsung 970 EVO Plus M.2 (500 Go) - SSD : Samsung 970 EVO Plus M.2 (1 To) - HDD : SEAGATE IronWolf 6 To
Refroidissement : Alphacool Eisbaer LT240 - Alim : Corsair AX850
Boitier : Phanteks P600S Blanc - Ecran 1: ViewSonic VP2768-4K 27" - Ecran 2: Iiyama GB3461WQSU-B1 34"
Carte WiFi/BT: ABWB BCM94360CS2 - Clavier/Souris : Logitech G502 SE et Corsair K100
Go to the top of the page
 
+Quote Post
EmatuM
posté 16 Jan 2021, 12:55
Message #5


Adepte de Macbidouille
*

Groupe : Membres
Messages : 90
Inscrit : 3 Jul 2020
Membre no 211 998



Un UP pour savoir si quelqu'un n'a pas une solution à me proposer SVP ?
Merci rolleyes.gif


--------------------
Carte mère : Z390 Designare - Proc : i9900K - RAM : HyperX Predator 64Go 3600MHz - CG : Radeon VII
SSD : Samsung 970 EVO Plus M.2 (500 Go) - SSD : Samsung 970 EVO Plus M.2 (1 To) - HDD : SEAGATE IronWolf 6 To
Refroidissement : Alphacool Eisbaer LT240 - Alim : Corsair AX850
Boitier : Phanteks P600S Blanc - Ecran 1: ViewSonic VP2768-4K 27" - Ecran 2: Iiyama GB3461WQSU-B1 34"
Carte WiFi/BT: ABWB BCM94360CS2 - Clavier/Souris : Logitech G502 SE et Corsair K100
Go to the top of the page
 
+Quote Post
PBell
posté 16 Jan 2021, 13:19
Message #6


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 264
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,
Petite suggestion:
si tu t'intéresses à ce qui est après les ; pourquoi ne pas utiliser ce ; comme AppleScript's text item delimiters
Dans ton exemple, les '50.00' sont dans le text item 3 et 'Euro' dans ton texte item 4.

N'est-ce aps ce que tu recherches ?
Cordialement


--------------------
iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
EmatuM
posté 21 Jan 2021, 13:05
Message #7


Adepte de Macbidouille
*

Groupe : Membres
Messages : 90
Inscrit : 3 Jul 2020
Membre no 211 998



Citation (PBell @ 16 Jan 2021, 13:19) *
Bonjour,
Petite suggestion:
si tu t'intéresses à ce qui est après les ; pourquoi ne pas utiliser ce ; comme AppleScript's text item delimiters
Dans ton exemple, les '50.00' sont dans le text item 3 et 'Euro' dans ton texte item 4.

N'est-ce aps ce que tu recherches ?
Cordialement


Je n'ai pas bien saisi ce que tu me proposes. En gros tu me demandes de réutiliser la fonction que j'ai mise en exemple c'est ça ?


--------------------
Carte mère : Z390 Designare - Proc : i9900K - RAM : HyperX Predator 64Go 3600MHz - CG : Radeon VII
SSD : Samsung 970 EVO Plus M.2 (500 Go) - SSD : Samsung 970 EVO Plus M.2 (1 To) - HDD : SEAGATE IronWolf 6 To
Refroidissement : Alphacool Eisbaer LT240 - Alim : Corsair AX850
Boitier : Phanteks P600S Blanc - Ecran 1: ViewSonic VP2768-4K 27" - Ecran 2: Iiyama GB3461WQSU-B1 34"
Carte WiFi/BT: ABWB BCM94360CS2 - Clavier/Souris : Logitech G502 SE et Corsair K100
Go to the top of the page
 
+Quote Post
PBell
posté 21 Jan 2021, 21:14
Message #8


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 264
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonsoir,
L'idée est bien d'utiliser les item text delimiteurs, mais de façon plus simple:
Voici un example avec une ligne:

CODE
set ligne to "PRLV SEPA XXX : IT00000000000 00000000000000000000000000000000000 DE XXX : 00000000000000000000000000000000000 IT00000000000;;50,00;EUR;"

set AppleScript's text item delimiters to {";"}
set Montant to text item 3 of ligne


La variable Montant contient directement "50,00". De la même façon, the text item 4 of ligne contiendra "EUR".

N'est-ce pas ce que tu souhaites de nettoyer tout ce qui est devant le montant ?

Cordialement


--------------------
iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
EmatuM
posté 24 Jan 2021, 17:40
Message #9


Adepte de Macbidouille
*

Groupe : Membres
Messages : 90
Inscrit : 3 Jul 2020
Membre no 211 998



Citation (PBell @ 21 Jan 2021, 21:14) *
Bonsoir,
L'idée est bien d'utiliser les item text delimiteurs, mais de façon plus simple:
Voici un example avec une ligne:
Code
set ligne to "PRLV SEPA XXX : IT00000000000 00000000000000000000000000000000000 DE XXX : 00000000000000000000000000000000000 IT00000000000;;50,00;EUR;"
set AppleScript's text item delimiters to {";"}
set Montant to text item 3 of ligne


La variable Montant contient directement "50,00". De la même façon, the text item 4 of ligne contiendra "EUR".
N'est-ce pas ce que tu souhaites de nettoyer tout ce qui est devant le montant ?
Cordialement


Merci pour ta réponse. En fait pas devant le montant mais entre le XXX et le premier point virgule.
En gros, je te mets en gras souligné ce que je voudrais voir disparaitre
PRLV SEPA XXX : IT00000000000 00000000000000000000000000000000000 DE XXX : 00000000000000000000000000000000000 IT00000000000;;50,00;EUR

J'aimerais simplement pouvoir arriver à la structure suivante écrite exactement ainsi :
PRLV SEPA XXX ;50,00;EUR

Par contre tu parles de TEXT ITEM 4 OF LINE alors que dans ton code il est écrit TEXT ITEM 3 OF LINE. Est-ce une coquille ou n'ai-je pas compris pourquoi dans un cas tu écris 3 et après tu parles de 4 ?


--------------------
Carte mère : Z390 Designare - Proc : i9900K - RAM : HyperX Predator 64Go 3600MHz - CG : Radeon VII
SSD : Samsung 970 EVO Plus M.2 (500 Go) - SSD : Samsung 970 EVO Plus M.2 (1 To) - HDD : SEAGATE IronWolf 6 To
Refroidissement : Alphacool Eisbaer LT240 - Alim : Corsair AX850
Boitier : Phanteks P600S Blanc - Ecran 1: ViewSonic VP2768-4K 27" - Ecran 2: Iiyama GB3461WQSU-B1 34"
Carte WiFi/BT: ABWB BCM94360CS2 - Clavier/Souris : Logitech G502 SE et Corsair K100
Go to the top of the page
 
+Quote Post
Zeltron54
posté 24 Jan 2021, 21:55
Message #10


Adepte de Macbidouille
*

Groupe : Membres
Messages : 171
Inscrit : 15 Mar 2008
Lieu : Lorraine
Membre no 110 156



Le script que tu cherches à faire est:
A la fin la variable laligne contient ce que tu cherches. J'ai ajouté un "display dialog" qui te permet de l'afficher

Code
set ligne to "PRLV SEPA XXX : IT00000000000 00000000000000000000000000000000000 DE XXX : 00000000000000000000000000000000000 IT00000000000;;50,00;EUR;"
set sauv to AppleScript's text item delimiters
set AppleScript's text item delimiters to {";"}
set part1 to text item 1 of ligne
set part2 to (text item 3 of ligne) & ";" & (text item 4 of ligne)
set AppleScript's text item delimiters to {":"}
set part1 to text item 1 of part1
set laligne to part1 & ";" & part2
set AppleScript's text item delimiters to sauv

display dialog laligne


Ce message a été modifié par Zeltron54 - 25 Jan 2021, 16:16.


--------------------
Imac 27 I7 Fusion drive fin 2013 Ram 8Go Mac OS X (10.14.6)
MacBook Pro 15 pouces mi-2012 8Go Ram Mac OS X (10.14.6)
Imac 24 M3 2023 Ram 24Go macOS Sonoma 14.3
Go to the top of the page
 
+Quote Post
PBell
posté 25 Jan 2021, 17:29
Message #11


Macbidouilleur de bronze !
**

Groupe : Membres
Messages : 264
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,
Désolé, je n'ai pas vu ta réponse hier soir. Compte tenu de ce que tu souhaites, il suffit de combiner les delimiter en une seule liste de 2 delimiters: le : et le ;

Voici le script le plus simple:
CODE
set ligne to "PRLV SEPA XXX : IT00000000000 00000000000000000000000000000000000 DE XXX : 00000000000000000000000000000000000 IT00000000000;;50,00;EUR;"

set AppleScript's text item delimiters to {";", ":"}
set R to (text item 1 of ligne) & ";" & (text item 5 of ligne) & ";" & (text item 6 of ligne)

log R


Le script lui-même tient en 2 lignes sur les 4.
La ligne 1 est pour assigner une valeur d'exemple à la variable Ligne. La ligne 4 est pour voir le résultat qui est conforme à ton souhait:PRLV SEPA XXX ;50,00;EUR

Cordialement

Ce message a été modifié par PBell - 25 Jan 2021, 17:32.


--------------------
iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
g4hd
posté 25 Jan 2021, 18:27
Message #12


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 9 702
Inscrit : 9 Nov 2001
Lieu : Pays d’Aix
Membre no 1 255



Est-ce qu'il s'agit d'intervenir sur une petite quantité de fichiers (une dizaine ?) ou bien plusieurs dizaines ?
Je demande cela parce qu'il y a moyen de faire cela en "visuel" à la souris, à l'aide de fonctionnalités simples comme Renommer/Remplacer sur un nombre réduit de fichiers listés.

Je pratique cela (10 minutes tous les 3 mois) pour mes relevés bancaires Banque Populaire qui sont maintenant dénommés avec dates "jjmmaaaa" après l'intervention d'un crétin qui a décidé que c'est mieux que le précédent classement par dates "aaaammjj"… qui classe automatiquement dans l'ordre chronologique.
(Faut-il expliquer la non-réaction arrogante de cette banque quand on essaye de leur faire comprendre ?)
Exemples de classement idiot jjmmaaaa (sur les 4 premiers mois de l'année) :
Relevé du 15012020
Relevé du 15022020
Relevé du 15032020
Relevé du 15042020
Relevé du 29022020
Relevé du 30042020
Relevé du 31012020
Relevé du 31032020
Les mêmes remis en classement chronologique aaaammjj :
Relevé du 20200115
Relevé du 20200131
Relevé du 20200215
Relevé du 20200229
Relevé du 20200315
Relevé du 20200330
Relevé du 20200415
Relevé du 20200430

Ce message a été modifié par g4hd - 25 Jan 2021, 18:39.


--------------------
 Mac Studio M1max 32 Go 1 To - Sonoma - Eizo 27" + Nec 21" - usage PAO
 MBp14 M2pro 16 Go 1 To - Sonoma - iPhone 15 128 - iWatch 6
 abonné VVMac
Go to the top of the page
 
+Quote Post
EmatuM
posté 27 Jan 2021, 17:46
Message #13


Adepte de Macbidouille
*

Groupe : Membres
Messages : 90
Inscrit : 3 Jul 2020
Membre no 211 998



PBell et Zeltron54
Merci pour vos réponses, je vais regarder cela.

g4hd
En fait je le faisais déjà à la main à l'époque sans même passer par la fonction Recherche/Remplace vu que ça ne concerne qu'une seule ligne sur chaque relevé de compte.
Le truc c'est qu'étant donné que j'avais créé le reste du script pour remplacer plusieurs autres éléments (là pour le coup plusieurs fois la même chose dans chaque relevé) tant qu'à faire je voulais que cette étape se fasse aussi via le script. Autant tout faire en une fois au lieu de faire la moitié avec le script, l'autre moitié à la main. Ca n'aurait du coup aucun intérêt de faire un script qui ne te mâche que la moitié du boulot, n'est-ce pas ? cool.gif


--------------------
Carte mère : Z390 Designare - Proc : i9900K - RAM : HyperX Predator 64Go 3600MHz - CG : Radeon VII
SSD : Samsung 970 EVO Plus M.2 (500 Go) - SSD : Samsung 970 EVO Plus M.2 (1 To) - HDD : SEAGATE IronWolf 6 To
Refroidissement : Alphacool Eisbaer LT240 - Alim : Corsair AX850
Boitier : Phanteks P600S Blanc - Ecran 1: ViewSonic VP2768-4K 27" - Ecran 2: Iiyama GB3461WQSU-B1 34"
Carte WiFi/BT: ABWB BCM94360CS2 - Clavier/Souris : Logitech G502 SE et Corsair K100
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th March 2024 - 12:53