Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Molesto espacio en txt exportado

Estas en el tema de Molesto espacio en txt exportado en el foro de PHP en Foros del Web. Hola a todos, tengo entre manos un programa que coge valores de un kml (un archivo exportado que almacena polígonos dibujados en Google Earth), y ...
  #1 (permalink)  
Antiguo 02/04/2013, 05:02
 
Fecha de Ingreso: enero-2013
Mensajes: 30
Antigüedad: 11 años, 11 meses
Puntos: 0
Exclamación Molesto espacio en txt exportado

Hola a todos,

tengo entre manos un programa que coge valores de un kml (un archivo exportado que almacena polígonos dibujados en Google Earth), y los saca en .txt

El problema es que hay un salto de línea odioso que me está j*diendo la estructura del archivo txt.

El código de php al completo es este. Sólo pongo el archivo que gestiona el archivo subido, que es un formulario Html sin más misterio.

Código PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Uploaded</title>
</head>

<?php
    
//Subir archivo//////////////////////////////////////////////
    
    //Imprimir datos del archivo
    
$nombre "Coordenadas_".date("dmy_His").".kml";
    echo 
"Nombre Temporal: ".$_FILES['archivo']['tmp_name']."<br>";
    echo 
"Nombre del Archivo: "$_FILES['archivo']['name']."<br>";
    echo 
"Tipo de Archivo: ".$_FILES['archivo']['type']."<br>";
    echo 
"Tamaño: ".number_format(($_FILES['archivo']['size']/1024),2)." KB<br>";
    echo 
"Nombre del archivo: ".$nombre."<br><br>";
    
    
//Mover el archivo al destino
    
$destino '/Applications/XAMPP/xamppfiles/htdocs/Conversor/archivos/'.$nombre;
    
$origen $_FILES['archivo']['tmp_name'];
    
move_uploaded_file($origen,$destino);
    
    
//Fin subir archivo/////////////////////////////////////////
    
    //Leer KML//////////////////////////////////////////////////
    
    
if($sx = @simplexml_load_file($destino)){
            
$salida "";
            
$ruta $sx->Document->Placemark->Polygon->outerBoundaryIs->LinearRing;
            
$coord $ruta->coordinates;
            
$coord str_replace(",0",",",$coord);
            
//echo $coord;
            
            
            
$listaCoord explode(",",$coord);
            
//echo $listaCoord[0].";";
            //echo $listaCoord[1]."<br>";
            
            
$interruptor true;
            
$final "Point_id;X;Y"."<br>";
            
$contador 1;
            
            for(
$i=0;$i<count($listaCoord);$i++){
                    if(
$interruptor){
                        
$final $final.$contador.";".strval($listaCoord[$i]).";".strval($listaCoord[$i+1])."<br>";
                        
$i++;
                        
$contador++;
                        
$interruptor false;
                        }
                    else{
                        
$final $final.$contador.";".strval($listaCoord[$i]).";".strval($listaCoord[$i+1])."<br>";
                        
$i++;
                        
$contador++;
                        
$interruptor true;
                        }
                }    
            echo 
$final;
            
$final str_replace("<br>","\n",str_replace("; ",";",$final));
        }
    else{
            echo 
"<b>Error al leer el archivo</b>";
        }
        
    
//Fin Leer KML//////////////////////////////////////////////
    
    
    //Crear txt/////////////////////////////////////////////////
    
    
$archivo "archivos/".str_replace(".kml",".txt",$nombre);
    
$fch fopen($archivo"w");
    
fwrite($fch$final);
    
fclose($fch);
    
    
//Fin crear txt/////////////////////////////////////////////
    
?>

<body>
    <br />
    <br />
    <a href="Formulario de subida.php">Volver</a>
</body>
</html>
Dejo una captura de pantalla de cómo aparece en el archivo txt y cómo aparece en la web:



De lo que quiero deshacerme es del salto de línea y las tabulaciones que hay entre el 1; y las coordenadas


Creo fielmente que el error está en estas líneas:

Código PHP:
$interruptor true;
$final "Point_id;X;Y"."<br>";
$contador 1;
            
for(
$i=0;$i<count($listaCoord);$i++){
    if(
$interruptor){
        
$final $final.$contador.";".strval($listaCoord[$i]).";".strval($listaCoord[$i+1])."<br>";
        
$i++;
        
$contador++;
        
$interruptor false;
    }
    else{
        
$final $final.$contador.";".strval($listaCoord[$i]).";".strval($listaCoord[$i+1])."<br>";
        
$i++;
        
$contador++;
        
$interruptor true;
    }
}    
echo 
$final;
            
$final str_replace("<br>","\n",str_replace("; ",";",$final)); 
__________________
Hello World!
  #2 (permalink)  
Antiguo 02/04/2013, 05:18
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 10 meses
Puntos: 67
Respuesta: Molesto espacio en txt exportado

Estas líneas no están invertidas?
Código HTML:
Ver original
  1. echo $final;
  2.  $final = str_replace("<br>","\n",str_replace("; ",";",$final));
Debérian de ser:
Código HTML:
Ver original
  1. $final = str_replace("<br>","\n",str_replace("; ",";",$final));  
  2. echo $final;
Para que se aplique el replace antes de mostrarlo.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #3 (permalink)  
Antiguo 02/04/2013, 05:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Molesto espacio en txt exportado

$final = $final.$contador.";".strval($listaCoord[$i]).";".strval($listaCoord[$i+1])."<br>";
$final = $final.$contador.";".strval($listaCoord[$i]).";".strval($listaCoord[$i+1])."<br>";

Las dos partes del condicional hacen exactamente lo mismo o no veo la diferencia (a parte de cambiar el valor de la condición ????)
Código PHP:
Ver original
  1. $final = "Point_id;X;Y\n";
  2. $contador = 1;
  3. for($i=0;$i<count($listaCoord);$i++){
  4.    $final .= $contador.";".trim(strval($listaCoord[$i])).";".trim(strval($listaCoord[$i+1]))."\n";
  5.    $i++;
  6.    $contador++;
  7. }
  8. echo $final;

Ojo que estoy usando .= con lo que no hace falta que repitas la variable $final = $final....

trim debería hacer inutil el replace...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 02/04/2013 a las 05:31
  #4 (permalink)  
Antiguo 02/04/2013, 06:47
 
Fecha de Ingreso: enero-2013
Mensajes: 30
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Molesto espacio en txt exportado

Cita:
Iniciado por bookmaster Ver Mensaje
Estas líneas no están invertidas?
Código HTML:
Ver original
  1. echo $final;
  2.  $final = str_replace("<br>","\n",str_replace("; ",";",$final));
Debérian de ser:
Código HTML:
Ver original
  1. $final = str_replace("<br>","\n",str_replace("; ",";",$final));  
  2. echo $final;
Para que se aplique el replace antes de mostrarlo.
No, las he puesto así adrede para que muestre el resultado apropiado en formato Web y después lo formatee para txt.


Cita:
Las dos partes del condicional hacen exactamente lo mismo o no veo la diferencia (a parte de cambiar el valor de la condición ????)
Tienes razón. Lo había puesto para hacer el salto de línea cada par de coordenadas, pero fijándome efectivamente tienes razón. En cuanto a lo del trim, no entiendo demasiado bien qué es lo que hace, por eso no lo he usado.
__________________
Hello World!
  #5 (permalink)  
Antiguo 02/04/2013, 07:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Molesto espacio en txt exportado

http://php.net/manual/es/function.trim.php

Cita:
Esta función devuelve una cadena con los espacios en blanco eliminados del inicio y final del str. sin el segundo parámetro, trim() eliminará estos caracteres:

" " (ASCII 32 (0x20)), espacio simple.
"\t" (ASCII 9 (0x09)), tabulación.
"\n" (ASCII 10 (0x0A)), salto de línea.
"\r" (ASCII 13 (0x0D)), retorno de carro.
"\0" (ASCII 0 (0x00)), el byte NUL.
"\x0B" (ASCII 11 (0x0B)), tabulación vertical.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 03/04/2013, 02:36
 
Fecha de Ingreso: enero-2013
Mensajes: 30
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Molesto espacio en txt exportado

Lo que me dijiste funcionó pero tengo otro problema. El for hace una vuelta de más y crea un punto inexistente.

Adjunto captura de pantalla:



¡Muchísimas gracias por la ayuda!
__________________
Hello World!
  #7 (permalink)  
Antiguo 03/04/2013, 05:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Molesto espacio en txt exportado

Código PHP:
Ver original
  1. $final = "Point_id;X;Y\n";
  2. $contador = 1;
  3. for($i=0;$i<count($listaCoord);$i++){
  4.    $final .= $contador.";".trim(strval($listaCoord[$i])).";".trim(strval($listaCoord[$i+1]))."\n";
  5.    $i++;
  6.    if($i>=count($listaCoord)) break;
  7.    $contador++;
  8. }
  9. echo $final;

Se produce por que haces saltar la i dos veces por vuelta...
Con el if que he puesto saldrá del for cuando i+1 sea igual a count($listaCoord)).
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #8 (permalink)  
Antiguo 03/04/2013, 08:32
 
Fecha de Ingreso: enero-2013
Mensajes: 30
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Molesto espacio en txt exportado

He probado con el if que dices tú y sigue apareciendo el puñetero contador extra. Aún así, he hecho un:

Código PHP:
echo count($listaCoord)."------".$i
dentro del for, y me he dado cuenta de que no llega al final... No sé por qué pasa esto, es muy raro.
__________________
Hello World!
  #9 (permalink)  
Antiguo 03/04/2013, 09:56
 
Fecha de Ingreso: enero-2013
Mensajes: 30
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Molesto espacio en txt exportado

Vale, lo he solucionado cambiando la condición del for. Haciendo que llegue hasta count($listaCoord)-1

Muchas gracias por la ayuda, me ha sido MUY útil!
__________________
Hello World!

Etiquetas: espacio, molesto, txt
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 07:56.