Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 05/07/2011, 12h27   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 73
Points : 14
Points : 14
Par défaut Integer et Is_int.

Salut à tous,

Je rencontre un petit problème pour reconnaitre si les valeurs que je traite sont bien des integer (entier).

Je détaille : Je suis entrain de coder une interface web. Dans l'application, je demande à l'utilisateur d'uploader son fichier texte avec ses données à l'intérieur. Il doit s'agir en vérité d'une matrice contenu dans ce fichier.

Exemple:M=[235 4564 0 456
345 494 345 34
948 456 0 596]
Jusque là tout va bien.

Je vérifie ensuite, pour chaque valeur dans mon fichier texte, si il s'agit bien d'un entier :

Code :
if ( is_int($tab[$i])){
(j'ai effectué d'autres traitement avant (comme recopier les valeurs du fichiers dans un tableau, le mélanger, mais rien qui ne modifie les valeurs des données).
Et c'est là que commence le problème :

Si je remplace une valeur du tableau par une lettre,ça passe (par exemple M[1][1]=a).En revanche, si je remplace cette même valeur par (M[1][1]=2a5), il me considére cela comme un entier...
J'ai essayer de mettre (int) devant chaque valeur pour le transtypage... mais il me reconnait tout comme un integer.

Si jamais vous avez une idée, je vous remercie d'avance !
Delack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 13h06   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Si je remplace une valeur du tableau par une lettre,ça passe (par exemple M[1][1]=a).En revanche, si je remplace cette même valeur par (M[1][1]=2a5), il me considére cela comme un entier...
Voilà qui est étrange car:
Code :
1
2
$a = '2a5';
var_dump(is_int($a)); // false
Citation:
J'ai essayer de mettre (int) devant chaque valeur pour le transtypage... mais il me reconnait tout comme un integer.
Tu t'attendais à quoi

Tu es sûr que ton problème se situe effectivement au niveau du is_int ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 15h20   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 73
Points : 14
Points : 14
J'en suis presque sur oui.

J'ai testé avec is_numeric. Maintenant j'ai un soucis avec la dernière valeur de chaque ligne dans mon fichier texte car il me dit que ce n'est pas un numérique. Enfaite j'ai vu qu'il y avait un soucis si il y avait un espace après le chiffre (car c'est considéré comme une chaine de caractère et plus un chiffre ou une valeur apparemment).

Je ne sais pas quel fonction permet d'ignorer le vide d'une fin de ligne dans un fichier (car à chaque fois c'est la dernière valeur de la ligne qui pose problème).

Merci d'avance !

PS : mes valeurs sont stockés dans un tableau avec la fonction file :

Code :
$matrice=file("./upload/matrice.txt");
je me dis que normalement... ce problème ne dois pas arriver... mais peut-être qu'il garde un petit espace à la fin... bref, c'est bizarre
Delack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 15h45   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Utilise trim pour enlever les caractères d'espacement en début et fin de chaines.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 16h03   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 73
Points : 14
Points : 14
De cette façon ?
Code :
if (trim(is_numeric($tab[$i]))){
Si c'est le cas, cela ne marche pas, pourtant j'ai toujours la meme erreur, je met la 1ere ligne de mon fichier, ainsi que le bout de code qui permet de faire le test avec l'erreur générée, surement que cela sera plus simple.

Valeurs de la ligne 1 uniquement, 2290 apparait à la fin. (140 en tout):
Code :
2636	2241	2725	1971	2555	2319	2491	2457	1975	2288	2122	0	2550	2166	0	2294	2003	2290	0	2403	0	2070	2183	2270	2032	0	2043	1746	2504	2841	2125	2372	1936	0	0	2165	3368	2064	0	1880	1842	0	1857	2067	2752	0	2061	1969	2271	2502	2359	1918	2649	2550	1953	2491	2320	2170	0	2930	2246	2120	2110	1729	1973	2310	1811	2462	2254	2226	3208	1907	0	1748	1908	1996	1998	0	2035	0	2266	1981	1826	3631	2706	2555	2595	2853	2082	2581	2264	2643	2273	0	2306	2639	2493	2818	2573	0	0	2738	2176	0	2273	3253	3006	2568	0	2699	2763	0	2473	2402	2305	2404	2257	2930	2526	2184	2509	0	1955	2078	0	2235	2625	2443	2186	2064	2559	2251	2118	2600	2281	2538	3332	2854	0	2290
Code:
Code :
1
2
3
4
5
6
7
8
9
 
if (trim(is_numeric($tab[$i]))){
	if($tab[$i]!=0 ){
		$moyenneG1=$moyenneG1+$tab[$i];
	};	
}else{
	echo "$tab[$i]<p>";
	exit("Erreur de calcul : ".$tab[$i]." n'est pas une valeur numérique.");
};
Message d'erreur :
Code :
1
2
3
2290
 
Erreur de calcul : 2290 n est pas une valeur numérique
Delack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 16h43   #6
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 806
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 806
Points : 1 520
Points : 1 520
Code php :
if (is_numeric(trim($tab[$i]))){
Ou plus proprement et une bonne fois pour toute :
Code php :
1
2
foreach($tab as $k => $v)
  $tab[$k] = trim($v);
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 14h45   #7
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 73
Points : 14
Points : 14
Merci bcp pour votre aide !
Il s'agissait bien d'un problème d'espace finalement.
Delack est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h32.


 
 
 
 
Partenaires

Hébergement Web