Foros del Web » Programando para Internet » PHP »

Detectar y reemplazar salto de linea de un txt

Estas en el tema de Detectar y reemplazar salto de linea de un txt en el foro de PHP en Foros del Web. Estoy haciendo un formulario de ingreso de data desde un archivo txt a mi mysql, ya que no consegui subirlo usando mysqlfront. la data en ...
  #1 (permalink)  
Antiguo 13/01/2004, 18:06
 
Fecha de Ingreso: mayo-2002
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 0
Detectar y reemplazar salto de linea de un txt

Estoy haciendo un formulario de ingreso de data desde un archivo txt a mi mysql, ya que no consegui subirlo usando mysqlfront.


la data en el archivo txt, lo tengo asi:
000110,017,100236,15/10/2003 00:00:00,01,002000540,02/10/2003 00:00:00,CARBONES ELECTRICOS S.A.,1,71.40,15/10/2003 00:00:00,BCO. DE CREDITO


Quiero que quede asi:
---------------------------------------
INSERT INTO pagos VALUES("000110", "017", "100243", "17/11/2003 00:00:00", "01", "001014089", "17/10/2003 00:00:00", "ELECTRO CARBON S.A.C.", "1", "249.90", "17/11/2003 00:00:00", "BCO. DE CREDITO");
INSERT INTO pagos VALUES("000112", "017", "100243", "17/11/2003 00:00:00", "01", "001014089", "17/10/2003 00:00:00", "ELECTRO CARBON S.A.C.", "1", "249.90", "17/11/2003 00:00:00", "BCO. DE CREDITO");...etc.

Al ejecutar este código no me sale igual ya que todo el $contenido me lo trata como un solo "lote", yo quiero que por cada linea, me reemplace el salto de linea por un INSERT INTO... de modo que me permita ingresar la data por linea.

<?php
$cont=nl2br($contenido);
$conte=str_replace(",",'","',$cont);

echo "INSERT INTO pagos VALUES(\"$conte\")";

?>

Este script ejecutado:
---------------------------
INSERT INTO pagos VALUES("000110","017","100236","15/10/2003 00:00:00","01","002000540","02/10/2003 00:00:00","CARBONES ELECTRICOS S.A.","1","71.40","15/10/2003 00:00:00","BCO. DE CREDITO
000112","017","110652","12/01/2004 00:00:00","01","001003382","13/11/2003 00:00:00","DETEC (DESARROLLOS TECNOLOGICOS S.A)","1","1541.05","12/01/2004 00:00:00","BCO. DE CREDITO
000110","017","090555","25/10/2003 00:00:00","01","0010001564","25/09/2003 00:00:00","EMPAQUETADURAS INDUSTRIALES VIASE E.I.R.L.","1","1856.40","25/10/2003 00:00:00","BCO. DE CREDITO
000110","017","090850","29/10/2003 00:00:00","01","0010001565","29/09/2003 00:00:00","EMPAQUETADURAS INDUSTRIALES VIASE E.I.R.L.","1","697.94","29/10/2003 00:00:00","BCO. DE CREDITO
000110","017","110204","04/12/2003 00:00:00","01","0010001573","04/11/2003 00:00:00","EMPAQUETADURAS INDUSTRIALES VIASE E.I.R.L.","1","3242.75","04/12/2003 00:00:00","BCO. DE CREDITO
")


Gracias por su ayuda
__________________
Sistemass.com - Centro de capacitación profesional
http://www.sistemass.com
  #2 (permalink)  
Antiguo 13/01/2004, 20:31
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Me parece que con Mysql le puedes enviar un fichero plano diciendo cuales son los campos y el delimitador.. y no hace falta poner lo de INSERT INTO...

Mirate el manual de Mysql.
  #3 (permalink)  
Antiguo 14/01/2004, 02:43
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Si cada "registro" esta en una linea, podrias usar file() (www.php.net/file) para leer el fichero en un array, cuyos elementos seria cada linea. Luego recorres el array y generas un INSERT para cada elemento.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 14/01/2004, 07:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ademas de lo que nenciona josemi .. Lo principal (para Mysql y en concreto la función de PHP mysql_query()) es que le separes las intrucciones SQL. En Msyql . una instrucción SQL está separa de la siguiente por el caracter ; (punto y coma) .. Los saltos de línea no son tan importantes (para Msyql) . pero .. si que lo son si vas a leer ese archivo con file() ...

Lo ideal es leer el archivo con file() pero concatenando sus elementos del array que se entrega para generar un string (cadena) y a partir de ahí aplicar el explode() al caracter ; para obtener realmente un array con las sentencias SQL exactas (independiente si estas a su vez incluyen saltos de línea).

Sería algo así:

Código PHP:
<?
// Leer el archivo .sql ..
$archivo_sql="nose.sql";
// concatenarlo hacia un string (cadena)
$sql implode(''file ($archivo_sql)); 
// Separa en un array a 1 elemento del array por instrucción SQL
$sql_instrucciones=explode(";",$sql);

// Conectas a tu BD . .selecciona la BD .. etc ...
// Y la consulta SQL (ejecución .. instrucción por instrucción .. mysql_query() no acepta/ejecuta mas de una a la vez).
foreach ($sql_instrucciones as $sql_instruc){
    
mysql_query($sql_instruc);
}
?>
Si tu "sql" llega desde un formulario en un campo TEXTAREA .. la técnica es igual (eliminando la parte del implode() del file()) .. No hace falta (y no debes) usar nl2br() para procesar esas isntrucciones .. en un texarea se generan saltos de línea \n (los mismo que contiene un archivo de texto plano).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 14/01/2004 a las 07:58
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:24.