J'espère que cette question n'est pas trop simple - Je suis assez inexpérimenté avec perl. Mon problème: Je veux lire et traiter un fichier en morceaux, mais les délimiteurs des blocs peuvent varier. J'ai le fichier entier dans une variable $ text. A titre d'exemple:perl: lire et traiter un fichier en morceaux
One
Two
BEGIN
Three
Four
END
Five
Je souhaite parcourir ce fichier par morceaux. Je veux lire jusqu'à la ligne vide suivante et enregistrer (et traiter) le résultat en un seul morceau, de sorte que "One" et "Deux" seraient les deux premiers morceaux. Si le nouveau bloc commence par le mot-clé "BEGIN", je souhaite lire et traiter jusqu'au mot-clé "END", de sorte que le bloc soit "Three \ n Four". Comment ferais-je cela en perl?
J'ai lu à propos de la fonction "index", mais je n'ai pas pu le faire passer par mon $ text.
Merci beaucoup!
Merci, l'opérateur de flip flop semble en effet comme la chose que je cherchais. Mon problème est maintenant comment puis-je casser la boucle à la fin de l'instruction if? Parce que, d'après ce que je comprends, l'autre reviendra vrai pour toujours? – Thomas
L'opérateur de plage renvoie true lorsque la première expression est vraie. Cela reste le cas jusqu'à ce que la deuxième expression soit vraie, ce qui entraîne alors l'opérateur false à retourner false. Dans l'extrait de code affiché, des séquences supplémentaires BEGIN..END seraient traitées comme vous l'avez vu. Si vous utilisez? BEGIN? ..? END? Au lieu de /BEGIN/../END/, seul le premier bloc "BEGIN-END" sera apparié. – JRFerguson
Oui, excusez-moi, vous avez absolument raison. J'avais essayé de mettre votre code dans un script Perl et l'exécuter sur le fichier entier concaténé en une variable; cela fonctionne avec l'opérateur de diamant. – Thomas