Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

couper une chaine sans motif de reconnaissance

3 réponses
Avatar
Eric D
Bonjour

J'ai une chaine de caracteres de la forme suivante
0001234025489601111110326589000012400000010235402
il faut que je la coupe tous les 7 caratères et que j'en fasse la somme.

Je viens de me rendre compte que pour se servir de split je suis obligé
d'avoir un motif de reconnaissance. Est-ce que je suis obligé d'utiliser
substr pour mes sept chaines ou bien il y a t'il une autre solution.
pour la somme je fais $machaine1 + $machaine2 + $machaine3 ...le
problème c'est qu'il me fait sauter les 0 qui sont à gauche.
Comment faire pour les remettre?

Merci pour les Réponses A#

3 réponses

Avatar
jl_morel
Dans l'article <40121b02$0$28701$,
a dit...

J'ai une chaine de caracteres de la forme suivante
0001234025489601111110326589000012400000010235402
il faut que je la coupe tous les 7 caratères et que j'en fasse la somme.

Je viens de me rendre compte que pour se servir de split je suis obligé
d'avoir un motif de reconnaissance. Est-ce que je suis obligé d'utiliser
substr pour mes sept chaines ou bien il y a t'il une autre solution.
pour la somme je fais $machaine1 + $machaine2 + $machaine3 ...le
problème c'est qu'il me fait sauter les 0 qui sont à gauche.
Comment faire pour les remettre?



On peut utiliser unpack pour découper la chaîne et printf ou sprintf
pour rajouter les zéros à gauche.

#!/usr/bin/perl -w
use strict;

my $chaine = '0001234025489601111110326589000012400000010235402';

my $s;
$s+=$_ foreach (unpack "(A7)*", $chaine);

printf "%07d", $s;

__END__

--
J-L.M.

Avatar
Eric D
"Eric D" a écrit dans le message de
news:40121b02$0$28701$
Bonjour

J'ai une chaine de caracteres de la forme suivante
0001234025489601111110326589000012400000010235402
il faut que je la coupe tous les 7 caratères et que j'en fasse la
somme.


Je viens de me rendre compte que pour se servir de split je suis
obligé

d'avoir un motif de reconnaissance. Est-ce que je suis obligé d'utiliser
substr pour mes sept chaines ou bien il y a t'il une autre solution.
pour la somme je fais $machaine1 + $machaine2 + $machaine3 ...le
problème c'est qu'il me fait sauter les 0 qui sont à gauche.
Comment faire pour les remettre?

Merci pour les Réponses A#




Ca fonctionne mais je ne trouve pas ca trés beau

use strict;

my $CHEMIN="d:test";
my @ENCOURS; # tableau temporaire
my @TRIE; # tableau trie
my $CHAINE; # chaine à traiter
my $CHAINE1; # chaine à traiter
my $CHAINE2; # chaine à traiter
my $CHAINE3; # chaine à traiter
my $CHAINE4; # chaine à traiter
my $CHAINE5; # chaine à traiter
my $CHAINE6; # chaine à traiter
my $CHAINE7; # chaine à traiter
my $TEMP; # chaine temporaire

chdir ($CHEMIN);
opendir ( REPERTOIRE , "." ) || die "probleme opendir: $!n";

###################################
# listage du contenu du repertoire
###################################

foreach (readdir(REPERTOIRE))
{
push (@ENCOURS,$_) if -T $_;
}

closedir REPERTOIRE;

@TRIE=sort{$a cmp $b} @ENCOURS;

foreach (@TRIE)
{
open ( FICHIER, $_) || die "probleme ouverture FICHIER: $!n";
while (<FICHIER>)
{
if ($_ =~ /^10/)
{
$CHAINE=substr($_,150,49);
$CHAINE1=substr($CHAINE,0,7);
$CHAINE2=substr($CHAINE,7,7);
$CHAINE3=substr($CHAINE,14,7);
$CHAINE4=substr($CHAINE,21,7);
$CHAINE5=substr($CHAINE,28,7);
$CHAINE6=substr($CHAINE,35,7);
$CHAINE7=substr($CHAINE,41,7);
$TEMP=$CHAINE1 + $CHAINE2 + $CHAINE3 + $CHAINE4 + $CHAINE5 + $CHAINE6 +
$CHAINE7;
print "== $CHAINE == n == $CHAINE1 $CHAINE2 $CHAINE3 $CHAINE4 $CHAINE5
$CHAINE6 $CHAINE7 == n";
$CHAINE= "0000000".$TEMP;
$CHAINE = substr($CHAINE,-7);
substr($_,150,49,$CHAINE);
print "$_ n";
}
}
close FICHIER;
}

Avatar
Eric D
"Jean-Louis MOREL" a écrit dans le message de
news:butbim$8tu$
Dans l'article <40121b02$0$28701$,


a dit...

J'ai une chaine de caracteres de la forme suivante
0001234025489601111110326589000012400000010235402
il faut que je la coupe tous les 7 caratères et que j'en fasse la
somme.



Je viens de me rendre compte que pour se servir de split je suis
obligé


d'avoir un motif de reconnaissance. Est-ce que je suis obligé d'utiliser
substr pour mes sept chaines ou bien il y a t'il une autre solution.
pour la somme je fais $machaine1 + $machaine2 + $machaine3 ...le
problème c'est qu'il me fait sauter les 0 qui sont à gauche.
Comment faire pour les remettre?



On peut utiliser unpack pour découper la chaîne et printf ou sprintf
pour rajouter les zéros à gauche.

#!/usr/bin/perl -w
use strict;

my $chaine = '0001234025489601111110326589000012400000010235402';

my $s;
$s+=$_ foreach (unpack "(A7)*", $chaine);

printf "%07d", $s;

__END__

--
J-L.M.



Merci 8-)