Perl - Démarrer la lecture à partir de la ligne spécifique, et la première colonne de la ligne, jusqu'à la fin
J'ai un fichier texte qui se présente comme suit:
Line 1
Line 2
Line 3
Line 4
Line 5
filename2.tif;Smpl/Pix & Bits/Smpl are missing.
Il y a 5 lignes qui sont toujours les mêmes, et sur la ligne 6 est où je veux commencer la lecture des données. Lors de la lecture des données, chaque ligne (à partir de la ligne 6) est délimitée par des points-virgules. J'ai besoin pour obtenir juste la première entrée de chaque ligne (en commençant à la ligne 6).
Par exemple:
Line 1
Line 2
Line 3
Line 4
Line 5
filename2.tif;Smpl/Pix & Bits/Smpl are missing.
filename4.tif;Smpl/Pix & Bits/Smpl are missing.
filename6.tif;Smpl/Pix & Bits/Smpl are missing.
filename8.tif;Smpl/Pix & Bits/Smpl are missing.
De sortie souhaité serait:
filename2.tif
filename4.tif
filename6.tif
filename8.tif
Est-ce possible, et si oui, où dois-je commencer?
- Il est possible de faire. Avez-vous des code encore?
- Oui et non. Pas encore - mais j'ai plus de 300 lignes de code que j'essaie de mettre en œuvre cette dans. En gros, c'est une nouvelle fonctionnalité que je suis en train de mettre en œuvre pour traiter les fichiers à partir d'un fichier texte qui existe déjà.
- La réponse à toutes les questions du début, “En Perl, ¿je peux faire ...?” est “¡Oui!” Toutefois, la réponse à certaines de ces continue avec “Oui, mais ....”
Vous devez vous connecter pour publier un commentaire.
Il utilise le Perl 'autosplit' (ou 'awk') mode:
Voir " perlrun "et"perlvar'.
Si vous avez besoin de faire une fonction qui est donnée à un descripteur de fichier et un nombre de lignes à ignorer, alors vous ne serez pas en utilisant le Perl 'autosplit mode.
Ce initialise une boucle, lit les lignes, en sautant, en N d'entre eux, puis fractionnement de la ligne et de la capture de la première à la suite seulement. Cette ligne avec
my($file) = split...
est subtil; les parenthèses signifient que la scission a un contexte de liste, de sorte qu'il génère une liste de valeurs (plutôt que d'un nombre de valeurs) et attribue la première à la variable. Si les parenthèses sont omises, vous fournirait un contexte scalaire à une liste de l'opérateur, de sorte que vous obtiendrez le nombre de champs dans la fraction de sortie affecté à$file
- pas ce que vous avez besoin. Le nom de fichier est ajouté à la fin du tableau, et le tableau est retourné. Étant donné que le code n'a pas ouvert le descripteur de fichier, ne le ferme pas. Une interface alternative serait de passer le nom du fichier (au lieu d'un descripteur de fichier ouvert) dans la fonction. Vous devez ensuite ouvrir et de fermer le fichier en fonction de, se soucier de la gestion des erreurs.Et si vous avez besoin de l'aide avec l'ouverture du fichier, etc, alors:
return $list[0];
et maintenant il affiche le nom de fichier. Le problème est qu'un seul nom de fichier est renvoyé, mais il n'y a plus de résultats. J'ai besoin d'elle pour retourner chaque match c'est contre.perl this_program your_input_file
ouperl this_program < your_input_file
oucat your_input_file | perl this_program
ougzcat your_input_file.gz | perl this_program
ouwget -O - http://remote_url | perl this_program
ou de l'un quelconque d'un nombre infini de suppléant formulations du même acabit et l'effet.Un peu laid mais, lire les lignes factices et de la diviser ensuite sur ; pour le reste d'entre eux.
my @dummy; @dummy[0..4] = <STDIN>;map {($a) = split /;/;print $a,"\n"} <STDIN>;
.readline
opérateur dans votre tranche d'affectation, ce qui épuisant d'entrée. Les lignes restantes ont été écartées.