IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[CSV] Données décimales venant d'un fichier csv


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut [CSV] Données décimales venant d'un fichier csv
    Bonjour,

    J'ai une liste d'article avec des prix (en decimal) dans un fichier csv que je transforme dans un tableau a deux dimensions.
    Quand j'affiche les valeurs j'ai bien mon prix de type 8,5 sans probleme.
    echo $tab[x][8];
    par contre si je fais :
    echo $tab[x][8]*2;
    J'obtiens la valeur 16 au lieu de 8,5 * 2 = 17

    Voila mon pb et je comprend pas.
    Voici ma classe de transformation. Je passe systematiquement par la fonction getTableauFiltrer($col,$val) pour afficher mes varticles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    class fichierTableau {
     
    	private $fichier;  		// true si fichier existe listearticle.csv
    	private $tabLigne;  // tableau contenant les lignes du fichier
    	private $tableau;	// tableau à deux dimension contenant tous les articles
    	private $contenu_fichier;
    	private $nbCol;		// nombre de colonne
    	private $nbLig;		// nombre de lignes
     
    	function fichierTableau() {
    		$this->fichier = false;
    		$this->tableau = array();
    		$this->tabligne = array();
    		$this->contenu_fichier = "vide";
    		if(file_exists("panier/listearticles.csv")) {
    			$this->fichier=true;
    			$this->tabLigne = file('panier/listearticles.csv'); //Place le contenu du fichier dans un tableau
     
    			 if(is_array($this->tabLigne)) //Si la variable $tabLigne est bien un tableau, on peut continuer
    			 {
    				  $this->contenu_fichier = '';
    				  $li=1;
    				  foreach($this->tabLigne AS $ligne) {		
     
    						if($li>0) {
    							$data = explode(";",$ligne);
    							$this->nbCol = count($data);
    							for($col=0;$col<count($data);$col++) {
    							$this->tableau[$li-1][$col] = $data[$col];
    							}// Fin $li
     
    						$this->contenu_fichier .= $this->tableau[$li-1][0]."<br>";
    				   $li=$li+1;
    				   }  // Fin foreach
     
     
    			  } // Fin is array
    			  $this->nbLig = $li - 1;
    		} // Fin file exist
     
     
    		}
    		else {
    			$this->fichier=false;
    			$this->tabLigne = null;
    			$this->contenu_fichier.="Fichier introuvale";
    		}
    	}
     
    	function destroy() {
    		unset ($this->tabLigne);
    		unset ($this->contenu_fichier);
    		unset ($this->fichier);
    		unset ($this->tableau);
    	}
     
    	function getInit() {
    		return $this->fichier;
    	}
     
    	function getContenu() {
    		return $this->contenu_fichier;
    	}
     
    	function getTableau() {
    		return $this->tableau;
    	}
     
    	function getNbCol() {
    		return $this->nbCol;
    	}
     
    	function getNbLig() {
    		return $this->nbLig;
    	}
    	function getTableauFiltrer($col,$val) {
    	$tf = array();
    	$xx=0;
    		for($x=0;$x<$this->getNbLig();$x++) {
    			if($this->tableau[$x][10]==1) {
    				if($this->tableau[$x][$col]==$val) {
    					for($y=0;$y<$this->getNbCol();$y++) {
    						$tf[$xx][$y]=$this->tableau[$x][$y];
    					}
    					$xx = $xx + 1;
    				}
    			}
    		}
     
     
    		return $tf;
    	}
     
     
    }
    Merci d'avance de votre aide.
    Nicolas

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    fait la multiplication par 2.0 au lieu de 2 si tu veux récupérer un nombre réel
    ou au moins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat = $mavaleur * ((float) 2);

  3. #3
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Bonjour
    et merci de cette reponse
    Toutefois j'avais essayer avec 2.0 cela ne fonctionnait pas et je viens de faire le test avec ((float)2) et malheureusement cela ne fonctionne pas non plus.
    Tous les décimaux sont tronqué a leur partie entiere.
    Une autre idée ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Le séparateur au niveau de la partie décimale n'est pas la virgule mais le point. Dans le premier cas PHP considèrera le nombre comme étant une chaîne et s'arrêtera au premier caractère invalide (la virgule) donc vous aurez pour résultat 18 pour 18,251.

    Est-ce votre cas ?

  5. #5
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Ca marche !!!!!


    En fait le pb venait du fichier csv dans lequel j'ai remplacé les , par des . en ajoutant (float) dans les formules de calcul, ca roule !!!

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/10/2012, 11h23
  2. [Toutes versions] Ouverture et mise en forme de données en provenance d'un fichier CSV
    Par chachon dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/02/2011, 01h32
  3. [CSV] Ajout/fusion de valeurs de fichiers csv
    Par dcanl dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2007, 09h51
  4. [CSV] probleme d'affiche d'un fichier CSV
    Par Akramweb dans le forum Langage
    Réponses: 1
    Dernier message: 15/11/2006, 16h28
  5. [CSV] Détecter le séparateur pour les fichiers CSV
    Par JavaEli dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2005, 23h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo