Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Emmanuel Florac
Le Sun, 23 Apr 2006 18:38:51 +0200, kurtz le pirate a écrit :
bonsoir, bonsoir...
existe t'il un moyen de lire une chaine de caractères comme un tableau ? autre que substr() bien sur.
Non, mais quel intérêt? Attention à poser la bonne question, sous peine d'avoir la mauvaise réponse... Les solutions classiques en C ne sont pas forcément commodes ou adaptées en perl.
Si tu veux convertir une chaîne en tableau, tu peux utiliser split avec la chaîne vide comme argument. Split renvoie une liste, qu'on peut donc itérer directement comme un tableau :
$chaine=q(am stram gram pic et pic et colegram); foreach $char ( split '', $chaine ) { print "$char#" }
-- Le commissaire : Comment vous appelez-vous? Garance : Moi je ne m'appelle jamais, je suis toujours là. J'ai pas besoin de m'appeler. Mais les autres m'appellent Garance, si ça peut vous intéresser. Prévert,"les enfants du Paradis".
Le Sun, 23 Apr 2006 18:38:51 +0200, kurtz le pirate a écrit :
bonsoir, bonsoir...
existe t'il un moyen de lire une chaine de caractères comme un tableau ?
autre que substr() bien sur.
Non, mais quel intérêt? Attention à poser la bonne question, sous peine
d'avoir la mauvaise réponse... Les solutions classiques en C ne sont pas
forcément commodes ou adaptées en perl.
Si tu veux convertir une chaîne en tableau, tu peux utiliser split avec
la chaîne vide comme argument. Split renvoie une liste, qu'on peut donc
itérer directement comme un tableau :
$chaine=q(am stram gram pic et pic et colegram);
foreach $char ( split '', $chaine ) { print "$char#" }
--
Le commissaire : Comment vous appelez-vous?
Garance : Moi je ne m'appelle jamais, je suis toujours là. J'ai pas
besoin de m'appeler. Mais les autres m'appellent Garance, si ça peut
vous intéresser.
Prévert,"les enfants du Paradis".
Le Sun, 23 Apr 2006 18:38:51 +0200, kurtz le pirate a écrit :
bonsoir, bonsoir...
existe t'il un moyen de lire une chaine de caractères comme un tableau ? autre que substr() bien sur.
Non, mais quel intérêt? Attention à poser la bonne question, sous peine d'avoir la mauvaise réponse... Les solutions classiques en C ne sont pas forcément commodes ou adaptées en perl.
Si tu veux convertir une chaîne en tableau, tu peux utiliser split avec la chaîne vide comme argument. Split renvoie une liste, qu'on peut donc itérer directement comme un tableau :
$chaine=q(am stram gram pic et pic et colegram); foreach $char ( split '', $chaine ) { print "$char#" }
-- Le commissaire : Comment vous appelez-vous? Garance : Moi je ne m'appelle jamais, je suis toujours là. J'ai pas besoin de m'appeler. Mais les autres m'appellent Garance, si ça peut vous intéresser. Prévert,"les enfants du Paradis".
kurtz_le_pirate
"Emmanuel Florac" a écrit dans le message de news:
bonsoir, bonsoir...
existe t'il un moyen de lire une chaine de caractères comme un tableau ? autre que substr() bien sur.
Non, mais quel intérêt?
accéder directement en lecture/ecriture à un octet...
Attention à poser la bonne question, sous peine d'avoir la mauvaise réponse... Les solutions classiques en C ne sont pas forcément commodes ou adaptées en perl.
oui tu as raison. c'est vrai que je pensais plutôt à un truc du grenre : my $buffer; my @array;
$buffer=<F>; $ref_buffer=$buffer;
@array=$ref_buffer; et pour pourvoir faire : $car = $array[$i] et $array[$i]="a"
la syntaxe n'est surement pas la bonne, ni la méthode peut être mais l'idée est la.
a+ -- klp
"Emmanuel Florac" <eflorac@imaginet.fr> a écrit dans le message de
news: pan.2006.04.23.18.54.46.394922@imaginet.fr...
bonsoir, bonsoir...
existe t'il un moyen de lire une chaine de caractères comme un
tableau ?
autre que substr() bien sur.
Non, mais quel intérêt?
accéder directement en lecture/ecriture à un octet...
Attention à poser la bonne question, sous peine
d'avoir la mauvaise réponse... Les solutions classiques en C ne sont
pas
forcément commodes ou adaptées en perl.
oui tu as raison. c'est vrai que je pensais plutôt à un truc du grenre
:
my $buffer;
my @array;
$buffer=<F>;
$ref_buffer=$buffer;
@array=$ref_buffer;
et pour pourvoir faire :
$car = $array[$i] et $array[$i]="a"
la syntaxe n'est surement pas la bonne, ni la méthode peut être
mais l'idée est la.
"Emmanuel Florac" a écrit dans le message de news:
bonsoir, bonsoir...
existe t'il un moyen de lire une chaine de caractères comme un tableau ? autre que substr() bien sur.
Non, mais quel intérêt?
accéder directement en lecture/ecriture à un octet...
Attention à poser la bonne question, sous peine d'avoir la mauvaise réponse... Les solutions classiques en C ne sont pas forcément commodes ou adaptées en perl.
oui tu as raison. c'est vrai que je pensais plutôt à un truc du grenre : my $buffer; my @array;
$buffer=<F>; $ref_buffer=$buffer;
@array=$ref_buffer; et pour pourvoir faire : $car = $array[$i] et $array[$i]="a"
la syntaxe n'est surement pas la bonne, ni la méthode peut être mais l'idée est la.
a+ -- klp
Emmanuel Florac
Le Tue, 25 Apr 2006 08:36:14 +0200, kurtz_le_pirate a écrit :
la syntaxe n'est surement pas la bonne, ni la méthode peut être mais l'idée est la.
Dans ce cas, split fonctionne :
$string="abcdef"; @arr=split( '', $string); # affiche b print $arr[1];
-- Dix grammes d'abstraction valent des tonnes de bricolage. Loi de Booker.
Le Tue, 25 Apr 2006 08:36:14 +0200, kurtz_le_pirate a écrit :
la syntaxe n'est surement pas la bonne, ni la méthode peut être mais
l'idée est la.
Dans ce cas, split fonctionne :
$string="abcdef";
@arr=split( '', $string);
# affiche b
print $arr[1];
--
Dix grammes d'abstraction valent des tonnes de bricolage.
Loi de Booker.
"Emmanuel Florac" a écrit dans le message de news:
Non, mais quel intérêt?
accéder directement en lecture/ecriture à un octet...
Comme d'habitude en Perl, il existe plein de moyens différents.
La transformation de la chaîne de caractères en tableau fonctionne mais est loin d'être efficace tout du moins en place mémoire occupée. Pour les performances, il faudrait faire des tests mais je pense que c'est aussi plus lent que les solutions ci-dessous.
De plus, comme avec la solution 'substr' ci-dessous, si la chaîne contient des caractères unicode (ou wide caractères) et si on la découpe par un 'split', on traite véritablement une chaîne de caractères (unicode) et non une chaîne d'octets.
Voici deux autres solutions qui évitent le passage par un tableau.
1- L'utilisation de substr est intéressante (pourquoi s'en priver ?) :
# pour lire un $octet en $i dans $str my $octet = ord substr($str, $i, 1); # pour écrire $octet en $i dans $str substr($str, $i, 1, chr $octet);
Cette solution fonctionne bien si la chaîne ne contient pas de 'wide' caractères (des caractères sur plusieurs octets) et si $octet est compris entre 0 et 255. En fait, ça fonctionne aussi avec des valeurs plus grandes mais dans ce cas on traite une chaîne de caractères (unicode) et non une chaîne d'octets.
2- On peut aussi utiliser 'vec' :
# pour lire un $octet en $i dans $str my $octet = vec($str, $i, 8); # pour écrire $octet en $i dans $str vec($str, $i, 8) = $octet;
Cette seconde solution fonctionne quelle que soit la nature du contenu de $str. Et si $octet est en dehors de [0,255], c'est la valeur ($octet & 255) qui est affectée.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
"Emmanuel Florac" <eflorac@imaginet.fr> a écrit dans le message de
news: pan.2006.04.23.18.54.46.394922@imaginet.fr...
Non, mais quel intérêt?
accéder directement en lecture/ecriture à un octet...
Comme d'habitude en Perl, il existe plein de moyens différents.
La transformation de la chaîne de caractères en tableau fonctionne
mais est loin d'être efficace tout du moins en place mémoire
occupée. Pour les performances, il faudrait faire des tests mais je
pense que c'est aussi plus lent que les solutions ci-dessous.
De plus, comme avec la solution 'substr' ci-dessous, si la chaîne
contient des caractères unicode (ou wide caractères) et si on la
découpe par un 'split', on traite véritablement une chaîne de
caractères (unicode) et non une chaîne d'octets.
Voici deux autres solutions qui évitent le passage par un tableau.
1- L'utilisation de substr est intéressante (pourquoi s'en priver ?) :
# pour lire un $octet en $i dans $str
my $octet = ord substr($str, $i, 1);
# pour écrire $octet en $i dans $str
substr($str, $i, 1, chr $octet);
Cette solution fonctionne bien si la chaîne ne contient pas de 'wide'
caractères (des caractères sur plusieurs octets) et si $octet est
compris entre 0 et 255. En fait, ça fonctionne aussi avec des valeurs
plus grandes mais dans ce cas on traite une chaîne de caractères
(unicode) et non une chaîne d'octets.
2- On peut aussi utiliser 'vec' :
# pour lire un $octet en $i dans $str
my $octet = vec($str, $i, 8);
# pour écrire $octet en $i dans $str
vec($str, $i, 8) = $octet;
Cette seconde solution fonctionne quelle que soit la nature du contenu
de $str. Et si $octet est en dehors de [0,255], c'est la valeur
($octet & 255) qui est affectée.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
"Emmanuel Florac" a écrit dans le message de news:
Non, mais quel intérêt?
accéder directement en lecture/ecriture à un octet...
Comme d'habitude en Perl, il existe plein de moyens différents.
La transformation de la chaîne de caractères en tableau fonctionne mais est loin d'être efficace tout du moins en place mémoire occupée. Pour les performances, il faudrait faire des tests mais je pense que c'est aussi plus lent que les solutions ci-dessous.
De plus, comme avec la solution 'substr' ci-dessous, si la chaîne contient des caractères unicode (ou wide caractères) et si on la découpe par un 'split', on traite véritablement une chaîne de caractères (unicode) et non une chaîne d'octets.
Voici deux autres solutions qui évitent le passage par un tableau.
1- L'utilisation de substr est intéressante (pourquoi s'en priver ?) :
# pour lire un $octet en $i dans $str my $octet = ord substr($str, $i, 1); # pour écrire $octet en $i dans $str substr($str, $i, 1, chr $octet);
Cette solution fonctionne bien si la chaîne ne contient pas de 'wide' caractères (des caractères sur plusieurs octets) et si $octet est compris entre 0 et 255. En fait, ça fonctionne aussi avec des valeurs plus grandes mais dans ce cas on traite une chaîne de caractères (unicode) et non une chaîne d'octets.
2- On peut aussi utiliser 'vec' :
# pour lire un $octet en $i dans $str my $octet = vec($str, $i, 8); # pour écrire $octet en $i dans $str vec($str, $i, 8) = $octet;
Cette seconde solution fonctionne quelle que soit la nature du contenu de $str. Et si $octet est en dehors de [0,255], c'est la valeur ($octet & 255) qui est affectée.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>