Página 1 de 2

Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-16 14:14 @634
por andratec
Estimados:

Un gusto saludarles, mi nombre es Alex y les comento que estoy trabajando con un sistema OTRS, por lo cual necesito realizar un módulo personalizado dentro de OTRS.

Pero hasta el momento es mi primer vez que veo este lenguaje y no tengo muy claro cómo hacerlo. Lo que tengo es lo siguiente.

Ambiente: máquina virtual de Amazon con CentOS 6.5.

1. Di permisos al cgi-bin y creé una plantilla con la interfaz del usuario para subir al servidor el archivo csv.
2. Ahora necesito buscar este mismo archivo csv y poder leerlo y extraer columnas como el correo, nombre, etc.
3. El archivo está en la ruta /home/importados con todos los permisos.

Este ejemplo lo encontré en la web y lo pegué a lo que estoy probando...

##################################################################################################
#!/usr/bin/perl

use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use CGI;

my $ruta = "/home/importados/nomina.csv";
open(my $ruta, '<', $file) or die "No puedo abrir el fichero '$file' $!\n";

my $file = $ARGV[0] or die "Necesito un fichero CSV como parámetro\n";

my $sum = 0;
open(my $data, '<', $file) or die "No puedo abrir el fichero '$file' $!\n";

while (my $line = <$data>) {
chomp $line;

my @fields = split "," , $line;
$sum += $fields[2];
}

#####################################################################################################

Al ejecutar en el navegador solo obtengo "Necesito un fichero CSV como parámetro".

El problema asumo que está en cómo buscar la ruta y abrir el archivo. Cualquier ayuda se los agradezco.

¡Saludos desde Chile!

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-16 14:46 @657
por explorer
Bienvenido a los foros de Perl en Español, andratec.

Me parece que has copiado mal el código, porque en la línea 9 estás usando la variable $file, pero esa variable la defines en la línea 11.

Si ejecutas el código con la opción -c, el propio Perl te lo dice:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -c kk.pl
  2. CGI::Carp will be removed from the Perl core distribution in the next major release. Please install it from CPAN. It is being used at kk.pl, line 5.
  3. [Sun Nov 16 20:35:04 2014] CGI.pm: CGI will be removed from the Perl core distribution in the next major release. Please install it from CPAN. It is being used at kk.pl, line 6.
  4. [Sun Nov 16 20:35:04 2014] kk.pl: "my" variable $ruta masks earlier declaration in same scope at kk.pl line 9.
  5. Status: 500
  6. Content-type: text/html
  7.  
  8. <h1>Software error:</h1>
  9. <pre>Global symbol &quot;$file&quot; requires explicit package name at kk.pl line 9.
  10. Global symbol &quot;$file&quot; requires explicit package name at kk.pl line 9.
  11. kk.pl had compilation errors.
  12. </pre>
  13. <p>
  14. For help, please send mail to this site's webmaster, giving this error message
  15. and the time and date of the error.
  16.  
  17. </p>
  18. [Sun Nov 16 20:35:04 2014] kk.pl: Global symbol "$file" requires explicit package name at kk.pl line 9.
  19. [Sun Nov 16 20:35:04 2014] kk.pl: Global symbol "$file" requires explicit package name at kk.pl line 9.
  20. [Sun Nov 16 20:35:04 2014] kk.pl: kk.pl had compilation errors.
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Programar con copia/pega... tiene estos resultados.

Por estos foros hay más hilos que hablan de cómo leer archivos CSV con Perl.

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-16 15:24 @683
por andratec
Sí está mal, como dices. No fue precisamente copy/paste ya que lo he modificado al original.

¿Qué editor me recomiendas? Ya que hasta ahora solo estoy por consola y usando el vi... Pero quiero hacer un ambiente en Windows precisamente para poder ejecutar y ver errores como el que me mencionas tú...

¡¡Gracias!!

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-16 19:48 @867
por explorer
En Windows tienes el Notepad++, por ejemplo. Pero hay más opciones. Yo suelo usar joe, vim y Eclipse con e-p-i-c.

Pero si estás en un "entorno vi" eso quiere decir que estás en un UNIX/Linux, así que ya tienes el Perl instalado, por lo que puedes ejecutar inmediatamente -en otra consola o terminal-.

En Windows, debes instalarlo antes.

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-17 05:17 @261
por Tizianatellez
¡Muchas gracias por la ayuda!

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-17 13:28 @603
por andratec
¡Gracias por su ayuda!

Al ejecutar ya no me da errores, pero solo me está imprimiendo esto:

GLOB(0x7fab341ccbb0)

en vez de los campos del csv... ¿Alguna pista?

Perdón, quizás son errores muy básicos, pero llevo menos de una semana viendo Perl.

¡Gracias!

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-17 13:33 @606
por explorer
Sin ver el código, es difícil.

Si sale eso en pantalla, es porque se está imprimiendo un bareword (palabra simple), que podría ser un gestor de archivo. Es muy posible que en el print haya una coma demás.

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-17 13:43 @613
por andratec
Es casi similar al del principio... Aquí va:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub procesar_archivo {
  2.  
  3.     my $file = "/home/importados/csva2.csv";
  4.  
  5.     #$file = $ARGV[0] or die "Necesito un fichero CSV como parámetro\n";
  6.  
  7.     my $sum = 0;
  8.     open( my $data, '<', $file ) or die "No puedo abrir el fichero '$file' $!\n";
  9.  
  10.     while ( my $line = <$data> ) {
  11.         chomp $line;
  12.  
  13.         my @fields = split ",", $line;
  14.         $sum += $fields[3];
  15.     }
  16.     print "$sum";
  17. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ahora al imprimir la variable suma me da "0"... :/

La cabecera y la primera línea del csv es esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. solicitud ,rut ,Nombre del Suscriptor ,indica quien tiene foto registrada,Correo,Codigo Visita,Status,Vigencia,Tipo,Fono,Rut Emp,Empresa,Dirección,Comuna,Obs Bco,Coord,Clave Confirmacion,Serial, Mandante
  2.  30315  (P :25xx3) , 1248xxxx1-2 ,Patricio Andrés Rojas Shaxxxxx,  ver foto de Patricio Andrés Rojas Sharovskyver pantallazo de Patricio Andrés xxxxx Shxxxxx, [email protected] ,,"Valid Ultimo Probar firma: fecha: 22/07/2014 16:34:58 ip: 200.10.236.226 ", 05/11/2013 - 07/11/2014,Avanzada,,,,,-,,,, 2xxxxxxxxxxxxxxxxxx112d9fb,OutSourcing
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-17 14:03 @627
por explorer
El cuarto campo no es numérico, ¿no? Dificílmente vas a poder sumarlos...

Re: Cómo leer un archivo CSV guardado en servidor

NotaPublicado: 2014-11-17 14:08 @631
por andratec
Hummm, entiendo, entonces para extraer por ejemplo el nombre del suscriptor y el correo, ¿cómo debería hacerlo, por el número de array? La idea es mostrarlo en una lista y enviar un mensaje a cada uno...

¡Gracias nuevamente por tu ayuda!