Effacer des caractères compris entre deux zones |
Bienvenue invité ( Connexion | Inscription )
Effacer des caractères compris entre deux zones |
12 Jan 2021, 01:15
Message
#1
|
|
Adepte de Macbidouille Groupe : Membres Messages : 90 Inscrit : 3 Jul 2020 Membre no 211 998 |
Bonjour
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 -------------------- 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 |
|
|
12 Jan 2021, 01:37
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Modérateurs Messages : 19 315 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… |
|
|
12 Jan 2021, 09:49
Message
#3
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 1 874 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 |
|
|
12 Jan 2021, 12:33
Message
#4
|
|
Adepte de Macbidouille Groupe : Membres Messages : 90 Inscrit : 3 Jul 2020 Membre no 211 998 |
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 |
|
|
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 -------------------- 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 |
|
|
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 |
|
|
21 Jan 2021, 13:05
Message
#7
|
|
Adepte de Macbidouille Groupe : Membres Messages : 90 Inscrit : 3 Jul 2020 Membre no 211 998 |
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 |
|
|
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 |
|
|
24 Jan 2021, 17:40
Message
#9
|
|
Adepte de Macbidouille Groupe : Membres Messages : 90 Inscrit : 3 Jul 2020 Membre no 211 998 |
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 |
|
|
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 |
|
|
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 |
|
|
25 Jan 2021, 18:27
Message
#12
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 9 718 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 |
|
|
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 ? -------------------- 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 |
|
|
Nous sommes le : 30th March 2024 - 02:39 |