Extraire des emails d'un .csv
jee pee Messages postés 41531 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je cherche a creer un fichier txt qui comprend les adresse mail de tous les utilisateurs présent dans un .csv
Or ce .csv n'a pas de colonne mail, je souhaite donc d'abord créer automatiquement le mail a partir de la colonne "identifiant".
par ex, dans la colonne F, il y a jean.dupond ou marie.durand et j'aimerais générer leur mail jean.dupond@trucmail.com et marie.durand@trucmail.com puis les sauvegarder à l'intérieur d'un nouveau fichier en les ajoutant tous à la suite séparés par des points virgule. Ce fichier servira à créer une liste de diffusion sur wordpress.
le fichier comprendrait donc ceci :
jean.dupond@trucmail.com;marie.durand@trucmail.com;.....
je connais deja la formule qui converti un login en email dans excel : =F2&"@trucmail.com" (si le login est dans la colonne F) mais j ignore comment je peux faire ça en batch
Windows / Chrome 123.0.0.0
- Extraire des emails d'un .csv
- Extraire une video youtube - Guide
- Extraire le son d'une vidéo - Guide
- Extraire image pdf - Guide
- Comment creer un compte email - Guide
- Extraire texte d'une image - Guide
7 réponses
ou on peut extraire les comptes mails dans un premier fichier, et supprimer les caractères de fin de ligne CRLF pour obtenir une seule ligne concaténée dans un second fichier
FOR /F "tokens=1,2,3,4,5,6,7* delims=; " %%i in ('type cptes.txt') do echo %%n@trucmail.com; >> mail1.txt FOR /F %%h in ('type mail1.txt') do (>>mail2.txt <nul set /p unused=%%h)
Bonjour,
Avec cptes.txt
1;2;3;4;5;jean.dupond;7;8;9
a;b;c;d;e;marie.durand;g;h;i
et un cptes.cmd
SETLOCAL EnableDelayedExpansion set MAIL= FOR /F "tokens=1,2,3,4,5,6,7* delims=; " %%i in ('type cptes.txt') do set MAIL=!MAIL!%%n@trucmail.com; echo %MAIL% >mail.txt
on obtient mail.txt
jean.dupond@trucmail.com;marie.durand@trucmail.com;
les limites, il faut que tous les utilisateurs soient sur le même serveur de messagerie trucmail.com, et je ne sais pas quelle est la taille maxi d'une variable
edit : la taille maxi d'une ligne et du contenu d'une variable est de 8191 dans l'invite de commande
Le caractère TAB(ulation) est un concept pas toujours facile à appréhender ;-) Avec TAB en séparateur cela fonctionne bien. Sauf s'il existe des colonnes vides, cette commande de script ne sait pas gérer cela. Il faudrait passer par un langage de programmation comme Python.
Ou plus simple, prendre le fichier .csv sous Excel et ne garder que la colonne des email et traiter alors la colonne 1 de ce fichier.
merci pour ces propositions. Elles sont satisfaisantes et je commence à voir ce qu'il est possible de faire. Il me reste des pb. selon le contenu de certaines cellules (nom composé ou cellule vide) cela semble coincé et le mail généré est faux car il ne récupère pas la bonne colonne.
voici par exemple ce que contient mon fichier export.csv
numero Ident Type Nom Prénom Identifiant 567489 47569 Élève DUPOND jean jean.dupondoni 345698 56788 Élève SAID MOSSA abib abib.saidmossa
si j'applique le premier script il me mettra abib@trucmail.com et non pas abib.saidmossa@trucmail.com car il va chercher la valeur dans la colonne E au lieu de la colonne F à cause de la présence d'un espace entre said et mossa.
autre pb avec la deuxieme solution de script (création de mail1.txt et mail2.txt).
Ici c'est ok au niveau de la récupération de la colonne F si le nom ou prenom comporte un espace. Par contre si j'ai une cellule vide sur une ligne alors le script saute d'une cellule. Par exemple si la celule B56 est vide alors il va générer un mail à partir de la cellule G56 au lieu de F56. Et si les cellule B56 et C56 sont vides alors il décale encore de 2 cellules et va chercher la cellule H !! Incomprehesible mais une chose est sure les cellule vides pose pb et donc certains mails sont faux.
Comment etre certain que le mail sera bien géréné uniquement à partir de la colonne F (identifiant sous la forme prenom.nom) quelque soit la forme du nom /prenom, avec ou sans espace ou autre caractère spéciaux, et qu'il y ait oiu non une cellule vide ?
normalement un fichier csv a un séparateur de colonne ; (ou virgule en anglais), là c'est un blanc ou une tabulation ?
on ne peut pas utiliser le blanc puisqu'il peut être contenu dans une colonne, donc il faut que ce soit une tabulation. Avec ton fichier, et une tabulation entre les colonnes avec :
FOR /F "tokens=6 skip=1 delims= " %%i in ('type cptes.txt') do (>>mail3.txt <nul set /p unused=%%i@trucmail.com;)
delims= " entre = et ", ce n'est pas un blanc mais une tabulation, on obtient bien
jean.dupondoni@trucmail.com;abib.saidmossa@trucmail.com;
le skip=1 permettant de sauter la première ligne
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionnon cela me donne un truc sous cette forme %n@trucmail.com; si je met un espace entre = et ". Je crois que le ; cest la bonne delimitation de mes cellules mais avec une cellule vide cela doit surement mettre ;; et donc ca décale tout
voici le seul script qui me donne quelque chose de cohérent sauf pour les cases vide qui va décaler la colonne vers la droite d'autant de cases vides et donc ne prendra pas en compte la colonne voulue (F).
@echo off setlocal FOR /F "tokens=1-6 skip=1 delims=;" %%i in ('type export.csv') do echo %%n@trucmail.com; >>mail1.txt
je confirme. en ouvrant mon csv avec notepad++ je vois bien, lorsque la cellule est vide, un double point virgule. donc pour solutionner le probleme de décalage de colonne il faudrait peut etre indiquer une commande à exécuter quand il y a ;; comme ajouter une lettre ou un espace entre les 2
comment faire en sorte que le script ne squeeze pas les ;; et identifie bien 2 point virgule distinct à comptabiliser dans la commande tokens=6 ?
script 1 pour lister un mail par ligne
FOR /F "tokens=6 skip=1 delims=;" %%i in ('type export.csv') do echo %%i@trucmail.com;>>mail1.txt
script 2 pour lister les mails à la suite
FOR /F "tokens=6 skip=1 delims=;" %%i in ('type export.csv') do (>>mail3.txt <nul set /p unused=%%i@trucmail.com;)
et en mixant les 2 commandes