Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] eliminar fila en un txt duplicado

Estas en el tema de eliminar fila en un txt duplicado en el foro de PHP en Foros del Web. hola a todos es que tengo esto @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $archivo = 'dato.txt' ; if ( file_exists ( $archivo ) ) { ...
  #1 (permalink)  
Antiguo 12/05/2014, 18:51
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
eliminar fila en un txt duplicado

hola a todos es que tengo esto

Código PHP:
Ver original
  1. $archivo = 'dato.txt';
  2. if(file_exists($archivo)) {
  3.         $file = fopen($archivo,'r');
  4.         while(!feof($file)) {
  5.             $name = fgets($file);
  6.             $lineas[] = $name;
  7.         }
  8.         fclose($file);
  9. }
  10. // Todas las lineas quedan almacenadas en $lineas
  11. // Ahora eliminas la fila 15 por ejemplo, en el array sería la posicion 14 (empezamos por la 0)
  12. unset($lineas[14]);
  13. $lineas = array_values($lineas);
  14. print_r($lineas);
  15. // GUARDAMOS
  16. $file = fopen($archivo, "w");
  17. foreach( $lineas as $linea ) {
  18.     fwrite( $file, $linea );
  19. }
  20. fclose( $file );

y quiero elimiar usuarios repedito

este es el dato.txt

jesus:3124:2015-06-03
jovy1:5254:2015-06-03
jovy2:6485:2015-06-03
jovy3:6592:2014-05-27
  #2 (permalink)  
Antiguo 12/05/2014, 19:17
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: eliminar fila en un txt duplicado

Como todas las lineas las guardas en un array, podria servirte array_unique()

http://us2.php.net/manual/es/function.array-unique.php
__________________
Salu2!
  #3 (permalink)  
Antiguo 12/05/2014, 19:22
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: eliminar fila en un txt duplicado

si pero lo que quiero es poder eliminar duplicado del archivo dato.txt
  #4 (permalink)  
Antiguo 12/05/2014, 19:40
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: eliminar fila en un txt duplicado

- Lees el archivo
- Reduces tu array con array_unique()
- Lo sobreescribes :)


Es mas eficiente eso 1000 veces que andar acomodando con sucesivas escrituras el archivo, o sea es preferible hacer el acomodo en memoria y escribirlo de una vez.
__________________
Salu2!

Última edición por Italico76; 12/05/2014 a las 21:20
  #5 (permalink)  
Antiguo 13/05/2014, 07:34
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: eliminar fila en un txt duplicado

pero si utilizo array_unique

quiero saber si el comprueba el primer campo

ejemplo

user:pass:fecha

yo ya tengo los user que son repetido
  #6 (permalink)  
Antiguo 13/05/2014, 07:48
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: eliminar fila en un txt duplicado

Código PHP:
Ver original
  1. <?php
  2.  
  3. $f_users = 'usuarios.txt';
  4.  
  5. // leo el archivo, voy a simularlo:
  6.  
  7. // simulo archivo
  8. $file = <<<'FILE'
  9. jesus:3124:2015-06-03
  10. jovy1:5254:2015-06-03
  11. jovy2:6485:2015-06-03
  12. jesus:3124:2015-06-03
  13. jovy3:6592:2014-05-27
  14. FILE;
  15.  
  16. // simulo lectura por lineas del archivo
  17. $lineas = explode("\n",$file);
  18.  
  19. $users = array();
  20. foreach ($lineas as $linea)
  21. {
  22.     list($user,$pass,$date) = explode(':',$linea);
  23.     if (!in_array($user,$users))
  24.     {
  25.         $out[] = $linea;
  26.         $users[] = $user;
  27.     }
  28. }
  29.  
  30. // lo siento, me facilita la visualizacion :)
  31. function debug($arr){
  32.     print_r("<pre>");
  33.     print_r($arr);
  34.     print_r("</pre>");
  35. }
  36.  
  37. debug($out);
  38.  
  39. // vuelvo a escribir el archivo

El resultado es:

Cita:
Array
(
[0] => jesus:3124:2015-06-03
[1] => jovy1:5254:2015-06-03
[2] => jovy2:6485:2015-06-03
[3] => jovy3:6592:2014-05-27
)
----
Otra opcion es no generar un nuevo array sino borrar los elementos que no quieres ahi, consumiria menos memoria pero mas tiempo porque los desplazamientos en los arreglos son costosos :)

Código PHP:
Ver original
  1. <?php
  2.  
  3. $f_users = 'usuarios.txt';
  4.  
  5. // leo el archivo, voy a simularlo:
  6.  
  7. // simulo archivo
  8. $file = <<<'FILE'
  9. jesus:3124:2015-06-03
  10. jovy1:5254:2015-06-03
  11. jovy2:6485:2015-06-03
  12. jesus:3124:2015-06-03
  13. jovy3:6592:2014-05-27
  14. FILE;
  15.  
  16. // simulo lectura por lineas del archivo
  17. $lineas = explode("\n",$file);
  18.  
  19. $users = array();
  20. foreach ($lineas  as $ix => $linea)
  21. {
  22.     list($user,$pass,$date) = explode(':',$linea);
  23.     if (!in_array($user,$users))
  24.     {      
  25.         $users[] = $user;
  26.     }else
  27.         unset ($lineas[$ix]);
  28. }
  29.  
  30. // lo siento, me facilita la visualizacion :)
  31. function debug($arr){
  32.     print_r("<pre>");
  33.     print_r($arr);
  34.     print_r("</pre>");
  35. }
  36.  
  37. debug($lineas);
  38.  
  39. // vuelvo a escribir el archivo

Nota en la ultima version no creo el array $out sino uso unset() para eliminar elementos del array $lineas
__________________
Salu2!

Última edición por Italico76; 13/05/2014 a las 08:13
  #7 (permalink)  
Antiguo 13/05/2014, 14:09
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: eliminar fila en un txt duplicado

no me a funcionado
  #8 (permalink)  
Antiguo 13/05/2014, 18:57
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: eliminar fila en un txt duplicado

Lo quiere todo digerido, eh ? no habia mucho que cambiar para que funcionara con archivos:

Código PHP:
Ver original
  1. <?php
  2.  
  3. # archivo a leer
  4. $f_users = 'usuarios.txt';
  5. $path = '';
  6.  
  7. # abro archivo, lo leo y lo cargo en variable como string y se cierra  
  8. $file = file_get_contents($path.$f_users);
  9.  
  10. # separo enlineas
  11. $lineas = explode("\n",$file);
  12.  
  13. $users = array();
  14. foreach ($lineas  as $ix => $linea)
  15. {
  16.     list($user,$pass,$date) = explode(':',$linea);
  17.     if (!in_array($user,$users))
  18.     {      
  19.         $users[] = $user;
  20.     }else
  21.         unset ($lineas[$ix]);
  22. }
  23.  
  24.  
  25. # sobre-escribo el archivo
  26. file_put_contents($path.$f_users,$lineas);

y en el mismo directorio (para probar) coloque este archivo 'usuarios.txt'

Cita:
jesus:3124:2015-06-03
jovy1:5254:2015-06-03
jovy2:6485:2015-06-03
jesus:3124:2015-06-03
jovy3:6592:2014-05-27
Al ejecutarlo vera que desparece la linea 4 porque se repite
__________________
Salu2!
  #9 (permalink)  
Antiguo 16/05/2014, 15:58
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: eliminar fila en un txt duplicado

mucha gracias perfecto me funciono

Etiquetas: duplicado, fila, txt
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 19:11.