Comunidad de diseño web y desarrollo en internet online

script php generar csv apartir de un txt

Citar            
MensajeEscrito el 14 Dic 2010 10:00 pm
hola todods tengo
un txt que contiene :

5 7
6 8

necesito generar un csv asi
5;7
6;8

pero mi script me genera
esto

5 7
6 8
alguien sabe por que?


Código PHP :

<?php           

 $csv_end = " ";  
 $csv_sep = ";";  
 $csv_file = "data.csv";  
 $csv="";  
 $contents = file("data.txt");
 foreach($contents as $line)
  {
  $csv.=$line.$csv_sep.$csv_end;     
  }  
  //Generamos el csv de todos los datos  
  if (!$handle = fopen($csv_file, "w")) {  
      echo "Cannot open file";  
      exit;  
 }  
 if (fwrite($handle, utf8_decode($csv)) === FALSE) {  
     echo "Cannot write to file";  
     exit;  
 }  
 fclose($handle);     
   
         
?>

Por swingbeach21

Claber

104 de clabLevel



 

msie
Citar            
MensajeEscrito el 14 Dic 2010 10:38 pm
¿Que formato tiene tu .txt?

Debería ser:

Código PHP :

6
7
8
9


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 14 Dic 2010 11:00 pm

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 14 Dic 2010 11:12 pm
Gracias por la info.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 14 Dic 2010 11:39 pm

Código PHP :

<?php            
   
   $csv_end = "\n";   
   $csv_sep = ";";   
   $csv_file = "data.csv";   
   $csv="";   
   $contents = file("data.txt"); 
   $lines = array();
   foreach($contents as $line) 
   { 
      $arr = explode(' ', trim($line));
      $csv .= implode($csv_sep, $arr) . $csv_end;
   }

   if (file_put_contents($csv_file, utf8_decode($csv)) === FALSE)
   {
      echo "Cannot write to file";   
       exit;   
   }
    
          
?>


Lee sobre explode, implode, trim y file_put_contents para entender el código

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 16 Dic 2010 05:25 am
yo utilizaria un str_replace mas el trabajo de fopen y cambiaria las lineas.

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 16 Dic 2010 12:43 pm
desde mysql esto es mucho mas rápido, ademas lo puedes automatizar facilmente lanzando un Stored procedure desde linea de comando con un crontab(o cronjob como gustes llamarlo)

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 16 Dic 2010 06:44 pm
Inyaka has dado en el punto maestro. eso es lo ideal trabajar eso desde la base de datos.

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 17 Dic 2010 11:06 pm
Hola, yo lo haria asi (PROBADO Y FUNCIONA):

Código PHP :

<?php 
// Leo el txt
$txt_file = file("data.txt");
 if (!$txt_file) {
echo "No puedo leer el txt";
exit;
}
//Almaceno las lineas en un array
 $i = 0;
 foreach ($txt_file as $line) {
 $i++; 
 $linea{$i} = $line; 
 } 
//Sustituyo caracteres que necesito y guardo al mismo tiempo 
$csv_file = "data.csv";
 $csv_open = fopen($csv_file,"w");
 for ($c = 1; $c<=$i ; $c++) {
 $linea_fix{$c} = str_replace(" ",";",$linea{$c});
 echo "line ".$c." = ".$linea_fix{$c};
 $csv_write{$c} = fwrite($csv_open,$linea_fix{$c});
 if ($csv_write === FALSE) {
 echo "Error al escribir archivo ".$csv_file;
 exit;
 }
 }
 echo "El archivo ".$csv_file." ha sido escrito correctamente."; 
 $csv_close = fclose($csv_open);
// Ya esta preparado el archivo .csv jejeje 
?>

Como te digo, lo he probado y funciona

Por malcomcc

39 de clabLevel



Genero:Masculino  

Desarrollador Web/Multiplataforma/Gráfico

msie8
Citar            
MensajeEscrito el 18 Dic 2010 04:27 pm
Y mejorado:

Código PHP :

<?php
// Variables necesarias donde seteo todo lo que necesito
 $txt_file = "data.txt";
 $csv_file = "data.csv";
 $sustituido = " ";
 $sustituto = ",";
// Compruebo que exista el txt
 if (!file_exists($txt_file)) {
echo "<br/>No existe el archivo txt necesario<br/>";
exit;
}
// Lo leo
echo "Archivo txt encontrado...<br/>";
echo "Leyendo el archivo txt ...<br/>";
 $txt_read = file($txt_file);
echo "Leído el archivo txt ...<br/>";
// Abro el CSV donde ire guardando los datos 
 $csv_open = fopen($csv_file,"w");
 if ($csv_open === FALSE) {
echo "No se pudo abrir el archivo csv para introducir los datos.<br/>";
 }
// Sustituyo caracteres que quiero y voy guardando en el csv
foreach ($txt_read as $row) {
 $line = $row;
 echo "<br/>Sacando la linea : ".$line."<br/>";
 $line_fix = str_replace(" ",";",$line);
 echo "Convirtiendo en la línea : ".$line_fix."<br/>";
 $csv_write = fwrite($csv_open,$line_fix);
 if ($csv_write === FALSE) {
 echo "LINEA ESCRITA EN EL CSV --> ERROR<br/>";
 exit;
 }
 echo "LINEA ESCRITA EN EL CSV --> OK<br/>";
 }
 echo "<br/>El archivo ".$csv_file." ha sido escrito correctamente.<br/>"; 
 // Cierro el csv
 $csv_close = fclose($csv_open); 
 // Ya tengo preparado el csv y listo para usar
 
 // Compruebo el contenido del archivo csv en pantalla
 echo "<br/>El archivo ha quedado así.<br/>";
 foreach (file($csv_file) as $line) {
    echo $line."<br/>";
 } 
?>

Te lo he puesto para que veas las diferentes fases cuando lo ejecutes.
Sin ello sería:

Código PHP :

<?php
 $txt_file = "data.txt";
 $csv_file = "data.csv";
 $sustituido = " ";
 $sustituto = ",";
 if (!file_exists($txt_file)) {
echo "<br/>No existe el archivo txt necesario<br/>";
exit;
}
 $txt_read = file($txt_file);
 $csv_open = fopen($csv_file,"w");
 if ($csv_open === FALSE) {
echo "No se pudo abrir el archivo csv para introducir los datos.<br/>";
 }
foreach ($txt_read as $row) {
 $line = $row;
 $line_fix = str_replace(" ",";",$line);
 $csv_write = fwrite($csv_open,$line_fix);
 if ($csv_write === FALSE) {
 echo "Error al escribir el csv<br/>";
 exit;
 }
 $csv_close = fclose($csv_open); 
?>

Por malcomcc

39 de clabLevel



Genero:Masculino  

Desarrollador Web/Multiplataforma/Gráfico

msie8
Citar            
MensajeEscrito el 18 Dic 2010 04:35 pm
Perdona, me equivoque. Sería:
<?php
// Variables necesarias donde seteo todo lo que necesito
$txt_file = "data.txt";
$csv_file = "data.csv";
$sustituido = " ";
$sustituto = ",";
// Compruebo que exista el txt
if (!file_exists($txt_file)) {
echo "<br/>No existe el archivo txt necesario<br/>"; exit;
}
// Lo leo echo "Archivo txt encontrado...<br/>";
echo "Leyendo el archivo txt ...<br/>";
$txt_read = file($txt_file);
echo "Leído el archivo txt ...<br/>";
// Abro el CSV donde ire guardando los datos
$csv_open = fopen($csv_file,"w");
if ($csv_open === FALSE) {
echo "No se pudo abrir el archivo csv para introducir los datos.<br/>";
}
// Sustituyo caracteres que quiero y voy guardando en el csv
foreach ($txt_read as $row) {
$line = $row;
echo "<br/>Sacando la linea : ".$line."<br/>";
$line_fix = str_replace($sustituido, $sustituto, $line); /* Aqui es donde me equivoque */
echo "Convirtiendo en la línea : ".$line_fix."<br/>";
$csv_write = fwrite($csv_open,$line_fix);
if ($csv_write === FALSE) {
echo "LINEA ESCRITA EN EL CSV --> ERROR<br/>";
exit;
}
echo "LINEA ESCRITA EN EL CSV --> OK<br/>";
}
echo "<br/>El archivo ".$csv_file." ha sido escrito correctamente.<br/>";
// Cierro el csv $csv_close = fclose($csv_open);
// Ya tengo preparado el csv y listo para usar
// Compruebo el contenido del archivo csv en pantalla
echo "<br/>El archivo ha quedado así.<br/>";
foreach (file($csv_file) as $line) {
echo $line."<br/>";
}
?>

Por malcomcc

39 de clabLevel



Genero:Masculino  

Desarrollador Web/Multiplataforma/Gráfico

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.