Foros del Web » Programando para Internet » PHP »

Problema al reemplazar caracter de archivo CSV

Estas en el tema de Problema al reemplazar caracter de archivo CSV en el foro de PHP en Foros del Web. Hola! Estoy trabajando con un .csv. Lo abro con php y estoy intentando reemplazar los espacios que separan los mails con una , El tema ...
  #1 (permalink)  
Antiguo 31/10/2012, 06:56
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Problema al reemplazar caracter de archivo CSV

Hola!
Estoy trabajando con un .csv. Lo abro con php y estoy intentando reemplazar los espacios que separan los mails con una , El tema es que el espacio no lo reemplaza pero si pruebo con el @ si. Qué estoy haciendo mal?.

La cadena que me tira el php es
[email protected] [email protected] [email protected]
y necesito que quede:
[email protected],[email protected],[email protected]

Código PHP:
<?php
fgetcsv_PHP
();
function 
fgetcsv_PHP()
{
    if ((
$handle fopen("archivos/18_05_24lista.csv""r")) !== FALSE)
    {
        
$length 1000;
        
$delimiter "|";

        while ( ( 
$data fgetcsv$handle$length$delimiter ) ) !== FALSE )
        {
            
$num count($data);
            for (
$c=0$c $num$c++)
            {
                
$cadena $data[$c];
                
$cadena_final str_replace(' ',',',$cadena);  
                echo 
$cadena_final;
            }
        }
        
fclose($handle);
    }
}
?>
Gracias!,
Saludos
Daniela.
  #2 (permalink)  
Antiguo 31/10/2012, 07:41
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

Puede ser que en vez de espacios sean tabulados los que estan separando los mails en el CSV. Proba así:

$cadena_final = str_replace("/t",",",$cadena);

ó

$cadena_final = str_replace("\x09",",",$cadena);

Donde "/t" ó "\x09" es el codigo de tabulacion, entonces cuando encuentre espacios tabulados lo reemplazará con ",".

Nota: Usa comillas dobles, no simples.
  #3 (permalink)  
Antiguo 31/10/2012, 07:45
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema al reemplazar caracter de archivo CSV

Intente con las 2 opciones que pusiste grassofabian pero nada, siguen los "espacios" ahí =(, no se me ocurre que hacer.
Necesito los mails separados por , para mandarlos con phpmailer.

Alguna otra idea?.
  #4 (permalink)  
Antiguo 31/10/2012, 07:50
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

Entonces, estas segura que el espacio entre mails es uno solo o son mas, porque si estan separados por mas de un espacio por ejemplo por 2, entonces " " no va a funcionar, seria en este caso " ".
  #5 (permalink)  
Antiguo 31/10/2012, 07:55
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

proba sacando la linea $cadena_final = str_replace(' ',',',$cadena);

y reemplazala por

$cadena_final = explode(" ",$cadena);

Donde $cadena_final va a ser un Array que va a contener los mails separados en cada indice,
ejemplo:

$cadena_final[0] ->[email protected]
$cadena_final[1] ->[email protected]
$cadena_final[2] ->[email protected]
...

Con esto quiero verificar si los espacios en blanco fueron detectados por explode.
Es simplemente un testeo.
  #6 (permalink)  
Antiguo 31/10/2012, 08:00
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema al reemplazar caracter de archivo CSV

Ahí probé haciendo lo del explode pero solo me devuelve la palabra Array.
Intente con $cadena_final = explode(" ",$cadena); y con $cadena_final = explode(" ",$data[$c]); que era mi array inicialmente pero nada =(

Quizas sea porque me parece que esto me mete en una sola posición del array todos los mails juntos?
  #7 (permalink)  
Antiguo 31/10/2012, 11:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

Si explode te mete en un mismo indice todos los mails entonces el problema es que no encuentra los espacios en blanco.
  #8 (permalink)  
Antiguo 31/10/2012, 11:32
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema al reemplazar caracter de archivo CSV

Descubrí que en el csv si los mails están puestos uno al lado del otro si me los separa por coma, pero si están uno abajo del otro ahí solo pone los espacios.
O sea que el código me está separando por coma los datos de las filas, pero no de las columnas.

Por qué puede ser?
  #9 (permalink)  
Antiguo 31/10/2012, 11:35
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

postea parte del csv para ver como esta construido.
  #10 (permalink)  
Antiguo 31/10/2012, 11:39
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema al reemplazar caracter de archivo CSV

El csv es solo una columna con un mail en cada fila.
O sea:
[email protected]
[email protected]
[email protected]
[email protected]
Si en el csv hay 1 mail por columna si que lo separa por coma.

Es como que junta todos los datos de una columna y los mete en 1 sola posicion del array. Cada posición lo conforma una columna.
  #11 (permalink)  
Antiguo 31/10/2012, 12:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

Proba Así:

El codigo quedaría:

Código PHP:
$length 1000;

        while ( ( 
$data fgetcsv$handle$length) ) !== FALSE )
        {
            
$num count($data);
            for (
$c=0$c $num$c++)
            {
                
$cadena_final $cadena_final.$data[$c].",";
            }
        }
        
fclose($handle);
        echo 
$cadena_final
  #12 (permalink)  
Antiguo 31/10/2012, 12:09
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema al reemplazar caracter de archivo CSV

Ahí probé con ese código pero lo que me hizo fue ponerme una como al final de todos los mails.
Me quedo así:
[email protected] [email protected] [email protected],

Estamos más cerca igual, no? :D
Gracias por toda la atención grassofabian
  #13 (permalink)  
Antiguo 31/10/2012, 12:18
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

El tema entonces es que en el indice 0 del array te guarda todos los mails separados por un espacio, por lo tanto hace esto:
Proba así entonces:

Código PHP:
$length 1000;

        while ( ( 
$data fgetcsv$handle$length) ) !== FALSE )
        {
            
$cadena_final=str_replace(' ',',',$datä[0]);
        }
        
fclose($handle);
        echo 
$cadena_final

Última edición por grassofabian; 31/10/2012 a las 12:35
  #14 (permalink)  
Antiguo 01/11/2012, 06:15
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema al reemplazar caracter de archivo CSV

Nada, siguen los espacios ahí =(
Disculpa tantas molestias..

Se te ocurre alguna otra cosa?.
Gracias.
  #15 (permalink)  
Antiguo 01/11/2012, 07:00
 
Fecha de Ingreso: noviembre-2010
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Problema al reemplazar caracter de archivo CSV

Bueno intentemos con este codigo:

Código PHP:
function fgetcsv_PHP()
{
    if ((
$handle fopen("archivos/18_05_24lista.csv""r")) !== FALSE)
    {
        
$length 1000;
        
$delimiter "/n"//si no finciona proba con "\n"

        
while ( ( $data fgetcsv$handle$length$delimiter ) ) !== FALSE )
        {
            
$num count($data);
            for (
$c=0$c $num$c++)
            {
                if (
$c==($num-1)) {
                      
$cadena_final .= $data[$c];
                }
                else {
                      
$cadena_final .= $data[$c].',';
                }
            }
        }
        
fclose($handle);
        echo 
$cadena_final;
    }

  #16 (permalink)  
Antiguo 01/11/2012, 07:07
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema al reemplazar caracter de archivo CSV

Ahora sii!!!, sos un genio!!!!!!.
Me funciona perfecto, lo único que tuve que agregarle es el .','; en el if ($c==($num-1)) { sino me quitaba los espacios pero no ponía la coma pero ya funciona de 10!

Muchísimas gracias por todo!!!!!!!!!!!!

Etiquetas: csv
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 06:06.