Bonjour tlm,
j'essaie de garder dans un tableau 3 valeurs:
@tabvals=($name, $type);
$tabi[$i]=@tabvals;
Après je veux chercher, pour une valeur de i donnée, quelles sont les valeurs $name et $type qui lui correspondent?
Merci d'avance
Bonjour tlm,
j'essaie de garder dans un tableau 3 valeurs:
@tabvals=($name, $type);
$tabi[$i]=@tabvals;
Après je veux chercher, pour une valeur de i donnée, quelles sont les valeurs $name et $type qui lui correspondent?
Merci d'avance
Bonjour,
Utilisez des hash et lisez notre FAQ pour comprendre comment manipuler des tableaux et des hash.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Pour poursuivre avec la solution de Djibril :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 use feature qw(:5.10); my @tabvals = ( { name => "Vache", type => "Végétarien" }, { name => "Chat", type => "Carnivore" }, { name => "Ours", type => "Omnivore" }, ); foreach my $vals (@tabvals) { say join ":", $vals->{name}, $vals->{type}; } say "L'élément d'indice 2 contient : ", join ",", $tabvals[2]->{name}, $tabvals[2]->{type};
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Bonjour a tous,
merci pour votre réponse,
mon probleme, c'est que j'ai deux fichiers similaires, contenant a peu pres les memes données, et je veux rechercher certains mots qui se trouvent dans le premier fichier, et les tagger dans le deuxième fichier...
La solution que j'ai trouvé c'est créer une liste des mots du premier fichier, tout en extrayant le type, en meme temps que le nom, et ensuite rechercher ces mots un par un dans le deuxième fichier pour leur attribuer le type correspondant.
Il s'agit de faire des boucles.
mais ça marche pas j'ai déja essayé les hash, mais j'ai toujours pas trouvé de solution...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 TAGLINE: while($line=<TAG>) { chop($line); if (($line =~ m/<gsp/) || ($line =~ m/<pers/) || ($line =~ m/<inc/) || ($line =~ m/<temps/) || ($line =~ m/<org/) || ($line =~ m/<quantité/) || ($line =~ m/<lieu/) || ($line =~ m/<constr/) || ($line =~ m/var>/)){ $name=(split(/>/,$line))[1]; $nameok=(split(/</,$name))[0]; $nameok2=(split(/</,$line))[0]; if ($nameok2 =~ /\d+/){ $nameok=$nameok2." ".$nameok; } ($type, $truc) = $line =~ /<([^> ]+)([^>]?)>/; @tabvals=($nameok, $type); $tabi[$i]=@tabvals; $i++; }else{ next TAGLINE; } $long =$tabi.length; $size = @tabi; } my $j=0; while ($linetotag=<TOTAG>){ while ($j<= $size){ if ($linetotag =~ m/@tabvals[0]/){ my ($val1,$val2)=@tabi[$j]; $j++; } } }
Précise ce qui ne marche pas. Est-ce que tes tableaux contiennent bien ce que tu veux à la fin de la lecture du premier fichier?
Remarques de style:
- utilise la fonction chomp plutôt que chop
- pour créer une nouvelle case dans un tableau utilise plutôt push ou unshift plutôt que d'itérer sur $i
- l'instruction "else{ next TAGLINE;} ne sert à rien.
- "while ($j<= $size){...$j++" il vaut mieux itérer sur le tableau avec un foreach
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
- oui le premier tableau contient les valeurs quand je fais print "@tabvals";
- c'est quoi la différence entre chomp et chop?
- si je fais un push, il faut faire une boucle?
Le problème c'est que je veux chercher les valeurs existants dans le premier tableau, dans un fichier.
Si je trouve une valeur dans le tableau, je continue à parcourir le fichier à la position p, et le tableau à la position t, je ne veux pas reparcourir les deux fichiers dès le début, c'est pour cela que je n'ai pas utilisé for
La fonction chop retire le dernier caractère, chomp retire le retour à la ligne qui peut utiliser 1 ou 2 caractères). Chomp est plus sûre.
Ti fu fais un push, ça ajoute directement une case au tableau, pas besoin de boucle ni de variable d'itération/
Si j'ai un tableau @tableau qui contient ("a", "b", "c"),
ajoute le "d" à la fin du tableau, ce qui donne: ("a", "b", "c", "d"). La fonction unshift fait la même chose, mais au début du tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part push @tableau , "d";
Le code:
est censé, je suppose itérer sur ton tableau. Un foreach serait plus efficace et t'épargnerait ce qui me paraît être un bug: la variable $j n'est pas remise à 0, alors que, si j'ai compris ce que tu cherches à faire, elle devrait l'être pour chaque ligne lue dans le fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while ($j<= $size){ # ... my ($val1,$val2)=@tabi[$j]; $j++;
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager