Retroceder   Foros del Web > Programación para sitios web > PHP

Respuesta
 
Herramientas Desplegado
Antiguo 23-jul-2008, 14:11   #1 (permalink)
ratamaster está en el buen camino
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 348
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
ratamaster está desconectado   Responder Citando
Antiguo 23-jul-2008, 15:11   #2 (permalink)
emiliodeg tiene algunos puntos positivos de karma
 
Avatar de emiliodeg
 
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 934
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
mi neurona
emiliodeg está desconectado   Responder Citando
Antiguo 23-jul-2008, 16:47   #3 (permalink)
ratamaster está en el buen camino
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 348
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
ratamaster está desconectado   Responder Citando
Antiguo 23-jul-2008, 17:30   #4 (permalink)
LoveMeNot ha deshabilitado el karma
 
Fecha de Ingreso: julio-2008
Mensajes: 42
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á :)

LoveMeNot está desconectado   Responder Citando
Antiguo 23-jul-2008, 17:53   #5 (permalink)
ratamaster está en el buen camino
 
Fecha de Ingreso: octubre-2004
Ubicación: En algún lugar de la República Oriental del Uruguay
Mensajes: 348
Respuesta: Insertar float en mysql desde csv

Muchas gracias LoveMeNot, funcionó como quería!!! :)
__________________
ratamaster
ratamaster está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 08:48.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

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