Foros del Web » Programando para Internet » PHP »

Modificar y reescribir un archivo de texto

Estas en el tema de Modificar y reescribir un archivo de texto en el foro de PHP en Foros del Web. Hola amigos: Tengo un archivo de texto con URLs y otros datos. He hecho el siguiente script: Cita: .... .... $url = $datos[0]; $result = ...
  #1 (permalink)  
Antiguo 29/03/2010, 02:19
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Modificar y reescribir un archivo de texto

Hola amigos: Tengo un archivo de texto con URLs y otros datos. He hecho el siguiente script:

Cita:
....
....
$url = $datos[0];
$result = mysql_query("SELECT url FROM rank where url='".mysql_real_escape_string($url)."' ");
if(($verifica = mysql_num_rows($result)) != 0){
$url="";}
$q = "INSERT INTO rank (media, votos, nombre, descripcion, url, palabrasclaves) values ('$media', '$votos', '$nombre', '$descripcion', '$url', '$palabrasclaves')";
$datos = explode("\t", $line);
que toma una url del archivo de texto yverifica si está repetida en la base de datos. Si está repetida, pone un "" en la tabla y luego la elimino de la base de datos.
Pregunto, como puedo modificar el script para que:
1) Lea el archivo de texto original; 2) Copie las urls no repetidas a otro archivo de texto y 3) Elimine el archivo de texto original
(Sin usar la base de datos)
  #2 (permalink)  
Antiguo 29/03/2010, 02:35
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 14 años, 11 meses
Puntos: 19
Respuesta: Modificar y reescribir un archivo de texto

Si no usas la base de datos que es con lo que comparas si está repetida la URL o no, no se como piensas hacerlo.

Para borrar archivos se usa el comando unlink
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #3 (permalink)  
Antiguo 29/03/2010, 02:57
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Exacto. Quiero compararlas con las demas urls del mismo archivo. Digamos 1) Leo url1, 2) leo todas las demas (menos url1) 3) COmparo ¿Es url1=url2? ¿Es url1=url3? y así sucesivamente. Si esa url es única, luego la grabo en otro archivo de texto. Si está repetida, debería borrar esa urls y los campos (descripcion, palabras claves), pero eso lo haría yo. El tema es como podría comparar las urls del mismo archivo.

O incluso otra cosa: 1) Leo url1, 2) La copio a otro archivo de texto; 3) Leo url2, 4) La comparo con la url1 copiada 5) Si son iguales, no copio url2;
Luego: Leo url3, comparo con las urls copiadas. Así me parece que es mas sencillo

Última edición por GatorV; 30/03/2010 a las 09:00
  #4 (permalink)  
Antiguo 29/03/2010, 03:04
Avatar de AnesGy  
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 14 años, 11 meses
Puntos: 19
Respuesta: Modificar y reescribir un archivo de texto

Oh, vale, puedes cargar el archivo con file("nombredearchivo.txt") y luego con un array_walk iterarlo o algo. Hay montañas de funciones de arrays y seguro que una comprueba que no se repitan los valores.

Mira en array en PHP.net

De todas maneras no te recomiendo almacenar datos temporales en archivos, es mucho más simple (e infinitamente más rápido) extraer los datos de un archivo, borrar los registros repetidos, y luego meterlos en la base de datos sin salir de la memoria del programa (es decir sin usar el disco).

Piensa que las variables se almacenan en RAM que es una memoria muy rápida del ordenador (no tanto como la caché, pero que le vamos a hacer), y los archivos se almacenan en el Disco Duro que no es lento, pero comparado con la RAM es más lento.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it
  #5 (permalink)  
Antiguo 29/03/2010, 03:17
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Jeje, justo lo que pensaba. Estoy justamente en eso, ya tengo el script que me hace eso, el tema esta son los 60 segundos que me da MySQL para subir (tengo archivos de texto de varios megas, más de 10mb). La busqueda de la url repetida, cada vez demora mas y mas, ya que cada vez hay más url en la tabla. Pensé en hacer varias tablas, pero, que va, debo modificar todo el sitio...

Lo acabo de probar: a los 8000 url, me puso el famoso cartel de :
(El archivo del script es txtasql.php)
Cita:
Fatal error: Maximum execution time of 60 seconds exceeded in C:\wamp\www\misitio\rank\txtasql.php on line 36

Última edición por GatorV; 30/03/2010 a las 09:00
  #6 (permalink)  
Antiguo 29/03/2010, 04:15
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Modificar y reescribir un archivo de texto

Mejor esto que nada, asi que espero que te siva de ayuda.

http://php.net/manual/en/function.set-time-limit.php

PD: No se como narices hacer el vinculo a la pagina en este foro, asi que tendras que pegar la URL, xD
  #7 (permalink)  
Antiguo 29/03/2010, 10:39
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Modificar y reescribir un archivo de texto

Gracias. En el icono azul dice "insertar enlace"
  #8 (permalink)  
Antiguo 29/03/2010, 15:59
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Modificar y reescribir un archivo de texto

No me hables de ese icono... que siempre que lo hago ma aparecen los tags poniendo url sin que salga el link clicable... ya desistí de utilizarlo xD

por cierto te sirvio de algo la funcion?
  #9 (permalink)  
Antiguo 29/03/2010, 18:15
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Modificar y reescribir un archivo de texto

Si. También configuré algo importante: el límite de tamaño del archivo a subir (estaba en 2mb), la memoria (estaba en 128). Ahora si, tardó como 5 minutos en subir 17 mil links y todo ok. ESO, en mi localhost wamp, pero para subir tengo que comprimir muy bien la base de datos (15 mb) y esperar que no se pare (porque el archivo sería zip de casi 2 mb mas o menos). Pero si yo le doy al server que lo ponga en MySQL, lo subo x ftp y me lo suben ellos sin problemas (eso en caso de que no pueda hacerlo desde aquí).
La otra forma de optimizar es trabajar con varias tablas: está bien que tengo trabajo que hacer, pero es en sí más simple: Subo las urls a una tabla, tipo temporal, donde sólo comparó las urls de un mismo directorio raíz. Luego, copio estas urls y las mando a la tabla principal. Y por ultimo, borro la temporal. Así tarda muchísimo menos, podría subir, literalmente, millones de urls sin problemas.
Gracias por todo
PD: IMPORTANTE: Hay alguna forma de transformar un archivo de texto txt (con tabulaciones para columnas y salto de linea para las filas) en un archivo SQL y directamente poder subirlo así? Gracias.

Etiquetas: modificar
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:38.