Foros del Web » Programando para Internet » PHP »

Problemas formateando ficheros.....

Estas en el tema de Problemas formateando ficheros..... en el foro de PHP en Foros del Web. Tengo este script Código PHP: $file  =  file  ( "db_maker.txt" ); $nu_file1  =  implode  ( " " ,  $file ); $nu_file  =  ereg_replace (  ";" ,  ...
  #1 (permalink)  
Antiguo 19/04/2003, 16:32
Avatar de jmn2k1  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires...
Mensajes: 489
Antigüedad: 22 años, 5 meses
Puntos: 2
Problemas formateando ficheros.....

Tengo este script

Código PHP:
$file file ("db_maker.txt");
$nu_file1 implode (" "$file);
$nu_file ereg_replace";""\n"$nu_file1);
echo 
"<textarea readonly rows=15 cols=75>";
echo 
$nu_file;
echo 
"</textarea>"
Lo que tendria que hacer (creo) es guardar en un array lo que halla dentro del archivo, que es esto:

INSERT INTO banda (nombre_banda) VALUES ('Nueva Banda');INSERT INTO disco VALUES (58, 285, 'Uno', '58_285', '');INSERT INTO disco VALUES (58, 286, 'Dos', '58_286', '');UPDATE disco SET tapa_disco = 'tnd' WHERE id_disco = '285';INSERT INTO letras VALUES (3162, 285, '1111', '11111111111');UPDATE disco SET tapa_disco = '58_286' WHERE id_disco = '286';INSERT INTO letras VALUES (3163, 286, '2222', '222222222222');

luego paso ese array por el implode para que sea una simple cadena y no un array, y por ultimo reemplazo ";" por "\n"
pero como resultado me tira esto:

INSERT INTO banda (nombre_banda) VALUES ('Nueva Banda')
INSERT INTO disco VALUES (58, 285, 'Uno', '58_285', '')
INSERT INTO disco VALUES (58, 286, 'Dos', '58_286', '')
UPDATE disco SET tapa_disco = 'tnd' WHERE id_disco = '285'
INSERT INTO letras VALUES (3162, 285, '1111', '11111111111')

Como ven no sale desde el segundo UPDATE en adelante....
no tengo mucha experiencia con esto de implode, ereg_replace (tambien probe con str_replace y pasa lo mismo) asi que si alguien se da cuenta de que esta pasando y me lo dice le agradeceria mucho.

___
JmN
  #2 (permalink)  
Antiguo 19/04/2003, 17:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Usa str_replace () .. Para lo que estas intentando hacer, no es necesario meter funciones de expresiones regulares.

Te propongo otra alternativa a la de "concatenar" con el implode() .. para luego hacer un str_replace para poner el salto de línea .. Cuando en teoría ya tienes ese salto de línea en tu "txt" ..

Código PHP:
$file file ("db_maker.txt");
echo 
"<textarea readonly rows=15 cols=75>";
foreach (
$file as $linea){
   
$linea=str_replace(";","",$linea); // Le quitamos el ; opcional ..
   
echo $inea// de tu .txt ya tendrás el \n salto de línea ..
}
echo 
"</textarea>"
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 19/04/2003, 17:28
Avatar de jmn2k1  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires...
Mensajes: 489
Antigüedad: 22 años, 5 meses
Puntos: 2
Sigue sin aparecer la ultima linea del .txt.........

no se que puede ser porque me fijo en el archivo y el texto esta con la ultima linea....

___
JmN
  #4 (permalink)  
Antiguo 19/04/2003, 17:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. dices que es la última linea solo la que no aparece? .. Con el bucle foreach() (en teoría) se leen todass las líneas de tu array que genera el file() ...

Podrías poner esos datos en algun sitio para descargarlos (preferentemente en un .zip para que respete los \n q tenga o \n\r ..) .. Así lo probamos.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 19/04/2003, 17:43
Avatar de jmn2k1  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires...
Mensajes: 489
Antigüedad: 22 años, 5 meses
Puntos: 2
Hize un zip con los archivos:

http://www.jmnlyrics.com.ar/dbmaker.zip

Son 4 archivos en paso4.php esta ese script del problema

basicamente es un programa que uso para cargar los datos de mi pagina, antes hacia los insert directamente con cada paso... ahora lo que quiero hacer es que se cree un archivo para ejecutar en la base.


Gracias por ver este problemita....
___
JmN

PD: para que veas el problema crea una banda de prueba, llega hasta el ultimo paso y fijate que el archivo db_maker.txt tiene todo lo que llenaste (por lo que no creo que sea un error de los bucles..) y que lo que muestra el script esta incompleto

Última edición por jmn2k1; 19/04/2003 a las 17:47
  #6 (permalink)  
Antiguo 19/04/2003, 18:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo que te pedía era básicamente esos datos que genera tu paso4.php .. pues como veras usas unas tablas y unas consultas (con sus datos) que no tenemos para hacer pruebas ....

Lo que no veo es que hagas ningun salto de línea tras generar el SQL .. para guardarlo en tu .txt ...

Código PHP:
$sql_text2 "UPDATE disco SET tapa_disco = '".$tapa."' WHERE id_disco = '".$iddisco."';\n";

$sql_text "INSERT INTO letras VALUES (".$id_letra.", ".$iddisco.", '".$nombre_letra."',  '".$lyrics."');\n"
Tambien veo q usas mucho "GLOBAL" en los bucles while() .. No es necesario que lo declares como globales .. Eso tendrías que hacerlo así en funciones . no en bucles ...

Y se vé tambien por ahí que usas:
$fp = fopen("db_maker.txt", "a");
fwrite ($fp, $sql_text);

Dentro del bucle while() . cuando deberías "abrir" el archivo (fopen) antes de meterte al bucle y en el bucle solo hacer los fwrite() que correspondan a cada pasada del bucle ...

Pero bueno, esos son detallitos de optimización que mas adelante tendras que respasar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 18:10.