[PERL] conversion des dates
Fermé
stephane
-
24 août 2006 à 14:00
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 7 mars 2007 à 16:30
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 7 mars 2007 à 16:30
A voir également:
- [PERL] conversion des dates
- Conversion monnaie - Télécharger - Banque & Budget
- Denon perl pro test - Accueil - Audio
- Conversion majuscule minuscule - Guide
- Conversion ascii - Guide
- La date de livraison sera communiquée dès que possible - Forum Vos droits sur internet
5 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
24 août 2006 à 17:21
24 août 2006 à 17:21
Salut,
je vais essayer te t'aider mais j'ai besoin de savoir la plage que tu dois couvrir
tu vas avoir besoin de 02 pour 1902 ou 1802 .....?!
pareil pour 03 jusqu'à 09 par exemple
Et aussi si tu peux dire d'où tu obtiens ces données. Peut être il y a des moyens pour mieux faire.
Et s'il n'y a pas une fonction et on va avoir besoin alors on va la crée sinon je crois que avec les regex on va s'en sortir.
Mais pour ça j'ai besoin de plus de détails.
lami20j
P.S. 01/85 ce n'est pas un date mais un division de chaînes de caractères si on parle d'une opération ou tout simplement un chaîne de caractère qui ne veut rien dire
je vais essayer te t'aider mais j'ai besoin de savoir la plage que tu dois couvrir
tu vas avoir besoin de 02 pour 1902 ou 1802 .....?!
pareil pour 03 jusqu'à 09 par exemple
Et aussi si tu peux dire d'où tu obtiens ces données. Peut être il y a des moyens pour mieux faire.
Et s'il n'y a pas une fonction et on va avoir besoin alors on va la crée sinon je crois que avec les regex on va s'en sortir.
Mais pour ça j'ai besoin de plus de détails.
lami20j
P.S. 01/85 ce n'est pas un date mais un division de chaînes de caractères si on parle d'une opération ou tout simplement un chaîne de caractère qui ne veut rien dire
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
24 août 2006 à 22:38
24 août 2006 à 22:38
Re,
j'avoue que tu ne m'aide pas trop.
Pourquoi tu n'utilise Excel directement pour faire une mise en forme des dates?! Tu dois avoir tes raisons mais si tu ne dit pas alors je ne peux pas comprendre exactement ce que tu veux.
Tu dis que tu exportes en CSV. Pourquoi ne fait tu un format cellule pour formater la date jj/mm/aaaa et ensuite tu fait l'exportation.
Un exemple pour te montrer qu'il peut avoir des confusions.
01/98 peut être 01/1998 mais il peut être aussi 01/2098
Et je repete, une fois que tu as exporté en CSV tu n'as plus des dates mais de chaînes de caractères dont tu veux changer l'affichage, je ne veux pas utiliser format.
Par exemple
Si tu me donnes ton fichier excel je peux voir mieux.
Mais je crois que le formatage de dates avant l'exportation en CSV c'est la meilleure solution.
lami20j
P.S. Il y a aussi des modules sur CPAN pour traitement de fichiers Excel avec Perl
https://metacpan.org/search?q=excel
j'avoue que tu ne m'aide pas trop.
Pourquoi tu n'utilise Excel directement pour faire une mise en forme des dates?! Tu dois avoir tes raisons mais si tu ne dit pas alors je ne peux pas comprendre exactement ce que tu veux.
Tu dis que tu exportes en CSV. Pourquoi ne fait tu un format cellule pour formater la date jj/mm/aaaa et ensuite tu fait l'exportation.
Un exemple pour te montrer qu'il peut avoir des confusions.
01/98 peut être 01/1998 mais il peut être aussi 01/2098
Et je repete, une fois que tu as exporté en CSV tu n'as plus des dates mais de chaînes de caractères dont tu veux changer l'affichage, je ne veux pas utiliser format.
Par exemple
my $d = "-> 1987 "; $d =~ s/^->\s*(\d{4})/avant $1/;ou pour
my $d2 = "01/98"; $d2 = ~ s/^->\s*(\d\d)\/([7-9][0-9])/avant $1\/19$2/;Mais comme je t'ai dit ce n'est pas excellent 01/70 peut être aussi 01/2070, etc....
Si tu me donnes ton fichier excel je peux voir mieux.
Mais je crois que le formatage de dates avant l'exportation en CSV c'est la meilleure solution.
lami20j
P.S. Il y a aussi des modules sur CPAN pour traitement de fichiers Excel avec Perl
https://metacpan.org/search?q=excel
Merci pour le lien CPAN, je vais étudier ca.
La difficulté de la mise en forme sous Excel, c'est que j'ai à peu près tout essayé, mais aucun formatage de date ne m'a permis de transformé un 01/99 en 01/1999. Mais là je reconnais que j'en ai peut-être conclu hativement que ce n'était pas faisable.
Plus globalement, je traite de nombreux fichiers Excel d'environ 4000 lignes chacun. Même en automatisant au maximum (avec des rechercher/remplacer par), j'ai 2h de boulot par fichier. L'idée était de créer un programme Perl qui fasse tout cela, au moins un maximum, les champs intraitables étant marqués xxxx par exemple.
Les expressions régulières m'ont permis de mettre en forme la plupart des dates; il ne reste plus que ce satané pb de format mm/aaaa.
Et puis, à ma décharge, je dois étudier Perl pour la rentrée universitaire, c'était l'occasion de lier l'utile à l'agréable.
La difficulté de la mise en forme sous Excel, c'est que j'ai à peu près tout essayé, mais aucun formatage de date ne m'a permis de transformé un 01/99 en 01/1999. Mais là je reconnais que j'en ai peut-être conclu hativement que ce n'était pas faisable.
Plus globalement, je traite de nombreux fichiers Excel d'environ 4000 lignes chacun. Même en automatisant au maximum (avec des rechercher/remplacer par), j'ai 2h de boulot par fichier. L'idée était de créer un programme Perl qui fasse tout cela, au moins un maximum, les champs intraitables étant marqués xxxx par exemple.
Les expressions régulières m'ont permis de mettre en forme la plupart des dates; il ne reste plus que ce satané pb de format mm/aaaa.
Et puis, à ma décharge, je dois étudier Perl pour la rentrée universitaire, c'était l'occasion de lier l'utile à l'agréable.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
25 août 2006 à 09:44
25 août 2006 à 09:44
Salut,
Ca ne m'interesse pas ce que tes fichiers contient.
En revanche si tu me donne (https://www.cjoint.com/ ) un fichier je pourrai regarder de prés et te dire si c'est faisable ou pas.
A toi de voir.
lami20j
Ca ne m'interesse pas ce que tes fichiers contient.
En revanche si tu me donne (https://www.cjoint.com/ ) un fichier je pourrai regarder de prés et te dire si c'est faisable ou pas.
A toi de voir.
lami20j
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
my ($mday ,$mon, $year ,$numjoursemaine)=(localtime) [3..6];
my @lesmois = ("Janvier" , "Fevrier" , .....);
my @lesjours = qw (Dimanche Lundi Mardi....);
$year+=1900;
print "$lesjours [$numjoursemaine] $mday $lesmois [$nom]$year;
voila ca fonctionne niquel
my @lesmois = ("Janvier" , "Fevrier" , .....);
my @lesjours = qw (Dimanche Lundi Mardi....);
$year+=1900;
print "$lesjours [$numjoursemaine] $mday $lesmois [$nom]$year;
voila ca fonctionne niquel
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
7 mars 2007 à 16:30
7 mars 2007 à 16:30
Salut,
la question était
Je me bats contre une conversion de dates en Perl. Voici le problème :
je dois convertir des chaînes du type "de 01/85 à 01/99" en ceci : "de 01/1985 à 01/1999".
Tu n'es pas cohérent dans ta façon d'écrire le code
my @lesmois = ("Janvier" , "Fevrier" , .....);
my @lesjours = qw (Dimanche Lundi Mardi....);
autant écrire
perso j'aurai écrit (pour lisibilité)
Perl permets une grande liberté. Chacun écrit le code comme il veut. Le pire sera à la maintenance de code.
la question était
Je me bats contre une conversion de dates en Perl. Voici le problème :
je dois convertir des chaînes du type "de 01/85 à 01/99" en ceci : "de 01/1985 à 01/1999".
Tu n'es pas cohérent dans ta façon d'écrire le code
my @lesmois = ("Janvier" , "Fevrier" , .....);
my @lesjours = qw (Dimanche Lundi Mardi....);
autant écrire
my @lesmois = ("Janvier" , "Fevrier" , .....); my @lesjours = ("Dimanche" , "Lundi" , "Mardi" , ....);ou
my @lesmois = qw (Janvier Fevrier .....); my @lesjours = qw (Dimanche Lundi Mardi....);
perso j'aurai écrit (pour lisibilité)
@lesmois = qw { Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre };
Perl permets une grande liberté. Chacun écrit le code comme il veut. Le pire sera à la maintenance de code.
24 août 2006 à 20:14
Je t'en dis plus : je traite un fichier Excel, exporté au format CSV. Ce fichier Excel comporte de nombreuses colonnes. La colonne des dates m'intéresse tout particulièrement; elle s'étend sur une plage qui va de 1970 à 2006. La date mini ne sera jamais inférieure à 1970; la maxi suivra le calendrier.
Sous Excel, les dates sont un peu organisées n'importe comment; quelques exemples :
-> 1987
-> 01/98
01/98-06/02
1978->
01.05-02.06
Je cherche, en Perl, à créer une automatisation de la mise en forme de ce champs date, qui doit être formaté suivant des critères bien précis :
->1987 va être formaté en "avant 1987"
->01/98 va être formaté en "avant 01/1998"
01/98-06/02 va être formaté en "de 01/1998 à 06/2002"
1978-> sera formaté en "après 1978"
01.05-02.06 sera formaté en "de 01/2005 à 02/2006
Donc : remplacement des "." par des "/", etc
Je me suis servi beaucoup des expressions régulières, avec ton aide. Mais là, je ne vois pas comment m'en sortir.
Merci,