Perl fonction de recherche
Ce problème a été résolu. Je vous remercie beaucoup.
Ma question et la solution que j'utilise est indiqué ci-dessous.
Question:
open IN, "<./test.txt";
seek(IN,10,0);
read IN, $temp, 5;
seek(IN,20,0);
close(IN);
La situation est que, ma poignée de démarrage à la position 0.
Après la première fonction de recherche, mon fichier poignée à la position 10.
Après que j'ai lu, ma poignée à la position 15.
En ce moment, je cherche encore. Ensuite, le programme cherchera à partir du début ou de la position 20.
Ma question est qu'est-il de toute façon pour moi de faire une recherche dans un fichier, de sorte que je n'ai pas besoin de chercher à partir du point de départ du fichier à chaque fois?
La façon dont je suis l'aide de:
use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END); #SEEK_SET=0 SEEK_CUR=1 ...
$target_byte=30;
open IN, "<./test.txt";
seek(IN,10,SEEK_SET);
read IN, $temp, 5;
$position=tell(IN);
seek(IN,$target_byte-$position,SEEK_CUR);
#do what I want
close(IN);
$position=tell(IN); seek(IN,$target_byte-$position,SEEK_CUR);
est une drôle de façon de faire seek(IN,$target_byte,SEEK_SET);
OriginalL'auteur sflee | 2013-05-15
Vous devez vous connecter pour publier un commentaire.
Avant de commencer,
L'hypothèse que vous nous demandez de ne pas faire de sens. Le premier octet est à la position zéro. Toujours.
On appelle ça un "descripteur de fichier" (puisqu'il permet de vous maintenir dans un fichier), pas un "gestionnaire de fichier" (puisqu'il n'a pas gérer quoi que ce soit).
Qu'il serait plus clair si vous avez utilisé l'une des constantes SEEK_SET, SEEK_CUR et SEEK_END au lieu de 0, 1 et 2.
Votre code est ensuite
Comme son nom l'indique, il détermine la position de la valeur spécifiée.
Donc,
read
, la position dans le fichier sera de 15.Visuellement,
Si vous voulait obtenir plus par rapport à votre position actuelle, vous pouvez utiliser
SEEK_CUR
.très utile et parfaitement écrit. cheers
OriginalL'auteur ikegami