Bonjour =E0 tous.
Dans le cadre d'une application manipulant un protocole r=E9seau, je
dois splitter une trame comme suit.
exemple :
bonjour, comment =E7a va?{ETX}XJe vais bien. Et toi ?{ETX}X{ACK}{NACK}
Je doit splitter comme ceci:
phrase1: bonjour, comment =E7a va?{ETX}X
phrase2: Je vais bien. Et toi ?{ETX}X
phrase3: {ACK}
phrase{NACK}
j'ai fait comme ceci, mais cela ne marche pas.
use constant ETX =3D> chr( hex('03'));
use constant ACK =3D> chr( hex('06'));
use constant NACK =3D> chr( hex('15'));
my $endcar =3D ACK.'|'.ETX.'.|'.NACK;
my $phrase =3D "bonjour, comment =E7a va?".ETX."XJe vais bien. Et
toi ?".ETX."X".ACK.NACK;
while ($phrase =3D~ s/([^($endcar(]*($endcar))//){
print "buf=3D$1\n";
}
print "r=E9sidu =3D $phrase\n";
mais j'obtiens:
buf=3DX
buf=3DX
buf=3D Et toi ?
buf=3D
r=E9sidu =3D bonjour, comment =E7a va?Je vais bien.
Je ne m'en sort pas.
Je doit splitter ma ligne en fonction:
* soit des ACK,
* soit des NACK,
* soit des ETX suivi d'un caract=E8re quelconque.
Je n'y arrive vraiment pas. C'est le double ETX+caract=E8re qui me
plombe tout.
Car si j'avais uniquement ACK, NACK et ETX, cela fonctionnerait
parfaitement
Je ne comprend pas l'utilisation de la substitution ici. Pourquoi ne pas faire :
while ($phrase =~ /$beginstring(.*?$endstring)/g) { print "buf=$1n";
}
Parce que le while ($phrase =~ s/$beginstring(.*?$endstring)//) { print "buf=$1n"; } print "residu=$phrasen";
vide la variable $phrase au fur et à mesure et mettant tous les éléments (parsé selon $beginstring et$endstring) tour à tour dans $buf. A la fin de la boucle --> $phrase doit être vide. Alors qu'avec while ($phrase =~ s/$beginstring(.*?$endstring)//) { print "buf=$1n"; } print "residu=$phrasen"; a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.
-- Très honnetement, je crois que tant qu'on mettra de l'affectif dans la gestion des forums et plus généralement dans la façon d'abord er ce média, on ne pourra rien faire de bien. -- Hervé Petit dans fufe --
Je ne comprend pas l'utilisation de la substitution ici. Pourquoi ne
pas faire :
while ($phrase =~ /$beginstring(.*?$endstring)/g) {
print "buf=$1n";
}
Parce que le
while ($phrase =~ s/$beginstring(.*?$endstring)//) {
print "buf=$1n";
}
print "residu=$phrasen";
vide la variable $phrase au fur et à mesure et mettant tous les
éléments (parsé selon $beginstring et$endstring) tour à tour dans
$buf.
A la fin de la boucle --> $phrase doit être vide.
Alors qu'avec
while ($phrase =~ s/$beginstring(.*?$endstring)//) {
print "buf=$1n";
}
print "residu=$phrasen";
a la fin, $residu = $phrase et cela seulement si tu trouves un moyen
de sortir de la boucle sans fin car si $phrase contient une séquence
au bon format, tu tournes sans arrêt.
--
Très honnetement, je crois que tant qu'on mettra de l'affectif dans
la gestion des forums et plus généralement dans la façon d'abord er
ce média, on ne pourra rien faire de bien.
-- Hervé Petit dans fufe --
Je ne comprend pas l'utilisation de la substitution ici. Pourquoi ne pas faire :
while ($phrase =~ /$beginstring(.*?$endstring)/g) { print "buf=$1n";
}
Parce que le while ($phrase =~ s/$beginstring(.*?$endstring)//) { print "buf=$1n"; } print "residu=$phrasen";
vide la variable $phrase au fur et à mesure et mettant tous les éléments (parsé selon $beginstring et$endstring) tour à tour dans $buf. A la fin de la boucle --> $phrase doit être vide. Alors qu'avec while ($phrase =~ s/$beginstring(.*?$endstring)//) { print "buf=$1n"; } print "residu=$phrasen"; a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.
-- Très honnetement, je crois que tant qu'on mettra de l'affectif dans la gestion des forums et plus généralement dans la façon d'abord er ce média, on ne pourra rien faire de bien. -- Hervé Petit dans fufe --
Sébastien Cottalorda
On 26 nov, 19:17, Sébastien Cottalorda wrote:
On 24 nov, 10:37, Jogo wrote:
> Sur fr.comp.lang.perl, Olivier Miakinen disait :
> Je ne comprend pas l'utilisation de la substitution ici. Pourquoi n e > pas faire :
> while ($phrase =~ /$beginstring(.*?$endstring)/g) { > print "buf=$1n";
> }
Parce que le while ($phrase =~ s/$beginstring(.*?$endstring)//) { print "buf=$1n";} print "residu=$phrasen";
vide la variable $phrase au fur et à mesure et mettant tous les éléments (parsé selon $beginstring et$endstring) tour à tour dans $buf. A la fin de la boucle --> $phrase doit être vide. Alors qu'avec while ($phrase =~ /$beginstring(.*?$endstring)/) { print "buf=$1n"; } print "residu=$phrasen"; a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.
> -- > Très honnetement, je crois que tant qu'on mettra de l'affectif dan s > la gestion des forums et plus généralement dans la façon d'abo rder > ce média, on ne pourra rien faire de bien. > -- Hervé Petit dans fufe --
On 26 nov, 19:17, Sébastien Cottalorda <scottalo...@libello.com>
wrote:
On 24 nov, 10:37, Jogo <j...@matabio.net> wrote:
> Sur fr.comp.lang.perl, Olivier Miakinen disait :
> Je ne comprend pas l'utilisation de la substitution ici. Pourquoi n e
> pas faire :
> while ($phrase =~ /$beginstring(.*?$endstring)/g) {
> print "buf=$1n";
> }
Parce que le
while ($phrase =~ s/$beginstring(.*?$endstring)//) {
print "buf=$1n";}
print "residu=$phrasen";
vide la variable $phrase au fur et à mesure et mettant tous les
éléments (parsé selon $beginstring et$endstring) tour à tour dans
$buf.
A la fin de la boucle --> $phrase doit être vide.
Alors qu'avec
while ($phrase =~ /$beginstring(.*?$endstring)/) {
print "buf=$1n";
}
print "residu=$phrasen";
a la fin, $residu = $phrase et cela seulement si tu trouves un moyen
de sortir de la boucle sans fin car si $phrase contient une séquence
au bon format, tu tournes sans arrêt.
> --
> Très honnetement, je crois que tant qu'on mettra de l'affectif dan s
> la gestion des forums et plus généralement dans la façon d'abo rder
> ce média, on ne pourra rien faire de bien.
> -- Hervé Petit dans fufe --
> Je ne comprend pas l'utilisation de la substitution ici. Pourquoi n e > pas faire :
> while ($phrase =~ /$beginstring(.*?$endstring)/g) { > print "buf=$1n";
> }
Parce que le while ($phrase =~ s/$beginstring(.*?$endstring)//) { print "buf=$1n";} print "residu=$phrasen";
vide la variable $phrase au fur et à mesure et mettant tous les éléments (parsé selon $beginstring et$endstring) tour à tour dans $buf. A la fin de la boucle --> $phrase doit être vide. Alors qu'avec while ($phrase =~ /$beginstring(.*?$endstring)/) { print "buf=$1n"; } print "residu=$phrasen"; a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.
> -- > Très honnetement, je crois que tant qu'on mettra de l'affectif dan s > la gestion des forums et plus généralement dans la façon d'abo rder > ce média, on ne pourra rien faire de bien. > -- Hervé Petit dans fufe --
Jogo
Sur fr.comp.lang.perl, Sébastien Cottalorda disait :
a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.
Avec le modificateur g, il n'y aura pas de boucle sans fin.
-- L'anti-terrorisme reproche centralement à ceux qu'il vise des intentions, des idées, et reproche des infractions seulement en second lieu comme matérialisation de ces idées et intentions. -- Julien Coupat --
Sur fr.comp.lang.perl, Sébastien Cottalorda disait :
a la fin, $residu = $phrase et cela seulement si tu trouves un moyen
de sortir de la boucle sans fin car si $phrase contient une séquence
au bon format, tu tournes sans arrêt.
Avec le modificateur g, il n'y aura pas de boucle sans fin.
--
L'anti-terrorisme reproche centralement à ceux qu'il vise
des intentions, des idées, et reproche des infractions seulement
en second lieu comme matérialisation de ces idées et intentions.
-- Julien Coupat --
Sur fr.comp.lang.perl, Sébastien Cottalorda disait :
a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.
Avec le modificateur g, il n'y aura pas de boucle sans fin.
-- L'anti-terrorisme reproche centralement à ceux qu'il vise des intentions, des idées, et reproche des infractions seulement en second lieu comme matérialisation de ces idées et intentions. -- Julien Coupat --
Jogo
Sur fr.comp.lang.perl, Marc Espie disait :
Deja, ca ne va pas afficher la meme chose...
À part pour le résidu, si. Teste pour t'en convaincre.
Ben non.
Si, si, teste. Ça donne pour la version d'Olivier (je fais un copier-coller donc les caractères de contrôles sonc môches) :
buf=bonjour, comment ça va?X buf=Je vais bien. Et toi ?X buf= buf= résidu =
Pour ma version, ça donne :
buf=bonjour, comment ça va?X buf=Je vais bien. Et toi ?X buf= buf= résidu = bonjour, comment ça va?XJe vais bien. Et toi ?X
Dans un cas tu affiches le seul element substitue, dans l'autre cas, tu affiches le 1er de n elements.
Je ne comprend pas du tout cette phrase.
C'est pas du tout pareil.
Alors, si c'est ca que tu entends par "a part pour le residu".
Quelles autres différences vois-tu ?
-- Nous courrons droit vers de graves collisions de post à charge nucléaires... On va déraper dans les foutous. -- Thierry B. dans fufe --
Sur fr.comp.lang.perl, Marc Espie disait :
Deja, ca ne va pas afficher la meme chose...
À part pour le résidu, si. Teste pour t'en convaincre.
Ben non.
Si, si, teste. Ça donne pour la version d'Olivier (je fais un
copier-coller donc les caractères de contrôles sonc môches) :
buf=bonjour, comment ça va?X
buf=Je vais bien. Et toi ?X
buf=
buf=
résidu =
Pour ma version, ça donne :
buf=bonjour, comment ça va?X
buf=Je vais bien. Et toi ?X
buf=
buf=
résidu = bonjour, comment ça va?XJe vais bien. Et toi ?X
Dans un cas tu affiches le seul element substitue, dans
l'autre cas, tu affiches le 1er de n elements.
Je ne comprend pas du tout cette phrase.
C'est pas du tout pareil.
Alors, si c'est ca que tu entends par "a part pour le residu".
Quelles autres différences vois-tu ?
--
Nous courrons droit vers de graves collisions de post à charge
nucléaires... On va déraper dans les foutous.
-- Thierry B. dans fufe --
> Je ne comprend pas l'utilisation de la substitution ici. Pourquoi ne > pas faire :
> while ($phrase =~ /$beginstring(.*?$endstring)/g) { > print "buf=$1n";
[...]
Alors qu'avec while ($phrase =~ /$beginstring(.*?$endstring)/) { print "buf=$1n"; } print "residu=$phrasen"; a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.
> Je ne comprend pas l'utilisation de la substitution ici. Pourquoi ne
> pas faire :
> while ($phrase =~ /$beginstring(.*?$endstring)/g) {
> print "buf=$1n";
[...]
Alors qu'avec
while ($phrase =~ /$beginstring(.*?$endstring)/) {
print "buf=$1n";
}
print "residu=$phrasen";
a la fin, $residu = $phrase et cela seulement si tu trouves un moyen
de sortir de la boucle sans fin car si $phrase contient une séquence
au bon format, tu tournes sans arrêt.
> Je ne comprend pas l'utilisation de la substitution ici. Pourquoi ne > pas faire :
> while ($phrase =~ /$beginstring(.*?$endstring)/g) { > print "buf=$1n";
[...]
Alors qu'avec while ($phrase =~ /$beginstring(.*?$endstring)/) { print "buf=$1n"; } print "residu=$phrasen"; a la fin, $residu = $phrase et cela seulement si tu trouves un moyen de sortir de la boucle sans fin car si $phrase contient une séquence au bon format, tu tournes sans arrêt.