Bonjour,
j'ai un problème que je trouve très bizarre : une boucle foreach qui se bloque toujours au même endroit.
voici le code :
cela dit, je pense que ça vienne du foreach : si j'enlève tout le code de la boucle interne pour mettre un print à la place, j'obtiens bien toutes les lignes attendue... Donc j'imagine que c'est lié à la requête, mais j'ai fait plusieurs tests : la requête marche bien si je la passe directement sous MySQL.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 sub Recup_concepts_TFBS { my (%concept_infos) = @_; my ($res2, $tagID, $TF); my (%concept_TF_TFBS) = (); &Connexion_BD(); open(RES, ">../resultats/infos_concepts_TFBS.txt") or die("Impossible d'ouvrir infos_concepts_TFBS.txt"); print(RES "biset_id \t|\t TF \t|\t tag_id \t|\t nb de gene ayant le TFBS \n"); foreach my $biset_id (keys(%concept_infos)) { foreach my $tag (@{$concept_infos{$biset_id}}) { $tagID = $tag->{"tagID"}; $TF = $tag->{"TF"}; my $req2 = "SELECT t.".$table."virtualtag_id, TF.gene_product FROM ".$table."_TFBS t INNER JOIN ".$table."_virtual_observed_tag v ON t.".$table."virtualtag_id = v.".$table."virtualtag_id INNER JOIN biset_cont_tag b ON b.tagID = v.".$table."observedtag_id INNER JOIN ".$table."_transcription_factor TF ON TF.tf_id = t.tf_id WHERE bisetID = $biset_id AND b.tagID != $tagID AND TF.gene_product = '$TF';"; #prépare la requête sql $res2 = $dbconnect_loc -> prepare($req2); #exécution de la requête sql $res2 -> execute() || die("pb de selection : $DBI::errstr"); my $rows = $res2 -> rows; #compte le nb de lignes renvoyées par la requete $concept_TF_TFBS{$biset_id} -> {$tagID} = $rows; print(RES "$biset_id \t\t|\t $TF \t\t|\t $tagID \t|\t $rows\n"); } } close(RES); #spécifie la fin de la requête $res2 -> finish(); #deconnexion de la base $dbconnect_loc ->disconnect(); return %concept_TF_TFBS; }
Bref, je sais pas du tout où chercher, donc la moindre piste serait la bienvenue.
EDIT : je peux dire que ça bloque toujours au même endroit car le fichier dans lequel j'imprime les résultats se termine toujours ainsi :
ce qui est déjà bizarre en soit car la ligne n'est pas imprimé entièrement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 308655 | HNF4A | 611040 | 1 157343 | HOXA7 | 41409 | 3 288633 | DBT | 401805 | 0 248771 | CUX1 | 662974 | 0 165342 | E2F1 | 772883 | 0 226486 | SMAD4 | 737465 | 3 60582 | PEBP1 | 552873 | 0 216759 | DBT | 401805 | 0 20470 | DBT | 401805 | 3 107302
Partager