Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Separar cadenas de cada linea de un fichero de texto

Estas en el tema de Separar cadenas de cada linea de un fichero de texto en el foro de PHP en Foros del Web. Hola a todos los Foreros!!!. Ando realizando una aplicación en PHP la cual debe leer un fichero de texto que contiene varios datos. Bien cada ...
  #1 (permalink)  
Antiguo 20/11/2014, 06:44
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Pregunta Separar cadenas de cada linea de un fichero de texto

Hola a todos los Foreros!!!.

Ando realizando una aplicación en PHP la cual debe leer un fichero de texto que contiene varios datos.
Bien cada campo de los datos va separado por un tabulador. son 6 campos y luego va la siguiente linea. Todas igual 6 campos separados por TAB y la siguiente linea.

El fichero sería así:
Los números son para indicar que cada campo va separado por TABULACIONES
Cita:
(1)Titulo (2)nombre (3)mis datos descriptivos (4)palabras clave (5)publicados (6)textos mas continuacion
Esa sería una linea, pero el fichero contiene varias o miles ok, cada una con 6 campos separados por una tabulación.

Bien Ahora quisiera leer ese fichero por medio de PHP, y generar otro contenido donde cada campo se sustituya correctamente en su nuevo campo correspondiente.

El código que he intentado es con explode y separando por TABULADOR pero esto no funciona, ya que necesito separar cada campo y luego llegado a los 6 campos un salto de linea y el siguiente igual.

El código que estoy intentando es este, haber si pueden ayudarme.

Código PHP:
Ver original
  1. $archivo = fopen("datos_xml.xml","a") or
  2.                     die("Error en la creacion del Fichero final.");
  3.  
  4.                        /*este seria el fichero con los datos separados por TAB.*/
  5.         $nombre_fichero = 'datos.csv';
  6.            
  7.         $fichero = fopen($nombre_fichero,'rb');
  8.            
  9.         $contenido = fread($fichero, filesize($nombre_fichero));
  10.            
  11.         fclose($fichero);
  12.  
  13. /*aqui intento separar, pero claro lo hago por tabulacion, y debe ser por cada linea separar 6 campos y sustituir el 1 en la primera aparición de $linea, el segundo en la segunda aparición de $linea, y asi con los 6 campos */      
  14.         $lineas = explode("\t",$contenido);
  15.        
  16.         foreach ($lineas as $linea) {          
  17.                
  18.             fwrite( $archivo, '
  19.                             <item>
  20.                             <title>'. $linea . '</title>
  21.     <link>http://pagina.com/'.$linea.'/</link>
  22.         <description>'.$linea.'</description>
  23.                <campo:clave>'.$linea.'</campo:clave>
  24.                <texto>'.$linea.'</texto>
  25.                <continua>'.$linea.'</continua>
  26.         </item> ' . PHP_EOL );
  27.         }
  28.        
  29.         fwrite( $archivo, '</channel>
  30.                         </rss>
  31.                         ');
  32.        
  33.         fclose($archivo);
  34.    
  35. ?>

Bien quisiera que la parte de titulo se sustituya en la primera aparición de $linea.
El campo nombre se sustituya en la segunda aparición de $linea.
Y así con los 6 campos de la primera linea.

Para la segunda linea lo mismo, separar los 6 campos.

¿Cómo puedo realizarlo pueden ayudarme un poco con el código. ?

Gracias y Saludos a toda la comunidad.!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 20/11/2014, 13:53
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Separar cadenas de cada linea de un fichero de texto

Hola buscando soluciones, encontré la forma de hacer lo que quiero la sustitución de cada palabra en su lugar.
Pero aún sigue fallando se descontrolan los datos no se porque y se muestran desordenados cuando el fichero es un csv.

Dejo aquí el código que estoy probando, por más que le doy vueltas no consigo saber porque falla y muestra las palabras en otro lugar que no es.

Código PHP:
Ver original
  1. $archivo = fopen("datos_xml.xml","a") or
  2.                     die("Error en la creacion del Fichero final.");
  3.  
  4.                        /*este seria el fichero con los datos separados por TAB.*/
  5.         $nombre_fichero = 'datos.csv';
  6.            
  7.         $fichero = fopen($nombre_fichero,'rb');
  8.            
  9.         $contenido = fread($fichero, filesize($nombre_fichero));
  10.            
  11.         fclose($fichero);
  12.  
  13.  
  14.         $cars = explode("\n", $contenido);
  15.         foreach($cars as $car) {
  16.             $car = str_getcsv($car);
  17.            
  18.             fwrite($archivo, '<item>
  19.                <title>'. $car[0] . '</title>
  20.                 <link>http://pagina.com/'.$car[1].'/</link>
  21.                 <description>'.$car[2].'</description>
  22.                <campo:clave>'.$car[3].'</campo:clave>
  23.                <texto>'.$car[4].'</texto>
  24.                <continua>'.$car[5].'</continua>
  25.        </item> ' . PHP_EOL );
  26.            } //cierro foreach.
  27.  
  28.  
  29.         fclose($archivo);

Bien con esto si tengo un fichero llamado datos.csv del cual provienen los campos a introducir aquí, debería mostrar los campos de cada columna (para eso use la función str_getcsv() ) cada uno tabulado.
Y cuando llegué al final de la primera linea, después de leer los 6 campos, los muestra ( el 1 campo es el 0, el segundo el 1 y asi hasta el 5). Pero produce errores o si los lee no muestra las partes correctamente.

Un error que tira es como el siguiente:

Código PHP:
Ver original
  1. Notice: Undefined offset: 1 in C:\xampp\htdocs\xmls\crea_xml2.php on line 71
La línea en este ejemplo haría coincidir con esta:

Código PHP:
Ver original
  1. <link>http://pagina.com/'.$car[1].'/</link>

¿Qué falla, porqué no muestra los datos correctamente si accedo al indice de cada uno, y son 6 campos (del 0 al 5).?

Espero puedan ayudarme un poco, llevo todo el día probando y nada que doy con esto, es para crear ficheros XML, pero pasando los datos directamente para rellenar cada campo.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #3 (permalink)  
Antiguo 20/11/2014, 23:57
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Separar cadenas de cada linea de un fichero de texto

ejecuta var_dump($cars); para ver que los valores que tratas de imprimir esten correctamente.
  #4 (permalink)  
Antiguo 21/11/2014, 06:22
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 2 meses
Puntos: 17
Respuesta: Separar cadenas de cada linea de un fichero de texto

Hola Gracias por tu respuesta ArturoGallegos, pero he cambiado bastante el script ya que esté me creaba demasiados fallos.

Ahora SI funciona y me crea perfectamente cada una de las columnas del fichero de texto, y luego salta a la segunda linea y lo mismo los crea todos los datos.


Leo los datos pero y almacena TODOS los registro que se encuentre, navegando linea por linea.

Código PHP:
Ver original
  1. $lineas = file('datos.csv');
  2.     $i=1;
  3.    
  4.     foreach ($lineas as $linea_num => $linea)
  5.     {
  6.         $datos = explode("\t", $linea);
  7.      
  8.         $name = trim($datos[0]);
  9.         $title = trim($datos[1]);
  10.         $content = trim($datos[2]);
  11.         $status = trim($datos[3]);
  12.         $keyword = trim($datos[4]);
  13.         $desc = trim($datos[5]);
  14.  
  15.  
  16.          /*aqui muestro los campos, */
  17.         echo $name . "<br/>";
  18.         echo $title . "<br/>";
  19.         echo $content . "<br/>";
  20.         echo $status . "<br/>";
  21.         echo $keyword . "<br/>";
  22.     echo $desc . "<br/>";
  23. $i++;   /*suma 1 a $i para siguiente post_id.*/
  24.  
  25.         }
PD: Pensé que no funcionaba pero era un fallo que tenia en el código que generaba un fichero xml dentro del foreach, pues saque estas lineas fuera del foreach y ya esta funcionando perfecto.

Saludos espero sirva esto para más personas.

No cierro el post porque luego pienso modificar para poder elegir el texto que va en $content y generar varios distintos, cuando este con ello lo posteo aquí mis dudas.

Saludos
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Última edición por HackID1; 21/11/2014 a las 07:10

Etiquetas: php+archivos
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 05:35.