Extraire une chaine à 10 positions de la fin

Fermé
Champosoleil Messages postés 9 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 16 février 2021 - 15 févr. 2021 à 19:32
jee pee Messages postés 40800 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 février 2025 - 16 févr. 2021 à 12:36
Bonjour,
je dois traiter un fichier csv avec séparateurs ; (point virgule) contenant des personnes et leurs nombreux attributs dont l'adresse.
J'ai besoin d'attributs en début de ligne, pas de problème...
et d'attributs vers la fin de ligne (disons à 10 positions de la fin de ligne)
le problème c'est qu'entre les deux j'ai les adresses, et que dans certaines adresses il y a des ; (point virgule) ce qui fausse tout.
Donc je me disait qu'avec notepad++ ou autre on peut eut être filtrer les champs en partant de la fin de ligne sans tenir compte du début de ligne pour "sauter" les champs vérolés d'adresses dont je n'ai nul besoin.

Merci d'avance si vous avez une astuce
A voir également:

2 réponses

jee pee Messages postés 40800 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 février 2025 9 525
Modifié le 15 févr. 2021 à 20:18
Bonjour,

Tu devrais nous fournir un fichier d’exemple, anonymisé.

Normalement un fichier .csv où un champ contient un ; devrait être encadré par des guillemets, et ainsi le ; n'est pas pris en compte comme séparateur :
AAA;BBB;"CCC;CCC";DDD ne doit donner que 4 champs dans excel.

Pour notepad++ et ne conserver que les n derniers champs, il faudrait chercher du coté des expressions régulières, et procéder en 2 étapes

ajouter une chaine improbable devant les n derniers :remplacer
 (;.*;.*;.*)$
par
XYZXYZ\1
puis remplacer
^.*XYZXYZ
par rien
.




0
Champosoleil Messages postés 9 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 16 février 2021
Modifié le 16 févr. 2021 à 07:41
C'est presque ça merci beaucoup.
Malheureusement le csv n'a pas de délimiteur de texte, ça aurait été si simple...
Exemple de ligne :
;Vert;01/01/2021;;;;;50812345100020;;;;;0;0;Madame;TRUCMUCHE;;Machine;10/10/1910;10/10/1920;0607080910;;;Madame Machine Trumcuche;;;Rue des pigeons ; des canaries;et des pinsons;Lieu dit des oiseaux;75008;PARIS;75001;0607080910;;;;;;;;;;zone que je veux capter;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dans cet exemple le champ adresse-rue contient "Rue des pigeons ; des canaries;et des pinsons"

le problème est que l'expression (;.*;.*;.*)$ ne prend pas que les 3 derniers ; mais toute la ligne (quasiment)
0
jee pee Messages postés 40800 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 février 2025 9 525
16 févr. 2021 à 12:36
oui, l'expression régulière commence par la gauche :-/ il n'y a pas de traitement par la fin.

si c'est un fichier que tu traites une seule fois, moi je ferais cela dans excel en copiant les colonnes dans une autre feuille des colonnes 1 à 26 dans l'ordre (jusqu'à l'adresse) puis en copiant les cellules avec des formules en partant de la dernière colonne d'une ligne.

et si c'est un traitement régulier, un petit programme python pour transformer le contenu du fichier en traitant en boucle lignes, puis chaque caractère.
0