Discussion:
Remplacement avec increment
(trop ancien pour répondre)
kurtz le pirate
2023-03-04 10:00:08 UTC
Permalink
Hello,


J'ai ce genre de données :
{ 16, 10, 53, 36, 29 }
{ 16, 41, 45, 34, 1 }
{ 17, 11, 52, 37, 28 }
{ 17, 40, 44, 34, 0 }
...

J'essaye de le transformer en :

#declare f[0] = "16,10,53,36,29";
#declare f[1] = "16,41,45,34,1";
#declare f[2] = "17,11,52,37,28";
#declare f[3] = "17,40,44,34,0";
...

Mon souci vient de l'increment à mettre entre []
J'ai essayé plusieurs choses dont celle la :

my $n = 0;
$data =~s/\{/#declare faces [$n++]/eg;

qui m'a l'air correcte... mais je récupere cette erreur :
Use of uninitialized value in substitution iterator in...

Je sèche un peu. Peut être une idée de quelqu'in ici ?
Merci
--
kurtz le pirate
compagnie de la banquise
Marc SCHAEFER
2023-03-04 12:14:32 UTC
Permalink
Post by kurtz le pirate
#declare f[0] = "16,10,53,36,29";
Je n'ai jamais vu de code Perl avec cette syntaxe
et une recherche rapide ne me montre pas qu'elle existe, mais je me
trompe peut-être?

C'est quoi la différence, en pratique entre:

my @array = ("16,10,53,36,29", "16,41,45,34,1");

et votre syntaxe?

Aussi, j'aurais tendance plutôt à faire une référence à un tableau dans
Post by kurtz le pirate
my $n = 0;
$data =~s/\{/#declare faces [$n++]/eg;
Donc, j'écrirais quelque chose du genre:

my @array;

# mettre ce qui est entre { et } comme chaîne dans @array
$data =~ s/\{[^\}]+\}/push(@array, $_}/eg;

pour faire le tableau de chaînes, on accédera alors
à $array[0], $array[1], etc.

Ou:

sub whatever {
my $s = $_;

my @values = split /,/, $s;

# réf aux valeurs
push(@array, \@values);
}

$data =~ s/\{[^\}]+\}/whatever($_)/eg;

Ensuite, on accède aux valeurs avec:

# première valeur du premier groupe
$array[0]->[0]

# ou toutes les valeurs, en tant que tableau et pas
# référence au tableau
@{$array[0]}
--
Attention: limitez le nombre de lignes de citation à l'essentiel, sinon
je ne verrai pas votre réponse. Et si vous écrivez souvent des bobards,
je ne vous lirai plus et je recommanderai (NoCeM) de ne plus vous lire.
Loading...