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

Filtrado de datos en archivos .csv

Estas en el tema de Filtrado de datos en archivos .csv en el foro de Programación General en Foros del Web. Hola a todos!! gente, en la empresa en la que estoy, nos han pedido filtrar un archivo .CSV (separado por comas, con 5 "campos" por ...
  #1 (permalink)  
Antiguo 23/04/2007, 20:29
 
Fecha de Ingreso: enero-2003
Mensajes: 25
Antigüedad: 21 años, 3 meses
Puntos: 0
Pregunta Filtrado de datos en archivos .csv

Hola a todos!!

gente, en la empresa en la que estoy, nos han pedido filtrar un archivo .CSV (separado por comas, con 5 "campos" por registro, el primero es el mail), con los datos que existen en otro archivo .TXT y son grandes volumenes de datos.

El .CSV puede tener cerca de 10 MB, contra el .TXT que puede ser mayor de 100 MB (el txt solo tiene una direccion de mail por linea).

O sea, la idea es quitar del CSV todos aquellos registros que se encuentre el mail en el TXT, pero no lo quieren realizar con bases de datos, porque es extremadamente lenta la carga de las mismas...

Alguien podria orientarme sobre que lenguaje seria el mejor para hacerlo, y si no fuera mucho, alguna idea del "como"??

MUCHISIMAS GRACIAS DE ANTEMANO!!!
  #2 (permalink)  
Antiguo 24/04/2007, 03:25
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: Filtrado de datos en archivos .csv

Pues en Perl hay varias formas de hacerlo... Se podría hacer así:
* Leer las direcciones de correo del fichero de texto y meterlas en un hash
* Hacer un bucle por el fichero csv y pintar la línea si la dirección de correo no está en el hash.

Vamos, es tan corto que te lo pongo aquí:

Código:
#!/usr/bin/perl
# Lectura del fichero de texto, las direcciones de correo
%emails = map { chomp $_; $_ => 1 } do{ open(TXT,"<fichero.txt"); <TXT> };

# Abrimos el csv y lo leemos línea a línea
open(CSV,"<fichero.csv");
while ( <CSV> ) {
    ($email) = split(/,/,$_,2);             # email del csv
    print if not exists $emails{ $email };  # pintar si no le tenemos
}
close CSV;
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:00.