Extraire des emails d'un .csv

adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 - 7 avril 2024 à 23:07
jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 - 9 avril 2024 à 18:34

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

A voir également:

7 réponses

jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 9 441
8 avril 2024 à 00:17

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)

2
jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 9 441
Modifié le 8 avril 2024 à 00:27

et en mixant les 2 commandes

FOR /F "tokens=6 delims=; " %%i in ('type cptes.txt') do (>>mail3.txt <nul set /p unused=%%i@trucmail.com;)
1
jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 9 441
Modifié le 7 avril 2024 à 23:52

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


1
jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 9 441
9 avril 2024 à 18:07

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.


1
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 10
9 avril 2024 à 18:31

ok je vois. plus compliqué que prévu en fait. je n'ai pas de mail dans mon export .csv mais uniquement les identifiants qui composent le mail. Pas bien grave c'est peu probable que les cellules avant la colonne H (identifiant) soit vides.

0
jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 9 441 > adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024
9 avril 2024 à 18:34

sous Excel et ne garder que la colonne des identifiants

0
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 10
9 avril 2024 à 15:44

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 ?

0
jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 9 441
Modifié le 9 avril 2024 à 16:07

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 10
9 avril 2024 à 16:23

non 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

0
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 10
9 avril 2024 à 16:30

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
0
adgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 10
9 avril 2024 à 18:26

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;)
0
jee pee Messages postés 40515 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 3 décembre 2024 9 441
9 avril 2024 à 18:30

dans notepad++ remplacer ;; par ; ;

0