Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/09/2007, 16h56   #1
Invité régulier
 
Inscription : décembre 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 30
Points : 6
Points : 6
Par défaut Formatter un string

Bonjour à tous,

Étant au travail, je ne peux vous présenter mon code mais voici, mon problème est fort simple :

Je lis un fichier texte et le converti en String avec file_get_contents. Je parse ensuite la String pour trouver ce que je cherche, à savoir un montant d'argent formatté du genre 134 456 732.

Je tiens ensuite à retirer les espaces blancs de ce nombre, question de le convertir ensuite en int pour m'en servir dans une addition (il est en effet impossible d'additioner un nombre possédant des espaces. L'addition ne tient alors compte que des chiffres situés avant le premier espace, à savoir ici 134)

J'ai fait l'output de mes variables et tout est ok. L'output du résultat de mon parse donne bien 134 456 732 donc jusqu'à ce que je tente de retirer les espaces, c'est bon.

Seulement voilà, j'ai tout essayé et rien à faire, une fonction du genre str_replace(" ",'',$string) ne fonctionne pas!!!

Encore plus étrange :

Code :
1
2
3
4
 
$string = "123 456 788";
$test = str_replace(" ",'',$string);
echo $test;
Ceci fonctionne à merveille : 123456788

Merci d'avance pour vos suggestions.
hudony est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h02   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Il nous faudra malheureusement ton code (voir plus d'explications) parce que si tu utilises exactement la meme instruction pour remplacer les espaces entre ta variable parsée et la variable codée en dur là il n'y a aucune raison que ca ne marche pas.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h04   #3
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Tu es sur que c'est bien un caractere espace et non un truc a la con ?

Essai en fesant un
echo urlencode($string);

PS : les espaces doivent se transformer en %20 pas en autre chose.
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h14   #4
Invité régulier
 
Inscription : décembre 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 30
Points : 6
Points : 6
Citation:
Envoyé par chaced Voir le message
Tu es sur que c'est bien un caractere espace et non un truc a la con ?

Essai en fesant un
echo urlencode($string);

PS : les espaces doivent se transformer en %20 pas en autre chose.
En fait, mon fichier en est un .html donc oui, ca doit être des %20, pas le choix.
hudony est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h35   #5
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
Code :
1
2
3
$string = "123 456 788";
$test = str_replace("\s","",$string);
echo $test;
et ceci ?
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h43   #6
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Sinon méthode bourrin

Code :
1
2
 
$str=preg_replace('@([^0-9])@','',$str);
Pour ceux qui ne lisent pas les regexp, ça vire simplement tout ce qui n'est pas un chiffre.
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h43   #7
Invité régulier
 
Inscription : décembre 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 30
Points : 6
Points : 6
Citation:
Envoyé par RideKick Voir le message
Code :
1
2
3
$string = "123 456 788";
$test = str_replace("\s","",$string);
echo $test;
et ceci ?
En fait, avec une variable dur, ca va sans doute marcher mais j'avoue ne pas l'avoir essayé avec ma variable parsée.

Merci du conseil, voilà une piste de solution possible.

Tel que dit précédemment, mon fichier est de type html.

Je me pose la question : dois-je chercher les espaces en tant que " " ou alors en tant que "%20" ?

Citation:
Envoyé par chaced Voir le message
Sinon méthode bourrin

Code :
1
2
 
$str=preg_replace('@([^0-9])@','',$str);
Pour ceux qui ne lisent pas les regexp, ça vire simplement tout ce qui n'est pas un chiffre.

Merci, je devrai aussi regarder ça.
hudony est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h50   #8
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
en tant que "\s" car tu lis ton fichier avec file_get_contents() , tu prends donc le contenu et non l interpretation du fichier (donc que ton fichier soit html ou non , aucune difference -> %20 est Hors sujet)
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h52   #9
Invité régulier
 
Inscription : décembre 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 30
Points : 6
Points : 6
Citation:
Envoyé par RideKick Voir le message
en tant que "\s" car tu lis ton fichier avec file_get_contents() , tu prends donc le contenu et non l interpretation du fichier (donc que ton fichier soit html ou non , aucune difference -> %20 est Hors sujet)
dac, c'est ce je croyais.
hudony est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h52   #10
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Citation:
Envoyé par RideKick Voir le message
en tant que "\s" car tu lis ton fichier avec file_get_contents() , tu prends donc le contenu et non l interpretation du fichier (donc que ton fichier soit html ou non , aucune difference -> %20 est Hors sujet)
Le %20 c'etait juste pour voir si c'etait un vrai espace et pas un caractere a la noix genre un char 255... (qui ressemble a un espace mais n'en est pas un).
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 18h42   #11
Invité régulier
 
Inscription : décembre 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 30
Points : 6
Points : 6
Je vais tenter les quelques propositions soumises ici et si ca ne fonctionne toujours pas, je reviendrai avec mon code demain.
hudony est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 18h45   #12
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par RideKick Voir le message
Code :
1
2
3
$string = "123 456 788";
$test = str_replace("\s","",$string);
echo $test;
et ceci ?
\s ne fonctionnera pas avec les fonctions POSIX (ereg*). Cette "extension" est une fonctionnalité des fonctions PCRE (preg_*) - ces dernières étant, par la même occasion, recommandées aux premières.

Citation:
Envoyé par chaced Voir le message
Sinon méthode bourrin

Code :
1
2
 
$str=preg_replace('@([^0-9])@','',$str);
Pour ceux qui ne lisent pas les regexp, ça vire simplement tout ce qui n'est pas un chiffre.
Oui mais admettons qu'il y est 10 nombres dans le document, suivant la forme donnée plus tôt, au final il n'en restera qu'un seul (en ignorant le format précis ce ne sont que des spéculations)

Code :
1
2
3
4
5
6
7
<?php
$string = strip_tags(file_get_contents('http://www.developpez.net/forums/showthread.php?t=412941'));
$numbers = preg_match_all('~\d+\s*+~', $string, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
    echo $m[0] . '<br/>';
}
echo $string;
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 09h47   #13
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Suivant son explication j'en ai déduis qu'il avait fait un traitement au préalable pour séparer ces nombres
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h52.


 
 
 
 
Partenaires

Hébergement Web