Foros del Web » Programando para Internet » PHP »

Insertar float en mysql desde csv

Estas en el tema de Insertar float en mysql desde csv en el foro de PHP en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 23/07/2008, 15:11
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 15 años, 2 meses
Puntos: 0
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?
__________________
ratamaster
  #2 (permalink)  
Antiguo 23/07/2008, 16:11
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 14 años, 4 meses
Puntos: 55
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().
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 23/07/2008, 17:47
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 15 años, 2 meses
Puntos: 0
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
__________________
ratamaster
  #4 (permalink)  
Antiguo 23/07/2008, 18:30
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 11 años, 6 meses
Puntos: 2
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á :)

  #5 (permalink)  
Antiguo 23/07/2008, 18:53
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 366
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Insertar float en mysql desde csv

Muchas gracias LoveMeNot, funcionó como quería!!! :)
__________________
ratamaster
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:28.