Bonjour,
Pb avec cette petite routine (j'ai laissé les commentaires pour mieux de
compréhension).
ALGO: Lecture d'un caractère,
si ce caractère est un espace et si le caractère précédent est un chiffre
et si le 3ème caractère précédent n'est pas une virgule,
alors supprimer ce caractère.
Retourner la chaîne corrigée
Je dois obtenir la même chaine avec suppression des espaces des mille:
$ligne2 = "abc 6221,26 1343,25 F";
<?php
$ligne = "abc 6 221,26 1 343,25 F";
$ligne2 = "";
$nb_car = strlen($ligne);
echo "<B>AVANT: </B><BR> $ligne<BR>";
echo "Nbe de caractères de la ligne AVANT: ", $nb_car, "<BR>";
echo "\$ligne (dans boucle for)= <BR>";
for ($i=0; $i <= ($nb_car-1); $i++) {
$car = $ligne[$i]; //parcours la ligne pas à pas
echo $car; //réaffiche pas à pas la ligne d'origine
//le test n'est nécessaire qu'à partir du 4ème car de la ligne
if ($i > 3) { //pour pouvoir tester le car $i-3
//si le car lu courant est un espace
// et le car précédent est un chiffre
// et si le 3e car précédent n'est pas une virgule
if (($car = " ") && (is_numeric($ligne[$i-1])) && ($ligne[$i-3] != ","))
{
//$ligne2 .= chr(0); //alors on n'ajoute rien à $ligne2
} else {
//on garde le car lu courant
$ligne2 .= $car;
}
} else {
//$i<=3 : on garde le car lu courant
$ligne2 .= $car;
}
}
$nb_car2 = strlen($ligne2);
echo "<BR>Nbe de caractères APRES: ", $nb_car2, "<BR>";
echo "APRES= <BR>$ligne2";
?>
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
Le 29/04/2010 23:29, jef80 a écrit :
Bonjour, Pb avec cette petite routine (j'ai laissé les commentaires pour mieux de compréhension).
ALGO: Lecture d'un caractère, si ce caractère est un espace et si le caractère précédent est un chiffre et si le 3ème caractère précédent n'est pas une virgule, alors supprimer ce caractère. Retourner la chaîne corrigée
Explication : '(?<=d)' = assertion qu'il y a un chiffre avant '(?<!,..)' = assertion que le premier des trois caractères précédents n'est pas une virgule ' ' = espace '' = remplacer (l'espace) par rien.
Note que cette expression, directement traduite de ta demande, a un petit défaut dans le cas où le nombre suit un mot avec virgule est commence par un seul chiffre :
"Ah, 3 000,00 F !" (l'espace après le 3 ne sera pas supprimée)
En revanche, la regexp suivante fonctionne mieux dans ce cas :
En effet, sachant qu'il faut un chiffre avant l'espace, on refuse que ce chiffre soit précédé d'une virgule *et d'un autre chiffre*.
Je dois obtenir la même chaine avec suppression des espaces des mille: $ligne2 = "abc 6221,26 1343,25 F";
<?php $ligne = "abc 6 221,26 1 343,25 F";
Ok, ça marche.
Si vous avez un peu de temps ?
Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Cordialement, -- Olivier Miakinen
Le 29/04/2010 23:29, jef80 a écrit :
Bonjour,
Pb avec cette petite routine (j'ai laissé les commentaires pour mieux de
compréhension).
ALGO: Lecture d'un caractère,
si ce caractère est un espace et si le caractère précédent est un chiffre
et si le 3ème caractère précédent n'est pas une virgule,
alors supprimer ce caractère.
Retourner la chaîne corrigée
Explication :
'(?<=d)' = assertion qu'il y a un chiffre avant
'(?<!,..)' = assertion que le premier des trois caractères précédents
n'est pas une virgule
' ' = espace
'' = remplacer (l'espace) par rien.
Note que cette expression, directement traduite de ta demande, a un
petit défaut dans le cas où le nombre suit un mot avec virgule est
commence par un seul chiffre :
"Ah, 3 000,00 F !" (l'espace après le 3 ne sera pas supprimée)
En revanche, la regexp suivante fonctionne mieux dans ce cas :
Bonjour, Pb avec cette petite routine (j'ai laissé les commentaires pour mieux de compréhension).
ALGO: Lecture d'un caractère, si ce caractère est un espace et si le caractère précédent est un chiffre et si le 3ème caractère précédent n'est pas une virgule, alors supprimer ce caractère. Retourner la chaîne corrigée
Explication : '(?<=d)' = assertion qu'il y a un chiffre avant '(?<!,..)' = assertion que le premier des trois caractères précédents n'est pas une virgule ' ' = espace '' = remplacer (l'espace) par rien.
Note que cette expression, directement traduite de ta demande, a un petit défaut dans le cas où le nombre suit un mot avec virgule est commence par un seul chiffre :
"Ah, 3 000,00 F !" (l'espace après le 3 ne sera pas supprimée)
En revanche, la regexp suivante fonctionne mieux dans ce cas :
En effet, sachant qu'il faut un chiffre avant l'espace, on refuse que ce chiffre soit précédé d'une virgule *et d'un autre chiffre*.
Je dois obtenir la même chaine avec suppression des espaces des mille: $ligne2 = "abc 6221,26 1343,25 F";
<?php $ligne = "abc 6 221,26 1 343,25 F";
Ok, ça marche.
Si vous avez un peu de temps ?
Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Cordialement, -- Olivier Miakinen
Olivier Miakinen
Bonjour,
Le 01/05/2010 23:49, jef80 m'a répondu en privé :
Petite erreur d'aiguillage, j'ai reçu ta réponse dans ma bàl et pas dans le groupe.
> Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Merci Olivier, Mais il me faut comprendre la logique des Expressions rationnelles pour employer les fonctions PCRE (preg_xxx). Le sujet a l'air d'être assez étendu.
En ce qui concerne les expressions rationnelles, en effet le sujet est étendu mais ça vaut le coup de s'y mettre : il n'y a qu'à voir comment j'ai remplacé ton script d'une vingtaine de lignes (trente avec les traces) par un seul appel de fonction.
Pour info, je te signale l'existence d'un groupe de discussions consacré exclusivement aux regexp : <news:fr.comp.lang.regexp>.
Cordialement, -- Olivier Miakinen
Bonjour,
Le 01/05/2010 23:49, jef80 m'a répondu en privé :
Petite erreur d'aiguillage, j'ai reçu ta réponse dans ma bàl et pas dans
le groupe.
> Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Merci Olivier,
Mais il me faut comprendre la logique des Expressions rationnelles pour
employer les fonctions PCRE (preg_xxx). Le sujet a l'air d'être assez
étendu.
En ce qui concerne les expressions rationnelles, en effet le sujet est
étendu mais ça vaut le coup de s'y mettre : il n'y a qu'à voir comment
j'ai remplacé ton script d'une vingtaine de lignes (trente avec les
traces) par un seul appel de fonction.
Pour info, je te signale l'existence d'un groupe de discussions consacré
exclusivement aux regexp : <news:fr.comp.lang.regexp>.
Petite erreur d'aiguillage, j'ai reçu ta réponse dans ma bàl et pas dans le groupe.
> Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Merci Olivier, Mais il me faut comprendre la logique des Expressions rationnelles pour employer les fonctions PCRE (preg_xxx). Le sujet a l'air d'être assez étendu.
En ce qui concerne les expressions rationnelles, en effet le sujet est étendu mais ça vaut le coup de s'y mettre : il n'y a qu'à voir comment j'ai remplacé ton script d'une vingtaine de lignes (trente avec les traces) par un seul appel de fonction.
Pour info, je te signale l'existence d'un groupe de discussions consacré exclusivement aux regexp : <news:fr.comp.lang.regexp>.
Cordialement, -- Olivier Miakinen
jef80
"Olivier Miakinen" <om+ a écrit dans le message de news: 4bde7385$
Bonjour,
Le 01/05/2010 23:49, jef80 m'a répondu en privé :
Petite erreur d'aiguillage, j'ai reçu ta réponse dans ma bàl et pas dans le groupe.
> Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Merci Olivier, Mais il me faut comprendre la logique des Expressions rationnelles pour employer les fonctions PCRE (preg_xxx). Le sujet a l'air d'être assez étendu.
En ce qui concerne les expressions rationnelles, en effet le sujet est étendu mais ça vaut le coup de s'y mettre : il n'y a qu'à voir comment j'ai remplacé ton script d'une vingtaine de lignes (trente avec les traces) par un seul appel de fonction.
Pour info, je te signale l'existence d'un groupe de discussions consacré exclusivement aux regexp : <news:fr.comp.lang.regexp>.
Cordialement, -- Olivier Miakinen
Pour l'instant j'ai réalisé (rapidement) ce programme sous mon vieux Delphi; en attendu de maîtriser la logique des expressions rationnelles sous PHP. Merci pour l'indication du serveur de news sur le sujet. Cordialement jf .
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news:
4bde7385$1@meta.neottia.net...
Bonjour,
Le 01/05/2010 23:49, jef80 m'a répondu en privé :
Petite erreur d'aiguillage, j'ai reçu ta réponse dans ma bàl et pas dans
le groupe.
> Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Merci Olivier,
Mais il me faut comprendre la logique des Expressions rationnelles pour
employer les fonctions PCRE (preg_xxx). Le sujet a l'air d'être assez
étendu.
En ce qui concerne les expressions rationnelles, en effet le sujet est
étendu mais ça vaut le coup de s'y mettre : il n'y a qu'à voir comment
j'ai remplacé ton script d'une vingtaine de lignes (trente avec les
traces) par un seul appel de fonction.
Pour info, je te signale l'existence d'un groupe de discussions consacré
exclusivement aux regexp : <news:fr.comp.lang.regexp>.
Cordialement,
--
Olivier Miakinen
Pour l'instant j'ai réalisé (rapidement) ce programme sous mon vieux Delphi;
en attendu de maîtriser la logique des expressions rationnelles sous PHP.
Merci pour l'indication du serveur de news sur le sujet.
Cordialement
jf .
"Olivier Miakinen" <om+ a écrit dans le message de news: 4bde7385$
Bonjour,
Le 01/05/2010 23:49, jef80 m'a répondu en privé :
Petite erreur d'aiguillage, j'ai reçu ta réponse dans ma bàl et pas dans le groupe.
> Si tu as un peu de temps toi-même : <http://fr.php.net/pcre>.
Merci Olivier, Mais il me faut comprendre la logique des Expressions rationnelles pour employer les fonctions PCRE (preg_xxx). Le sujet a l'air d'être assez étendu.
En ce qui concerne les expressions rationnelles, en effet le sujet est étendu mais ça vaut le coup de s'y mettre : il n'y a qu'à voir comment j'ai remplacé ton script d'une vingtaine de lignes (trente avec les traces) par un seul appel de fonction.
Pour info, je te signale l'existence d'un groupe de discussions consacré exclusivement aux regexp : <news:fr.comp.lang.regexp>.
Cordialement, -- Olivier Miakinen
Pour l'instant j'ai réalisé (rapidement) ce programme sous mon vieux Delphi; en attendu de maîtriser la logique des expressions rationnelles sous PHP. Merci pour l'indication du serveur de news sur le sujet. Cordialement jf .