Foros del Web » Programación para mayores de 30 ;) » Programación General »

eliminar filas de un fichero

Estas en el tema de eliminar filas de un fichero en el foro de Programación General en Foros del Web. Hola; Tengo la siguiente duda a ver si alguine puede ayudarme por favor: Tengo un fichero de esta forma: RNC421;NAVB51211;50503;NAVB51211-RIOB51001 RNC421;NAVB51211;51212;NAVB51211-NAVB51212 RNC421;NAVB51212;50503;NAVB51212-RIOB51001 RNC421;NAVB51212;50506;NAVB51212-RIOB51011 RNC421;NAVB51212;50509;NAVB51212-RIOB51021 RNC421;NAVB51212;50510;NAVB51212-RIOB51022 ...
  #1 (permalink)  
Antiguo 09/03/2010, 08:48
 
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 15 años, 8 meses
Puntos: 0
eliminar filas de un fichero

Hola;

Tengo la siguiente duda a ver si alguine puede ayudarme por favor:

Tengo un fichero de esta forma:

RNC421;NAVB51211;50503;NAVB51211-RIOB51001
RNC421;NAVB51211;51212;NAVB51211-NAVB51212
RNC421;NAVB51212;50503;NAVB51212-RIOB51001
RNC421;NAVB51212;50506;NAVB51212-RIOB51011
RNC421;NAVB51212;50509;NAVB51212-RIOB51021
RNC421;NAVB51212;50510;NAVB51212-RIOB51022
RNC421;NAVB51212;50515;NAVB51212-RIOB51041
RNC132;CLMB87401;52437;CLMB87401-CLMB87403
RNC132;CLMB87402;52437;CLMB87402-CLMB87403
RNC132;CLMB87402;52450;CLMB87402-CLMB30541
RNC132;CLMB87402;52451;CLMB87402-CLMB30542
RNC132;CLMB87403;52435;CLMB87403-CLMB87401
RNC132;CLMB87403;52436;CLMB87403-CLMB87402


El caso es que necesito recorrer cada una de ellas para hacer una comprobacion (grep $variable) en otro fichero, y quiero que esa $variable sea el primer casmpo de cada linea ( RNC421, RNC132..).
El caso es que quiero que comprube ese primer campo una sola vez y no todas las veces que aparezca en el fichero (ya que como se ve aparece en varias lineas por ejemplo RNC421).

Quiero hacer esto porque hay muchas líneas que recorrer y me ralentiza la ejecucion muchisimo.

Gracias
  #2 (permalink)  
Antiguo 11/03/2010, 03:41
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: eliminar filas de un fichero

Si solo quieres ver si existe o no esa cadena, en el fichero, te vale con salir inmediatamente del bucle, en caso de encontrarlo:

Código Perl:
Ver original
  1. my $lo_encontre;
  2.  
  3. while (<$FICHERO>) {
  4.     if (/^RNC421;/) {
  5.         $lo_encontre = 1;
  6.         last;                        # salimos ¡YA!
  7.     }
  8. }
  9.  
  10. if ($lo_encontre) {
  11.     say '¡Encontrado!';
  12. }
Lo principal es la expresión regular, con el '^' puesto, para hacer la consulta lo más rápida posible.
__________________
JF^D Perl Programming en Español

Última edición por jferrero; 11/03/2010 a las 03:48
  #3 (permalink)  
Antiguo 10/04/2010, 23:18
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 14 años, 3 meses
Puntos: 7
Busqueda Respuesta: eliminar filas de un fichero

Sería:

Código PHP:

if (open(my $handle,'fichero.txt')){

      
#Negar modificación
       
flock $handle1;

      
#Abrimos y cargamos a memoria
      
open (my $parse'acahagoelgrep.txt') or die "$!\n";

      
#Negar modificación
      
flock $parse1;

       
#Todo a memoria
       
my @todo = <$parse>;

       
#cerramos
       
close $parse;

      
#Declaro contexto
      
my $last;

      while (<
$handle>){
              
              
#perl sabe que sólo necesita el primer índice, por lo que lo extrae y se detiene, optimizando el tiempo de ejecución. 
              
$_ =  (split(';'))[0];

             
#Si anterior es igual a actual, continuo, case sensitive
              
next if $last && $last eq $_;

              
#Actualizo variable
              
$last $_;

               if (
scalar grep(/$last/,@todo)){
                      print 
"Lo encontre!!\n";
               }

      }

    
close $handle;



Última edición por abcdefghi; 11/04/2010 a las 07:30

Etiquetas: eliminar, fichero, filas
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 15:36.