#121 12-09-13 12:57

NAX
Miembro
Calificacion :   49 

Re: Clases: Sistemas de informe automatico

Entrega de material: Operaciones con archivos 1

La primera operación sobre archivos existentes, será "leerlo", linea por linea.

El comando que nos permite abrir un archivo es "open", ejemplo:

open(MYFILE,"<IPSA");

en el ejemplo anterior, open intentará abrir el archivo llamado IPSA, el handler dentro del programa será MYFILE, y cada operación sobre el archivo debe realizarse a través del handler; el simbolo "<" antepuesto al nombre de archivo, indica que el archivo será abierto solo para lectura.

Hasta aquí facilito... para leerlo usaremos "foreach" así:

foreach my $line (<MYFILE>){
    #do something
}

...osea, cada linea de "MYFILE" será leída en la variable $line
(fácil no?)

y finalmente debemos cerrar el archivo, mediante el comando "close", así:

close(MYFILE);

a Continuación les dejo un ejemplo (probado), el cual "recibe por linea de comando un argumento, el cual es el nombre de archivo. Lee el archivo, y cada linea la almacena en unos vectores; finalmente los 4 vectores principales son desplegados por pantalla".

#-------[Spam NAX]-------
use strict;

open ( QUOTES, "<$ARGV[0]" ) or die "cannot open file '$ARGV[0]'";

my @date = ();
my @time = ();
my @open = ();
my @high = ();
my @low = ();
my @close = ();
my @vol = ();
my @oi = ();

foreach my $line ( <QUOTES> )
{
    chomp ( $line );
    if ( $line !=~ /^DATE/ ) {
        my @rowValues = split ( /;/,$line );
        push ( @date, $rowValues[0] );
        push ( @time, $rowValues[1] );
        push ( @open, $rowValues[2] );
        push ( @high, $rowValues[3] );
        push ( @low, $rowValues[4] );
        push ( @close, $rowValues[5] );
        push ( @vol, $rowValues[6] );
        push ( @oi, $rowValues[7] );
    }
}

for ( my $i = 0; $i < scalar ( @date ); $i++ )
{
    printf ( "Open=%f, High=%f, Low=%f, Close=%f\n",
             $open[$i], $high[$i],
             $low[$i], $close[$i]
           );
}

close ( QUOTES );

La forma de ejecutarlo es "perl myProgram.pl IPSA", y el archivo de pruebas que he empleado es el siguiente:

DATE;TIME;OPEN;HIGH;LOW;CLOSE;VOLUME;OI;
20130826;00:00:00;3660.735500;3684.226600;3640.325300;3641.240400;51629024082;0;
20130827;00:00:00;3637.877600;3637.877600;3557.554900;3558.235200;68741094403;0;
20130828;00:00:00;3555.389100;3591.151500;3532.910100;3537.807400;68878595445;0;
20130829;00:00:00;3537.807400;3575.496800;3533.388900;3554.447800;60751080125;0;
20130830;00:00:00;3553.483900;3630.268300;3553.483900;3628.734000;94084282341;0;
20130902;00:00:00;3632.267600;3656.084800;3628.495500;3639.125500;39305177947;0;
20130903;00:00:00;3642.336800;3647.456500;3612.781900;3613.696300;90714700763;0;
20130904;00:00:00;3613.746700;3626.569200;3613.611700;3618.639900;91307542611;0;
20130905;00:00:00;3619.235700;3711.435200;3619.235700;3709.793500;68693620606;0;
20130906;00:00:00;3716.493700;3802.906600;3716.493700;3799.283500;154187443753;0;
20130909;00:00:00;3800.325900;3899.837800;3800.325900;3893.528500;99156061330;0;
20130910;00:00:00;3910.391500;3945.761200;3861.651800;3893.418600;157750651118;0;
20130911;00:00:00;3891.976400;3909.336700;3626.906900;3903.441100;85468431828;0;

Sería interesante si algún paisano pudiera combinar la anterior función SMA con este ejemplo.

Con las clases hasta aquí tenemos suficiente material como para que empiecen a hacer sus informes automáticos, solo deben emplear la imaginación. ahora lo que queda es saber como escribir en archivos, y además juntar la función SMA con la lectura de archivos.

Pasen buenas fiestas, y vuelvo en octubre, me tomaré unas vacaciones, así que no postearé curso hasta que vuelva

chaolin

Desconectado

#122 12-09-13 18:56

stg
Miembro
Calificacion :   10 

Re: Clases: Sistemas de informe automatico

Gracias Nax x el tiempo y conocimientos entregados ad honorem...slds

Desconectado

#123 03-07-15 08:18

oscarsalasf
Miembro
Calificacion :   51 

Re: Clases: Sistemas de informe automatico

Estimados, ¿Qué pasó con este curso? Estaba tan bueno.

Desconectado

Pie de página

Powered by FluxBB