je voudrais remplacer un fichier par le m=EAme fichier
dans lequel tous les nombres ont =E9t=E9 arrondis =E0 3
chiffres apr=E8s la virgule, l'arrondi =E9tant vers le haut
ou le bas selon celui qui est le plus proche.
Le fichier contient du texte et des nombres diss=E9min=E9s
dans le texte. Je ne peux donc pas utiliser un tableur
et recherche donc une solution du type rechercher/remplacer.
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer. [...]
je voudrais remplacer un fichier par le même fichier
dans lequel tous les nombres ont été arrondis à 3
chiffres après la virgule, l'arrondi étant vers le haut
ou le bas selon celui qui est le plus proche.
Le fichier contient du texte et des nombres disséminés
dans le texte. Je ne peux donc pas utiliser un tableur
et recherche donc une solution du type rechercher/remplacer.
[...]
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer. [...]
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer.
Je suis sur que tu auras plein de réponse Perl etc. Je te propose un petit analyseur lexical à la place (c'est printf() qui fait l'arrondi, mais tu pourrais passer à round()) :
je voudrais remplacer un fichier par le même fichier dans lequel
tous les nombres ont été arrondis à 3 chiffres après la virgule,
l'arrondi étant vers le haut ou le bas selon celui qui est le plus
proche. Le fichier contient du texte et des nombres disséminés dans
le texte. Je ne peux donc pas utiliser un tableur et recherche donc
une solution du type rechercher/remplacer.
Je suis sur que tu auras plein de réponse Perl etc. Je te propose un
petit analyseur lexical à la place (c'est printf() qui fait l'arrondi,
mais tu pourrais passer à round()) :
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer.
Je suis sur que tu auras plein de réponse Perl etc. Je te propose un petit analyseur lexical à la place (c'est printf() qui fait l'arrondi, mais tu pourrais passer à round()) :
Merci à tous les deux. Je n'avais pas pensé à lex, c'est une bonne idée. Concernant la réponse de Stéphane, c'est le 'e' de 'eg' qui indique qu'il faut interpréter la chaine de remplacement comme une expression, c'est bien ça ?
Merci à tous les deux.
Je n'avais pas pensé à lex, c'est une bonne idée.
Concernant la réponse de Stéphane, c'est le 'e'
de 'eg' qui indique qu'il faut interpréter la chaine de
remplacement comme une expression, c'est bien
ça ?
Merci à tous les deux. Je n'avais pas pensé à lex, c'est une bonne idée. Concernant la réponse de Stéphane, c'est le 'e' de 'eg' qui indique qu'il faut interpréter la chaine de remplacement comme une expression, c'est bien ça ?
Stephane Chazelas
2007-03-21, 03:26(-07), Gamotte:
Merci à tous les deux. Je n'avais pas pensé à lex, c'est une bonne idée. Concernant la réponse de Stéphane, c'est le 'e' de 'eg' qui indique qu'il faut interpréter la chaine de remplacement comme une expression, c'est bien ça ?
Oui, voir perldoc perlop
-- Stéphane
2007-03-21, 03:26(-07), Gamotte:
Merci à tous les deux.
Je n'avais pas pensé à lex, c'est une bonne idée.
Concernant la réponse de Stéphane, c'est le 'e'
de 'eg' qui indique qu'il faut interpréter la chaine de
remplacement comme une expression, c'est bien
ça ?
Merci à tous les deux. Je n'avais pas pensé à lex, c'est une bonne idée. Concernant la réponse de Stéphane, c'est le 'e' de 'eg' qui indique qu'il faut interpréter la chaine de remplacement comme une expression, c'est bien ça ?
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer. [...]
Mauvaise solution (ou excellente solution, suivant le cas).
En faisant ça, tu vas dire à Perl de d'abord convertir une chaîne en nombre double précision IEEE 754 et provoquer une erreur d'arrondi, qui pourra donner un résultat différent. Par exemple:
donne "1.012" au lieu de "1.013". La solution de ne travailler que sur la chaîne en base 10 est la bonne.
Maintenant, si les nombres stockés dans le fichier sont censés être des représentations de nombres en double précision (comme ce qui peut se faire avec le type double de XML, cf XML Schema Part 2), alors au contraire, c'est la bonne solution.
Dans l'article <slrnf00610.849.stephane.chazelas@spam.is.invalid>,
Stephane Chazelas <cette.adresse@est.invalid> écrit:
2007-03-20, 09:19(-07), Gamotte:
[...]
je voudrais remplacer un fichier par le même fichier
dans lequel tous les nombres ont été arrondis à 3
chiffres après la virgule, l'arrondi étant vers le haut
ou le bas selon celui qui est le plus proche.
Le fichier contient du texte et des nombres disséminés
dans le texte. Je ne peux donc pas utiliser un tableur
et recherche donc une solution du type rechercher/remplacer.
[...]
Mauvaise solution (ou excellente solution, suivant le cas).
En faisant ça, tu vas dire à Perl de d'abord convertir une chaîne en
nombre double précision IEEE 754 et provoquer une erreur d'arrondi,
qui pourra donner un résultat différent. Par exemple:
donne "1.012" au lieu de "1.013". La solution de ne travailler que
sur la chaîne en base 10 est la bonne.
Maintenant, si les nombres stockés dans le fichier sont censés être
des représentations de nombres en double précision (comme ce qui
peut se faire avec le type double de XML, cf XML Schema Part 2),
alors au contraire, c'est la bonne solution.
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer. [...]
Mauvaise solution (ou excellente solution, suivant le cas).
En faisant ça, tu vas dire à Perl de d'abord convertir une chaîne en nombre double précision IEEE 754 et provoquer une erreur d'arrondi, qui pourra donner un résultat différent. Par exemple:
donne "1.012" au lieu de "1.013". La solution de ne travailler que sur la chaîne en base 10 est la bonne.
Maintenant, si les nombres stockés dans le fichier sont censés être des représentations de nombres en double précision (comme ce qui peut se faire avec le type double de XML, cf XML Schema Part 2), alors au contraire, c'est la bonne solution.
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer.
Je suis sur que tu auras plein de réponse Perl etc. Je te propose un petit analyseur lexical à la place (c'est printf() qui fait l'arrondi, mais tu pourrais passer à round()) :
Cf ma réponse à Stéphane. Ta solution a le même problème. La solution générale (y compris pour un fichier avec des nombres à plage et à précision arbitraire) la moins complexe est probablement d'utiliser quelques expressions régulières pour traiter tous les cas possibles et faire les transformations. Si la plage des nombres est restreinte (à déterminer...), alors la solution suivante peut convenir:
Dans l'article <87aby7yfxr.fsf@dpt-info.u-strasbg.fr>,
Alain Ketterlin <alain@dpt-info.u-strasbg.fr> écrit:
"Gamotte" <gamotte@hotmail.com> writes:
je voudrais remplacer un fichier par le même fichier dans lequel
tous les nombres ont été arrondis à 3 chiffres après la virgule,
l'arrondi étant vers le haut ou le bas selon celui qui est le plus
proche. Le fichier contient du texte et des nombres disséminés dans
le texte. Je ne peux donc pas utiliser un tableur et recherche donc
une solution du type rechercher/remplacer.
Je suis sur que tu auras plein de réponse Perl etc. Je te propose un
petit analyseur lexical à la place (c'est printf() qui fait l'arrondi,
mais tu pourrais passer à round()) :
Cf ma réponse à Stéphane. Ta solution a le même problème. La solution
générale (y compris pour un fichier avec des nombres à plage et à
précision arbitraire) la moins complexe est probablement d'utiliser
quelques expressions régulières pour traiter tous les cas possibles
et faire les transformations. Si la plage des nombres est restreinte
(à déterminer...), alors la solution suivante peut convenir:
je voudrais remplacer un fichier par le même fichier dans lequel tous les nombres ont été arrondis à 3 chiffres après la virgule, l'arrondi étant vers le haut ou le bas selon celui qui est le plus proche. Le fichier contient du texte et des nombres disséminés dans le texte. Je ne peux donc pas utiliser un tableur et recherche donc une solution du type rechercher/remplacer.
Je suis sur que tu auras plein de réponse Perl etc. Je te propose un petit analyseur lexical à la place (c'est printf() qui fait l'arrondi, mais tu pourrais passer à round()) :
Cf ma réponse à Stéphane. Ta solution a le même problème. La solution générale (y compris pour un fichier avec des nombres à plage et à précision arbitraire) la moins complexe est probablement d'utiliser quelques expressions régulières pour traiter tous les cas possibles et faire les transformations. Si la plage des nombres est restreinte (à déterminer...), alors la solution suivante peut convenir:
Mauvaise solution (ou excellente solution, suivant le cas).
En faisant ça, tu vas dire à Perl de d'abord convertir une chaîne en nombre double précision IEEE 754 et provoquer une erreur d'arrondi, qui pourra donner un résultat différent. Par exemple:
donne "1.012" au lieu de "1.013". La solution de ne travailler que sur la chaîne en base 10 est la bonne.
Maintenant, si les nombres stockés dans le fichier sont censés être des représentations de nombres en double précision (comme ce qui peut se faire avec le type double de XML, cf XML Schema Part 2), alors au contraire, c'est la bonne solution.
Mauvaise solution (ou excellente solution, suivant le cas).
En faisant ça, tu vas dire à Perl de d'abord convertir une chaîne en
nombre double précision IEEE 754 et provoquer une erreur d'arrondi,
qui pourra donner un résultat différent. Par exemple:
donne "1.012" au lieu de "1.013". La solution de ne travailler que
sur la chaîne en base 10 est la bonne.
Maintenant, si les nombres stockés dans le fichier sont censés être
des représentations de nombres en double précision (comme ce qui
peut se faire avec le type double de XML, cf XML Schema Part 2),
alors au contraire, c'est la bonne solution.
Mauvaise solution (ou excellente solution, suivant le cas).
En faisant ça, tu vas dire à Perl de d'abord convertir une chaîne en nombre double précision IEEE 754 et provoquer une erreur d'arrondi, qui pourra donner un résultat différent. Par exemple:
donne "1.012" au lieu de "1.013". La solution de ne travailler que sur la chaîne en base 10 est la bonne.
Maintenant, si les nombres stockés dans le fichier sont censés être des représentations de nombres en double précision (comme ce qui peut se faire avec le type double de XML, cf XML Schema Part 2), alors au contraire, c'est la bonne solution.
en ce cas, on peut faire
perl -pi -e 's/(?<=.)(d{3})(d)d*/$1+($2>=5)/ge'
-- Stéphane
Stephane Chazelas
2007-03-26, 06:33(+00), Stephane Chazelas: [...]
en ce cas, on peut faire
perl -pi -e 's/(?<=.)(d{3})(d)d*/$1+($2>=5)/ge'
D'ailleurs, -0.2345 doit-il etre arrondi en -0.234 or -0.235?