Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   Insertar float en mysql desde csv (http://www.forosdelweb.com/f18/insertar-float-mysql-desde-csv-608720/)

ratamaster 23/07/2008 14:11

Insertar float en mysql desde csv
 
Hola
Estoy tomando valores desde un archivo csv que son insertados en una tabla mysql
Algunos de los valores del csv son int, string, float, etc
Mi problema es con los float.
Los float en el csv son así por ejemplo: 3.470,000, 1.650,520, 276,0003. 470,000, 77,030.
Mi problema son con los 2 primeros, porque tienen " . "

Código PHP:

while (($data fgetcsv($handle1000";")) !== FALSE) {
    if(
$row_count>0){
      foreach(
$data as $key=>$value) {     
              if(
$value == "NULL"){
                  
$data[$key] = "NULL";
              }else{
                if(
$key==0){
            
$numPos=trim($data[0]);//I trim it 
            
$numPos=explode(' ',$numPos);
            for(
$i=0;$i<= count($numPos)-1;$i++){
              while(
$numPos[$i]==''){
                
array_splice($numPos$i,1);
              }
            }
            
$value=implode('.',$numPos);
            
//$index = str_replace('.', "", $value);
          
}
                
$data[$key] = "'" mysql_real_escape_string(trim($value)) . "'";
              }
          }
      
//$rows[$index] = implode(",",$data);
      
$rows[] = implode(",",$data);
        }
        
$row_count++;
    } 


Esto tira como resultado una cadena así: "hola","123","adios", "3.470,000","fin", etc

Yo necesito analizar campo por campo del csv y darme cuenta cuando el valor es por ejemplo 3.470,000, y si encuentro un match, pasarlo a 3470,000

También el valor puede ser algo como: 1.253.456.876.456,00

Lo puedo hacer un una expreción regular?

emiliodeg 23/07/2008 15:11

Respuesta: Insertar float en mysql desde csv
 
number_format

(PHP 4, PHP 5)
number_format — Dar formato a un número con los miles agrupados

Descripción

string number_format ( float $numero [, int $decimales [, string $punto_dec ]], string $sep_miles )
number_format() devuelve una versión con formato de numero . Esta función acepta uno, dos, o cuatro parámetros (no tres):
Si solo se entrega un parámetro, numero recibirá un formato sin decimales, pero con una coma (",") entre cada grupo de miles.
Si se entregan dos parámetros, numero recibirá un formato con la cantidad de decimales dada, con un punto (".") al frente, y una coma (",") entre cada grupo de miles.
Si todos los cuatro parámetros son dados, numero recibirá un formato con la cantidad de decimales dada, punto_dec en lugar de un punto (".") antes de los decimales, y sep_miles en lugar de una coma (",") entre cada grupo de miles.
Sólo el primer caracter de sep_miles es usado. Por ejemplo, si usa bar como sep_miles sobre el número 1000, number_format() devolverá 1b000.

Example #1 Ejemplo de number_format()
Por ejemplo, la notación francesa usa usualmente dos decimales, coma (',') como separador decimal, y espacio (' ') como separador de miles. Esto se puede lograr con esta línea:

<?php

$numero
= 1234.56;

// notación inglesa (predeterminada)
$numero_formato_ingles = number_format($numero);
// 1,235

// notación francesa
$numero_formato_frances = number_format($numero, 2, ',', ' ');
// 1 234,56

$numero = 1234.5678;

// notación inglesa sin separador de miles
$numero_formato_ingles = number_format($numero, 2, '.', '');
// 1234.57

?>



Vea también: money_format(), sprintf(), printf() y sscanf().

ratamaster 23/07/2008 16:47

Respuesta: Insertar float en mysql desde csv
 
Creo que eso no me sirve:
Mi numero ya está agrupado en miles: 2.310,730
Lo que hace esta función es agruparlo en miles y definir separadores.
Yo quiero que el número pase a 2310,730, o sea que es todo lo contrario.
Pero antes de pasarlo, el código se tiene que dar cuenta si parsear el valor o no, porque puede haber otros valores como "pepe" en el csv.

Gracias

LoveMeNot 23/07/2008 17:30

Respuesta: Insertar float en mysql desde csv
 
Código PHP:

$numero "3.762.793,123";
if (
preg_match('#([0-9]+\.)*[0-9]+,[0-9]+#',$numero)) { //Comprobamos que está en el formato correcto
    
$numero str_replace('.','',$numero); //Eliminamos los puntos
    
echo $numero//Y ya está :)



ratamaster 23/07/2008 17:53

Respuesta: Insertar float en mysql desde csv
 
Muchas gracias LoveMeNot, funcionó como quería!!! :)


La zona horaria es GMT -6. Ahora son las 06:29.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.