• Publicidad

Ayuda, ordenando lista de palabras

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor explorer » 2006-08-23 07:16 @344

La primera opción sí que es la más interesante, MAX_SORT_RECORDS. Quiere decir que por defecto, trabajará con 200.000 líneas antes de empezar a guardar sus resultados a ficheros temporales. En tu caso, tienes que hacer la cuenta: ¿Cuánta memoria libre dispongo para ejecutar la tarea? Si suponemos que sólo está arrancado el sistema operativo y el intérprete Perl, en un Windows, quizás te queden libres 600Mb (con el módulo Win32::SystemInfo se puede saber). Luego, divides esa memoria libre entre la media de lo que ocupa cada línea de tu fichero.
Así sabrás el número de líneas que pueden entrar a la vez en la memoria de tu equipo. Luego arranca el programa de ordenación con ese valor y estarás seguro de que la utiliza al máximo.
Si el número de líneas leídas supera esa cantidad, empezará a usar ficheros temporales, lo que será el proceso más lento.
Y el MAX_SORT_FILES puede ser un valor muy alto. En un Windows moderno quizás puedas poner 200 (no estoy seguro... a mí Microsoft ya no me importa :-))
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Notapor Zeokat » 2006-08-23 07:48 @366

Bien calculos echos tirando por lo bajo para evitar problemas....

Segun mis claculos le puedo poner 15.000.000 de lineas.. .como añado esa opcion a mi script en perl... estaria bien esto?

Código: Seleccionar todo
#!/bin/perl
use File::Sort qw(sort_file);
sort_file({
    I => 'fichero_desordenado.txt',
    o => 'fichero_ordenado.txt',
    u => 1,                          # Líneas únicas
    y => 15000000,             # Límite lineas
    F => 100,                      # Límite archivos temporales

  });



Estaria bien puesto el 15000000 o hay q ponerlo 15,000,000 .... con comas... eso lo saco porque como en tu respuesta dices q por defecto usa 200000 lineas pero en cpan el numero es 200,000 es decir tiene una coma... no te habras confundido y son 200 lineas en vez de 200000?

Gracias de antemano, otra vez :wink:
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor explorer » 2006-08-23 08:18 @387

Los ingleses usan la coma para separar los miles... nosotros, los puntos.

En Perl, un número muy grande se puede poner de dos formas distintas: 15000000 y 15_000_000.
La segunda forma, naturalmente, sirve para poder leerlos de forma más cómoda.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2006-08-23 08:29 @395

La opción D de debug te irá diciendo qué es lo que va haciendo el programa, que, en tu caso, un proceso muy largo, es muy recomendable.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Zeokat » 2006-08-23 08:32 @397

Otra cosilla... el codigo del script esta bien.. vamos no ha y errores... ???? esq como lo escribi yo q no tengo n.p.i de perl...

Y como añado el debug, es decir la opción D ? (esq con esa opción ya no veo ningún ejemplo en cpan)
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor Zeokat » 2006-08-23 08:47 @408

vale ya arregle yo... e lcodigo se queda asi al final...

Código: Seleccionar todo
#!/bin/perl
use File::Sort qw(sort_file);
sort_file({
    I => 'lista.txt',
    o => 'fichero_ordenado.txt',
    u => 1,                          # Líneas únicas
    y => 15000000,             # Límite lineas
    F => 100,                      # Límite archivos temporales
    D => 1,                       #Activa el Debugger
  });
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor Zeokat » 2006-08-23 10:05 @462

Nada... esto es lentisimo y si le meto una lista unq sea de 96 MB ya se me cuelga .... volveré al metodo antiguo.... en dos horas ya lo soluciono.... estuvo bien esta toma de contacto con perl jejeje


De todas maneras gracias por vuestro tiempo y vuestra ayuda. :wink:
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor explorer » 2006-08-23 10:24 @475

En vez de 15 millones, vete bajando la cifra. Ten en cuenta que al estar almacenadas las líneas en memoria, dentro de un array, eso consume unos cuantos bytes más, por línea.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Zeokat » 2006-08-23 13:37 @609

Ya el problema es la velocidad.... ya solo para una lisa de 96 MB le lleva horas y horas.... mientras q con e lprograma para windoes 96 Mb me la ordena y quita duplicados en menos 1 minuto... Simplemente por eso.. aunq tenga q hacer yo varios clicks (bastantes al ser una lista de 1,8 GB) pues siempre me vale la pena... ademas q en los ultimos intentos ya ni me creaba el archivo:ordenado.txt .... Gracias de todas maneras.
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor explorer » 2007-04-27 19:13 @842

Casi ha pasado un año desde que este hilo se cerró, con los problemas de velocidad y memoria de Zeokat en Windows.

Quizás lo comentado en el hilo viewtopic.php?p=7692#7692 aclare la situación un poco.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados