La lecture du Fichier d'Entrée et le Mettre Dans Un Tableau avec Délimiteur d'Espace en Perl
Je suis en train de prendre un fichier d'entrée avec @ARGV
tableau et écrire c'est que tous les éléments d'un Tableau avec séparateur d'espace en perl.
exemple de paramètre d'entrée est un fichier txt par exemple:
0145 2145
4578 47896
45 78841
1249 24873
(il y en a plusieurs des lignes mais ici, il n'est pas indiqué)
le problème est:
- Je ne sais pas comment le prendre pour exemple ARG[0] pour un tableau
- Je veux profiter de chaque chaîne de inputfile comme de simples chaînes de caractères en d'autres termes, le line1 0145 2145 ne sera pas une chaîne, il sera à deux distinctes de la chaîne par délimitation de l'espace.
OriginalL'auteur Berkay Abidin şimşek | 2012-03-11
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est ce que vous voulez. Le
@resultarray
dans ce code sera à la fin la tenue d'une liste de chiffres.Si vous donnez de votre programme un nom de fichier à utiliser comme entrée de la ligne de commande, l'enlever du tableau ARGV et de l'ouvrir comme un descripteur de fichier:
Une fois que vous avez le descripteur de fichier vous pouvez faire une boucle sur chaque ligne du fichier en utilisant une boucle while.
chomp
prend ce caractère de nouvelle ligne à la fin de chaque ligne. Utilisationsplit
de diviser chaque ligne, basée sur les espaces. Cette fonction retourne un tableau (@linearray
dans mon code) contenant une liste des numéros à l'intérieur de cette ligne. J'ai ensuitepush
ma ligne de tableau à la fin de mon@resultarray
.Et n'oubliez pas d'ajouter
en haut de votre dossier de perl pour vous aider si vous avez des problèmes dans votre code.
Juste pour clarifier la façon dont vous pouvez faire face à différentes entrées de votre programme. La commande suivante:
Prendra la contenu de inputfile.txt et la pipe à la
STDIN
descripteur de fichier. Vous pouvez ensuite utiliser ce descripteur de fichier pour accéder au contenu de inputfile.txtMais vous pouvez également donner à votre programme un certain nombre de noms de fichiers pour les lire en les plaçant après l'exécution de la commande:
Ces noms de fichiers seront lus dans les cordes et placé dans l' @ARGV tableau afin que le tableau ressemble à ceci:
Puisque ce sont juste les noms de fichiers, vous devez ouvrir le fichier en perl avant d'accéder au contenu du fichier. Donc, pour inputfile1.txt:
Note de la façon dont j'ai utilisé
shift
cette fois pour obtenir l'élément suivant dans le tableau @ARGV. Voir la perldoc pour plus de détails sur maj. Et aussi plus d'informations sur ouvert.et aussi pour ton code, l'erreur est imageshack.us/photo/my-images/341/asdasdfasfagfq.png que
L'erreur que vous obtenez lorsque l'impression est le résultat de la
use warnings
pragma. Il nécessite de définir toutes les variables avec un nom de package au début. Donc dans votre cas, vous devez écriremy $value
au lieu de$value
. Écrire du code perl de cette façon est un très bonne idée parce que vous allez passer beaucoup moins de temps à mettre au point vos programmes une fois que vous êtes habitué.L'autre erreur est parce que vous avez besoin d'utiliser la ligne de commande forme
test1.pl inputfile.txt
au lieu detest1.pl < inputfile.txt
. À l'aide de la<
sur la ligne de commande passe le inputfile à laSTDIN
descripteur de fichier. Mais perl aussi d'accepter des arguments de la chaîne après l'exécution de la commande. Ces sont ce qui va dans le @tableau ARGV.maintenant, il fonctionne. merci beaucoup, c'est exactement ce que je veux
OriginalL'auteur MattLBeck