Aller au contenu
View in the app

A better way to browse. Learn more.

Next

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Perl] La galère des tableaux

Featured Replies

Posté(e)

bonjour tous,

les hash et autres tableaux, ça commence à me rendre :smack:

je récupère des données d'une base mysql et je veux construire un tableau qui sera :

%tab[site][lien]=[nom, url]

en faisant:

while ($data = $sth->fetchrow_hashref()) {
$nb_liens++;
# test url
$etat = &check_url($data->{'url'});  
if ($etat eq "ok" ){
 $nb_ok++;
} else {
 push(@bad, $data->{'site_id'});
 push @{ $tab_bad[$data->{'site_id'}] }, $data->{'lien_nom'}, $data->{'url'}; ##### ET LA CA MARCHE PAS
 $nb_bad++;
}  
} 

et je récupère avec

foreach $id (@bad) {
$list_l = '';
 foreach $t ($tab_bad[$id]){
   $list_l .= "$lname - $lurl \n"; ###### ET LA NON PLUS FORCEMENT
}
} 

mais bon voilà, je suis perdu dans un monde multidimensionel d'associations de hash et tableaux :transpi: :whistle:

Comment ajouter à %tab[db->site] le tableau %tab2[db2->lien] contenant lui-même le tableau %lien = (nom, url)

Je pense à séparer en un tableau contenant tous les "lien" par site tab[site]=lien

puis un autre tab2[lien]=[nom, url]

si je peux avoir un coup de main...

Posté(e)

heu, c'est du php+mysql, ça... ça irait plutôt dans l'autre sous-section, non ?

:D pour le deplacement :D

Posté(e)

C'est plutôt du perl+mysql et je c'est pas forcément pour faire un site :transpi:

je récupère des données d'une base mysql et je veux construire un tableau qui sera :

%tab[site][lien]=[nom, url]

Si ça commence par un %, ce n'est pas un tableau, mais une table de hashage.
push(@bad, $data->{'site_id'});

push @{ $tab_bad[$data->{'site_id'}] }, $data->{'lien_nom'}, $data->{'url'}; ##### ET LA CA MARCHE PAS

Ok, la première ligne est claire, tu met le scalaire $data->{'site_id'} à la fin du tableau @bad.

Par contre tu peux m'expliquer ce que tu tentes de faire dans la deuxième ligne ?

Tu devrais aller voir les liens suivants :

Les tables de hashage : http://sylvain.lhullier.org/publications/i...chapitre07.html

Et surtout les références : http://sylvain.lhullier.org/publications/i...chapitre11.html

Posté(e)

PLease, on précise le langage dans le titre du post, comme indiqué dans les règles de la section. Sinon, comment voulez-vous qu'on vous aide ?

Posté(e)
  • Auteur

:mdr2: merci pour les liens qui expliquent beaucoup mieux que les tutos que j'avais trouvés avant

et merci pour les infos et le script, je testerai tout ça dès que possible

Posté(e)
  • Auteur

j'ai répondu qu'à moitié

dans la deuxième ligne je veux ajouter le tableau [$data->{'lien_nom'}, $data->{'url'}] à l'occurence $data->{'site_id'} du tableau $tab_bad de manière à obtenir le tableau :

%tab_bad[site_id] = [lien_nom, url]

voilà

Posté(e)
  • Auteur

Il y a un truc qui ne marche pas dans le code de theocrite, ou je l'ai mal utilisé. Je fais :

 
my $site_list = {};
while ($data = $sth->fetchrow_hashref()) {
$nb_liens++;
# test url
$etat = &check_url($data->{'url'}); 
if ($etat eq "ok"){
	$nb_ok++;
} else {
	my $h = {};
	#on index chaque url par nom
	$h->{$data->{'lien_nom'}} = $data->{'url'};
	#on index par site (Faire une cle non numerique c'est mieux)
	$site_list->{$data->{'site_id'}} = $h;	
	$nb_bad_liens++;
} 
}
$nb_bad_sites = scalar(keys %$site_list);

my $list_l;
for my $id (keys %{$site_list}) { #en perl 6 plus de foreach
# liste des liens
$list_l = '';
for my $name (keys %{$site_list->{$id}}){
	$list_l .= "'$name' - " . $site_list->{$id}->{$name} . "\n";	
}
print $list_l; ###!!! ET LA JE N'AI QU'UN ENREGISTREMENT MEME QUAND IL Y A PLUSIEURS LIENS FAUX
}

En effet le résultat de la requête est :

$nb_bad_liens = 37

$nb_bad_sites = 17

mais je n'ai qu'un lien dans $list_l par site. Où sont les 20 autres liens ?

Posté(e)

Quel code de theocrite ?

		my $h = {};

pourquoi aps

		my %h = {};

?

Pareil pour site_list.

Je ne comprends pas bien. Tu les utilise indifféremment en scalaires et en hashtable.

Posté(e)
  • Auteur

OK, désolé

en fait c'est un bout de code retravaillé qu'on m'a donné depuis, mais ce n'était pas de théocrite qui ne ferait certainement pas des erreurs de débutant comme cela !

je l'ai utilisé en toute confiance mais fallait pas.

Je ne comprends pas bien. Tu les utilise indifféremment en scalaires et en hashtable.

... moi non plus :incline:

donc avec des %, ça marche sauf que pour chaque site, $list_l contient tous les liens de tous les sites, pas le site en question.

Au niveau du

for my $name (keys %{$site_list->{$id}}){
	$list_l .= "'$name' - " . $site_list->{$id}->{$name} . "\n";	
}

ça doit planter

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.