Modification du nom d'un pointeur dans une boucle
Résolu/Fermé
artagon7
Messages postés
417
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
12 novembre 2024
-
15 juil. 2019 à 21:41
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 - 31 août 2019 à 05:07
artagon7 Messages postés 417 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 12 novembre 2024 - 31 août 2019 à 05:07
A voir également:
- Modification du nom d'un pointeur dans une boucle
- Suivi de modification word - Guide
- Logiciel modification pdf gratuit - Guide
- Trouver un nom avec une adresse ✓ - Forum Réseaux sociaux
1 réponse
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
18 juil. 2019 à 10:38
18 juil. 2019 à 10:38
Salut artagon7,
As-tu besoin que les 26 fichiers soient ouverts en même temps (comme dans ton code où tu ouvres le fichier banque de mots en A et banque de mots en B), ou est-ce suffisant de les ouvrir un par un dans ta boucle (puisque dans ton code, tu les traites de toutes façon indépendamment) ?
1.
Si tu n'as pas besoin de les ouvrir tous en même temps, tu peux simplement :
- créer un tableau des noms de fichiers banque de mots
- itérer sur ce tableau des noms de fichiers (par exemple avec une boucle foreach)
- dans la boucle foreach ouvrir le fichier en question, en traiter le contenu et fermer le fichier
https://perlmaven.com/perl-arrays
2.
Si tu as vraiment besoin de les ouvrir tous en même temps (cela fait pas mal de ressources consommées sur un système) c'est faisable aussi si tu utilises des variables pour tes descripteurs de fichiers, au lieu d'identifiants globaux (je t'avais déjà indiqué que cette pratique est obsolète et peut poser des problèmes, outre le fait que tu n'utilises pas
Tu peux les traiter dans une structure de données Perl comme un tableau ou un hash (le hash étant certainement plus approprié ici), et itérer dessus.
https://perlmaven.com/perl-hashes
Dal
As-tu besoin que les 26 fichiers soient ouverts en même temps (comme dans ton code où tu ouvres le fichier banque de mots en A et banque de mots en B), ou est-ce suffisant de les ouvrir un par un dans ta boucle (puisque dans ton code, tu les traites de toutes façon indépendamment) ?
1.
Si tu n'as pas besoin de les ouvrir tous en même temps, tu peux simplement :
- créer un tableau des noms de fichiers banque de mots
- itérer sur ce tableau des noms de fichiers (par exemple avec une boucle foreach)
- dans la boucle foreach ouvrir le fichier en question, en traiter le contenu et fermer le fichier
https://perlmaven.com/perl-arrays
2.
Si tu as vraiment besoin de les ouvrir tous en même temps (cela fait pas mal de ressources consommées sur un système) c'est faisable aussi si tu utilises des variables pour tes descripteurs de fichiers, au lieu d'identifiants globaux (je t'avais déjà indiqué que cette pratique est obsolète et peut poser des problèmes, outre le fait que tu n'utilises pas
use strict;et
use warnings;).
Tu peux les traiter dans une structure de données Perl comme un tableau ou un hash (le hash étant certainement plus approprié ici), et itérer dessus.
https://perlmaven.com/perl-hashes
Dal
19 juil. 2019 à 22:23
1) Non, je n'ai pas besoin d'ouvrir tous les tableaux en meme temps;
2) J'ai utilisé un vieux fichier pour éditer mon programme d'où l'omission des lignes
use strict;
use warnings;
Je vais les mettre dans un fichier gabarit à partir de maintenant. Merci du rappel.
J'ai fait la lecture des références que tu as données et j'ai écrit le simple programme (qui ne fonctionne pas) suivant:
Messages d'erreur :
Argument "banque_a.txt" isn't numeric in array element at test_avec_tableau.pl line 14.
Can't locate object method "say" via package "banque_a.txt" (perhaps you forgot to load "banque_a.txt"?) at test_avec_tableau.pl line 15.
Le fichier banque_a.txt est dans le même répertoire que mon programme Perl test_avec_tableau.pl.
Merci
Modifié le 12 août 2019 à 15:05
Avec Perl, comme dans d'autres langages, une boucle te permet d'itérer sur les éléments d'un objet. Dans le code :
les éléments du tableau sont successivement mis dans à chaque itération.
Comme ce tableau est un tableau de chaînes de caractères représentant tes noms de fichiers, dans la 1ère itération, vaut "banque_a.txt", dans la 2ème "banque_b.txt".
Tu n'as pas besoin d'utiliser un indice.
16 août 2019 à 22:55
Si je te comprend bien, il me suffit simplement de supprimer $n. J'aurai donc la partie corrigée suivante:
Je vais l'essayer. Merci.
17 août 2019 à 03:58
J'ai enlevé la variable $n.
Après quelques essais et changements, ma
ligne 10 est devenue :
foreach my $fichier (@fichier)
C'est correct.
Le message d'erreur concerne maintenant la ligne :
$x = "$_";
Global symbol "$x" requires explicit package name at test_avec_tableau_2.pl line 13.
Cette ligne fonctionnait pourtant bien dans la boucle while que j'avais utilisée dans le programme qui est dans mon premier message.
Au lieu d'être dans une boucle while, elle est dans une boucle foreach. Ça devrait fonctionner.
Je ne comprends pas...
19 août 2019 à 10:06
Tu déclares une variable dans ton programme en faisant .
Tu peux aussi directement faire : pour déclarer la variable et immédiatement lui assigner quelque chose.