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
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
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.
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.
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.
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 />';
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
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
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
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 » ?
[...] 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 » ?
[...] 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 » ?