OVH Cloud OVH Cloud

help ereg_

4 réponses
Avatar
billard.eric
Bonjour,
Je ne connais absolument pas la fonction ereg_replace et manque de
temps. Quelqu'un pourrait-il me donner la solution pour résoudre ce
problème :
transformer une data cobol-mvs signée en une data "montant" avec
"décimale" et "signe".
Exemple 000452d -> +45,22 alors que 0045,2m -> -0045,24
table de transpo :
pour les nombres positifs {=0 a=1 b=2 c=3 d=4 e=5 f=6 g=7 h=8 i=9
pour les nombres négatifs é=0 j=1 k=2 l=3 m=4 n=5 o=6 p=7 q=8 r=9
????
Ce serait vraiment très sympa...
EB

4 réponses

Avatar
Olivier Miakinen

Je ne connais absolument pas la fonction ereg_replace [...]


Moi non plus, mais comme tout le monde m'a toujours conseillé d'utiliser
preg_replace (ou str_replace quand c'est possible) je n'ai pas cherché à
apprendre à utiliser les ereg_xxx.

transformer une data cobol-mvs signée en une data "montant" avec
"décimale" et "signe".
Exemple 000452d -> +45,22 alors que 0045,2m -> -0045,24
table de transpo :
pour les nombres positifs {=0 a=1 b=2 c=3 d=4 e=5 f=6 g=7 h=8 i=9
pour les nombres négatifs é=0 j=1 k=2 l=3 m=4 n=5 o=6 p=7 q=8 r=9
????


Tu es sûr de ton exemple ? Pour le second cas (0045,2m -> -0045,24) je
crois comprendre qu'il faut remplacer le m par un 4 et mettre un signe
moins devant. Mais pour le premier cas (000452d -> +45,22) je ne vois
pas d'où vient le 2, ni comment choisir la place de la virgule.

Explique nous un peu mieux le format, et on pourra essayer de t'aider.

Avatar
billard.eric
Voici ce que j'ai écrit, qui fonctionne, mais qui n'est surement pas optimisé...
**********************************
<?php
function signe($string) {
$signe = substr($string, -1);
$string=strtr($string, "{abcdefghijklmnopqr", "0123456789123456789");
$centimes=substr($string, -2);
$nlen=strlen($string);
$euros=substr($string,0,$nlen-2);
$cmontant=$euros.','.$centimes;
if (($signe >= 'a') and ($signe <= 'i')) {
$cmontant='+'.$cmontant;
} else {
if ($signe =='{') {
$cmontant='+'.$cmontant;
} else {
$cmontant='-'.$cmontant;
}
}
return $cmontant;
}
$datacobol="004569g";
echo signe($datacobol).'<br />';

$datacobol = "004569n";
echo signe($datacobol).'<br />';

$datacobol = "004569{";
echo signe($datacobol).'<br />';
?>
**************************************
Bonne journée
EB
Avatar
billard.eric
Tu es sûr de ton exemple ? Pour le second cas (0045,2m -> -0045,24) je
crois comprendre qu'il faut remplacer le m par un 4 et mettre un signe
moins devant.
C'est bien ça.

Mais pour le premier cas (000452d -> +45,22) je ne vois
pas d'où vient le 2, ni comment choisir la place de la virgule.
Erreur de ma part bien sur, c'est bien +45,24 !!! Quand à la virgule

elle est toujours au même endroit, la data cobol est exprimée en
centimes (pic S9(5)V99, pour les cobolistes ;-)) ).
Merci de ta réponse.
EB

Avatar
Olivier Miakinen

[...] second cas (0045,2m -> -0045,24) [...]
Mais pour le premier cas (000452d -> +45,22) je ne vois
pas d'où vient le 2, ni comment choisir la place de la virgule.
Erreur de ma part bien sur, c'est bien +45,24 !!! Quand à la virgule

elle est toujours au même endroit, la data cobol est exprimée en
centimes (pic S9(5)V99, pour les cobolistes ;-)) ).


Tu avais donc une erreur dans le second cas aussi, ou bien il peut y
avoir une virgule comme dans « 0045,2m » ?