# Création d'une mailing list

**URL:** <https://www.debian-fr.org/t/creation-dune-mailing-list/11624>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624 "2016-02-20T17:00:25Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![yoshi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/aeb1de/32.png) [@yoshi](https://www.debian-fr.org/u/yoshi)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/1 "2016-02-20T17:00:25Z")

</div>

Bonjour à tous

Je ne sais pas si je poste au bon endroit, ce n’est pas tout à fait de la programmation, mais c’est la section qui m’a parue la plus adaptée à mon problème.

Il faut que je crée une mailing list pour une [asso.Je](http://asso.Je) dispose pour cela de plusieurs fichiers d’adhérents (fichiers\_adherent\_global et fichier\_adherent\_courant) sous cette forme :

`"Noms1";"Prenoms1";"mail1"
"Noms2";"Prenoms2";"mail2"
...
"NomsN";"PrenomsN";"mailN"
`  
Sachant que certaines lignes ne comportent pas de mail, je dois créer une mailing list de tous les adhérents moins ceux de l’année en cours.Là où ça coince c’est que nous avons environ 130 à 150 adhérents chaques années, je me vois mal faire tous ça à la main et c’est d’ailleurs pour cette raison que je me suis proposé de faire ce boulot : je me suis dis que des outils tel que grep awk sed ou autres pouvaient m’aider dans cette tache longue et fastidieuse.Seulement après avoir lu et relu les différentes manpages j’ai du me rendre à l’évidence : l’exercice est trop dur pour moi qui n’a jamais u à utiliser ces outils.  
C’est pourquoi je m’en remet à [vous.Je](http://vous.Je) ne sais pas comment je dois m’y [prendre.Si](http://prendre.Si) quelqu’un parmi vous pouvait m’aider ce serait très sympa car comme je l’ai dis je me vois mal vérifier tout seul près de 600 entrées 😕

Merci d’avance 🙂

---

<div class="post-metadata">

**Author:** ![themorice](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c89c15/32.png) [@themorice](https://www.debian-fr.org/u/themorice)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/2 "2016-02-20T17:00:26Z")

</div>

tu dipose d’un fichier par année ?

Le fichier final doit être formatté comment ?

---

<div class="post-metadata">

**Author:** ![yoshi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/aeb1de/32.png) [@yoshi](https://www.debian-fr.org/u/yoshi)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/3 "2016-02-20T17:00:32Z")

</div>

En fait j’ai un fichiers avec tous les adhérents depuis plusieurs années (fichier1), à cela s’ajoute un autre fichiers contenant les adhérents de l’année en cours (fichier2).Le but étant d’envoyer un mail à tous ceux qui ne sont plus adhérents (les mails du fichier1 moins les mails du fichier2).L’idéal serait d’envoyer le résultat dans un fichiers de cette forme:`mail1;mail2;mail3;...;mailN`

---

<div class="post-metadata">

**Author:** ![themorice](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c89c15/32.png) [@themorice](https://www.debian-fr.org/u/themorice)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/4 "2016-02-20T17:00:35Z")

</div>

Voila un petit script perl développé à l’arrache :

```auto
#!/usr/bin/perl -w

use strict;

my $file1 = $ARGV[0];
my $file2 = $ARGV[1];

my @mails;
my @mails1;
my @mails2;

open (FILE1, '<', $file1);
while (<FILE1>)
{
	chomp ($_);
	my @tmp = split(/;/,$_);
	$tmp[2]=~s/"(.*)"/$1/;
	push(@mails1,$tmp[2]);
}
close (FILE1);

open (FILE2, '<', $file2);
while (<FILE2>)
{
	chomp ($_);
	my @tmp = split(/;/,$_);
	$tmp[2]=~s/"(.*)"/$1/;
	push(@mails2,$tmp[2]);
}
close (FILE2);

foreach (@mails1)
{
	my $find = 0;
	my $mail1 = $_;
	foreach(@mails2)
	{
		if ($mail1 eq $_)
		{
			$find = 1;
		}
	}
	if ($find eq 0)
	{
		push (@mails, $_);
	}
}

foreach (@mails)
{
	print $_;
	print ";";
}
print "\n";
```

usage :

```auto

```

Le fichier “file1” contient tous les adhérents, le fichier “file2” les adhérents à exclure. la liste des mails sort dans le fichier mailinglist.

---

<div class="post-metadata">

**Author:** ![yoshi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/aeb1de/32.png) [@yoshi](https://www.debian-fr.org/u/yoshi)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/5 "2016-02-20T17:00:39Z")

</div>

Merci beaucoup 😃 .Je ne pensais pas qu’il fallait allé jusqu’à écrire un script pour faire [ça.Je](http://xn--a-5fa.Je) regarde ça ce soir et je te retiens au courant.

---

<div class="post-metadata">

**Author:** ![yoshi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/aeb1de/32.png) [@yoshi](https://www.debian-fr.org/u/yoshi)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/6 "2016-02-20T17:00:57Z")

</div>

Bon j’ai testé en vitesse et ça ne marche pas trop 😕 Le fichier de sortie est vide et il me sors une série d’erreurs

`Use of uninitialized value in substitution (s///) at ./make_mailing_list.perl line 17, <FILE1> line 5.
Use of uninitialized value in substitution (s///) at ./make_mailing_list.perl line 17, <FILE1> line 15.
Use of uninitialized value in substitution (s///) at ./make_mailing_list.perl line 17, <FILE1> line 21.
Use of uninitialized value in substitution (s///) at ./make_mailing_list.perl line 27, <FILE2> line 117.
Use of uninitialized value in string eq at ./make_mailing_list.perl line 38.
`Sachant qu’il me sors la dernière ligne autant de fois qu’il y a de mail (en tout cas ça y ressemble)  
Pour les 4 premières je ne sais pas trop d’où vient le problème.J’ai regardé pour la dernière et il m’a semblé qu’il manquait un “s” à la ligne 38.J’ai remplacé` if ($mail1 eq $_)
par
      if ($mails1 eq $_)`  
Seulement quand je le lance j’ai cette erreur

`Global symbol "$mails1" requires explicit package name at ./make_mailing_list.perl line 38.
Execution of ./make_mailing_list.perl aborted due to compilation errors.
` 😢😢😢  
Je suis loin d’être un spécialiste en perl (ou en tout autre langage) mais je pense au moins avoir compris que la manip que j’ai faite loin d’etre bonne, du coup j’ai remis les choses en états…Au moins le script se lance 😆  
Merci beaucoup pour ton aide 😃

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/7 "2016-02-20T17:00:58Z")

</div>

$ grep “@” fichier1 | sed -e ‘1,$s/._;([^;]_$)/\1/’ \> mail1

te fait un fichier des mails de fichier1

$ grep “@” fichier2 | sed -e ‘1,$s/._;([^;]_$)/\1/’ \> mail2

## te fait un fichiers des mails de fichiers2

## #!/bin/sh if ! grep -q $1 mail2 ; then echo $1 fi

affiche l’argument que si il n’est pas dans mail2

et donc si ce fichier s’appelle selecte  
$ cat mail1 | xargs -n 1 ./selecte

te fait ta liste. Mais c’est à la louche et en ayant oublié la syntatxe de cut (d’où le sed du début). Et puis c’est du rustique.

---

<div class="post-metadata">

**Author:** ![themorice](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c89c15/32.png) [@themorice](https://www.debian-fr.org/u/themorice)\
**Post date:** [Février 20, 2016, 5:00 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/8 "2016-02-20T17:00:58Z")

</div>

Yoshi, le script marche très bien chez moi avec :  
file 1 :

```auto
"Nom1";"Prenom1";"mail1"
"Nom2";"Prenom2";"mail2"
"Nom3";"Prenom3";"mail3"
"Nom4";"Prenom4";"mail4"
"Nom5";"Prenom5";"mail5"
```

file 2 :

```auto
"Nom5";"Prenom5";"mail5"
"Nom3";"Prenom3";"mail3"
```

Tu es sure qu’il y a des guillemets dans ton fichier ?

---

<div class="post-metadata">

**Author:** ![yoshi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/aeb1de/32.png) [@yoshi](https://www.debian-fr.org/u/yoshi)\
**Post date:** [Février 20, 2016, 5:01 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/9 "2016-02-20T17:01:03Z")

</div>

Toutes mes excuses 😊 effectivement ton script marche tres [bien.Je](http://bien.Je) ne sais pas comment je me suis débrouillé hier soir mais ça ne voulais pas fonctionner.  
Sinon fran.b ta méthode fonctionne aussi mais elle me sors un mail par ligne.Enfin c’est pas trop génant puisque de toutes façon j’ai ma mailing list.  
Je vais quand même essayer de refaire tout ça moi-même, ça me fera un petit exercice 😉

Merci pour tout 😃

---

<div class="post-metadata">

**Author:** ![themorice](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c89c15/32.png) [@themorice](https://www.debian-fr.org/u/themorice)\
**Post date:** [Février 20, 2016, 5:01 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/10 "2016-02-20T17:01:03Z")

</div>

De rien, si tu as des questions sur mon script n’hésites pas , ou des modifications à apporter.

Le Perl c’est assez simple, pour faire des scripts c’est la régale ^^

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 5:01 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/11 "2016-02-20T17:01:04Z")

</div>

> [@](#):
>
> Sinon fran.b ta méthode fonctionne aussi mais elle me sors un mail par ligne.Enfin c’est pas trop génant puisque de toutes façon j’ai ma mailing list.

Tu «pipe» le tout par | awk ‘{TOTO=TOTO";"$1} END {print TOTO}’

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Février 20, 2016, 5:01 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/12 "2016-02-20T17:01:12Z")

</div>

dpkg --purge perl

🙂

---

<div class="post-metadata">

**Author:** ![themorice](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/c89c15/32.png) [@themorice](https://www.debian-fr.org/u/themorice)\
**Post date:** [Février 20, 2016, 5:01 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/13 "2016-02-20T17:01:13Z")

</div>

Pourquoi tant de haine ed ? 😐

---

<div class="post-metadata">

**Author:** ![yoshi](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/aeb1de/32.png) [@yoshi](https://www.debian-fr.org/u/yoshi)\
**Post date:** [Février 20, 2016, 5:01 UTC](https://www.debian-fr.org/t/creation-dune-mailing-list/11624/14 "2016-02-20T17:01:17Z")

</div>

Peut etre parce que ce langage est trop permissif?(enfin il parait j’y connais rien à la programmation)  
Sinon je vais regarder ton script, il a l’air lisible et je pense qu’avec une doc sur le perl j’arriverai à comprendre comment tu as raisonné (c’est surtout ça qu’il me manque:l’algorithmique).
