[PERL] tableau <--> fichier
Fermé
sbouli
Messages postés
200
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
14 août 2014
-
18 déc. 2009 à 17:21
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 - 11 févr. 2011 à 10:52
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 - 11 févr. 2011 à 10:52
A voir également:
- [PERL] tableau <--> fichier
- Tableau croisé dynamique - Guide
- Fichier rar - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Comment réduire la taille d'un fichier - Guide
4 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
6 mai 2010 à 20:31
6 mai 2010 à 20:31
Salut,
#!/usr/bin/perl use strict;use warnings; my $fichier_hold="data.dat"; my %hash; open FICHIER_HOLD,"<$fichier_hold" or print "E/S $fichier_hold : $!" ; while (<FICHIER_HOLD>) { next unless /:/; chomp; my ($cle,$valeur) = split /:/; $hash{$cle} = $valeur; print "$cle : $hash{$cle}\n"; } close FICHIER_HOLD; __END__
Salut,
$from=$tableau{$id} il est possible que la valeur ne soit pas dans le tableau car présente plus haut dans le fichier de log DEJA traité lors du précédent appel....
C'est normal et en plus elle devrait être dans le tableau de l'appel précèdent, non?
1. Exemple de fichiers
2. Le script
3. Que veut tu obtenir comme résultat?
Si tu fais une boucle $from qui est une variable scalaire contiendra toujours autre chose.
Je souhaite donc sauvegarder/recharger le tableau en fin et debut de script
Ce qui suppose la sauvegarde de ton tableau dans un fichier puisqu'au redémarrage de script les variables sont réinitialisées.
En bref, au début de script tu pourras par exemple charger ton tableau depuis le fichier de sauvegarde.
A priori, vu que seulement les valeurs te pose de problèmes alors il faut sauvegarder seulement les clé de hash.
Un exemple concret permettra de penser à une solution.
Merci.
$from=$tableau{$id} il est possible que la valeur ne soit pas dans le tableau car présente plus haut dans le fichier de log DEJA traité lors du précédent appel....
C'est normal et en plus elle devrait être dans le tableau de l'appel précèdent, non?
1. Exemple de fichiers
2. Le script
3. Que veut tu obtenir comme résultat?
Si tu fais une boucle $from qui est une variable scalaire contiendra toujours autre chose.
Je souhaite donc sauvegarder/recharger le tableau en fin et debut de script
Ce qui suppose la sauvegarde de ton tableau dans un fichier puisqu'au redémarrage de script les variables sont réinitialisées.
En bref, au début de script tu pourras par exemple charger ton tableau depuis le fichier de sauvegarde.
A priori, vu que seulement les valeurs te pose de problèmes alors il faut sauvegarder seulement les clé de hash.
Un exemple concret permettra de penser à une solution.
Merci.
sbouli
Messages postés
200
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
14 août 2014
2
18 déc. 2009 à 17:57
18 déc. 2009 à 17:57
bonsoir,
je m'y colle dans le WE et je post lundi, merci !
Stéphane
je m'y colle dans le WE et je post lundi, merci !
Stéphane
sbouli
Messages postés
200
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
14 août 2014
2
6 mai 2010 à 18:05
6 mai 2010 à 18:05
Bonjour,
Je reviens, enfin, à l'attaque sur ce sujet, j'ai progressé mais j'ai un petit soucis.
prenons un fichier data.dat au format : clef|valeur
je souhaite lire le fichier et remplir (initialiser) un hash avec :
or le print ne me renvois que les clef et : mais pas de valeur ...
ais-je une erreur dans l'expression régulière ? ou bien on ne peut pas attribuer directement la valeur au tableau et il faut un variable intermédiaire ?
Merci d'avance ...
Je reviens, enfin, à l'attaque sur ce sujet, j'ai progressé mais j'ai un petit soucis.
prenons un fichier data.dat au format : clef|valeur
#cat data.dat clef1:valeur1 clef2:valeur2 ... clef33340430:valeur2334545
je souhaite lire le fichier et remplir (initialiser) un hash avec :
$fichier_hold="data.dat"; open(FICHIER_HOLD,"<$repertoire_destinataire/$fichier_hold") or print FICHIER_ERROR ("Erreur lors de la lecture de $repertoire_destinataire/$fichier_hold") ; while (<FICHIER_HOLD>) { chomp; (($clef,$tableau{$clef}) = /([^|]+)\|(.*)$/o); print "$clef : $tableau{$clef}\n"; } close(FICHIER_HOLD);
or le print ne me renvois que les clef et : mais pas de valeur ...
ais-je une erreur dans l'expression régulière ? ou bien on ne peut pas attribuer directement la valeur au tableau et il faut un variable intermédiaire ?
Merci d'avance ...
sbouli
Messages postés
200
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
14 août 2014
2
2 févr. 2011 à 14:52
2 févr. 2011 à 14:52
Bonjour,
je souhaite ajouter un paramètre date_heure à chaque entrée, comment puis-je modifier le tableau pour avoir une entrée de plus ?
genre :
Merci d'avance !!
Stéphane
je souhaite ajouter un paramètre date_heure à chaque entrée, comment puis-je modifier le tableau pour avoir une entrée de plus ?
genre :
$hash{$cle} = $valeur; devient : $hash{$cle}.valeur=$valeur; et : $hash{$cle}.dateheure=$date_heure; partant d'un fichier sous la forme : CLEF|VALEUR|DATE_HEURE CLEF|VALEUR|DATE_HEURE CLEF|VALEUR|DATE_HEURE
Merci d'avance !!
Stéphane
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
2 févr. 2011 à 19:58
2 févr. 2011 à 19:58
Salut,
Je n'ai pas compris.
Tu ne veux pas plutôt
?
En ce cas il faut bien sûr être sûr que cle1 et cle2 sont uniques.
Il s'agit dans hash de hash dans ce cas.
Je n'ai pas compris.
Tu ne veux pas plutôt
$hash{$cle1}{$cle2} = "quelquechose"
?
En ce cas il faut bien sûr être sûr que cle1 et cle2 sont uniques.
Il s'agit dans hash de hash dans ce cas.
sbouli
Messages postés
200
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
14 août 2014
2
3 févr. 2011 à 10:06
3 févr. 2011 à 10:06
bonjour,
non du tout, je veux ajouter une valeur qui me sert à purger, la même valeur pouvant être présente pour plusieurs clef (c'est la date de péremption de la clef en gros)
stephane
non du tout, je veux ajouter une valeur qui me sert à purger, la même valeur pouvant être présente pour plusieurs clef (c'est la date de péremption de la clef en gros)
stephane
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
3 févr. 2011 à 18:04
3 févr. 2011 à 18:04
Salut,
Comme on a la clé déjà unique alors il sufira peut être que tu concatene la cle avec la valeur ou avec la date_heure
Ca donnera plutôt
$hash{$cle} = $valeur;
devient :
Comme on a la clé déjà unique alors il sufira peut être que tu concatene la cle avec la valeur ou avec la date_heure
Ca donnera plutôt
$hash{$cle} = $valeur;
devient :
$hash{$cle_valeur}=$valeur;et :
$hash{$cle_dateheure}=$date_heure;
sbouli
Messages postés
200
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
14 août 2014
2
10 févr. 2011 à 17:25
10 févr. 2011 à 17:25
oui ou alors je fait un second hash distinct du premier dont la valeur est date_heure ...
$hash{$cle}=$valeur;
$hash2{$cle}=$date_heure;
stéphane
$hash{$cle}=$valeur;
$hash2{$cle}=$date_heure;
stéphane
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
10 févr. 2011 à 21:51
10 févr. 2011 à 21:51
Salut,
En ce cas tu peux faire un seul hash ou tu as la clé et la valeur est un tableau anonyme avec deux éléments $valeur et $date_heure
En ce cas tu peux faire un seul hash ou tu as la clé et la valeur est un tableau anonyme avec deux éléments $valeur et $date_heure
lami20j@debian-acer:~$ cat val_dateheure cle1|valeur1|date_heure1 cle2|valeur2|date_heure2 lami20j@debian-acer:~$ cat hashdetableau.pl #!/usr/bin/perl use strict;use warnings; my %h; open F,"val_dateheure" or die "E/S : $!\n"; while(<F>){ /(.*)\|(.*)\|(.*)/ and push @{$h{$1}},$2,$3; } foreach (sort keys %h){ print "$_ => ${$h{$_}}[0] ${$h{$_}}[1]\n"; } __END__ lami20j@debian-acer:~$ perl hashdetableau.pl cle1 => valeur1 date_heure1 cle2 => valeur2 date_heure2