Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

1. Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 21/09/2017 - 17:11h

Tenho um script em perl que serve para gerar uma planilha a qual deve ser preenchida com os valores passados por parâmetro via shell. Por exemplo, supondo que eu queira gerar uma planilha assim:

Nome Completo Idade
Joaozinho da Silva 18
Mariazinha Oliveira 20

O script é chamado da seguinte forma: ./script.pl "'Nome Completo', 'Idade'" "'Joaozinho da Silva', 'Mariazinha Oliveira'" "18, 20" Onde áspas duplas delimitam cabeçalho, coluna A e coluna B respectivamente.

O trecho de código que interessa aqui é:

my $cabecalho = [ @ARGV[0] ];
my $dados = [
[ @ARGV[1] ],
[ @ARGV[2] ],
];
Em perl, como se sabe, a variável especial ARGV armazena parâmetros passados externamente.

O script.pl executa sem erros e sem warnings, mas o PROBLEMA é que a planilha é gerada assim:
'Nome Completo', 'Idade' 0
'Joaozinho da Silva', 'Mariazinha Oliveira' 18, 20
0 0
0 0

Ou seja, foi interpretada como uma célula literalmente cada um dos 3 parâmetros passados.
O curioso é que se eu informar manualmente no script, a planilha é gerada corretamente:
my $cabecalho = [ 'Nome Completo', 'Idade' ];
my $dados = [
[ 'Joaozinho da Silva', 'Mariazinha Oliveira' ],
[ 18, 20 ],
];

Alguém sabe como resolver isso ou por que está acontecendo isso?



  


2. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 21/09/2017 - 17:42h

Já tentou "escapar" as aspas desejadas?

$ echo "\"Isso\" é um 'simples' teste para \"escapar\" \"aspas\"."
"Isso" é um 'simples' teste para "escapar" "aspas".



3. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 21/09/2017 - 18:01h

Não tem nenhuma relação com o comando echo amigo. Trata-se de perl.


4. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 21/09/2017 - 18:06h

Eu sei disso! Usei o echo só pra ilustrar a situação do uso de aspas no shell. ;)

Veja:

# Veja o que o shell faz quando você não escapa as aspas:
$ echo ""Isso" é um 'simples' teste para "escapar" "aspas"."
Isso é um 'simples' teste para escapar aspas.


# E agora escapando-as:
echo "\"Isso\" é um 'simples' teste para \"escapar\" \"aspas\"."
"Isso" é um 'simples' teste para "escapar" "aspas".


Percebe a diferença?

Antes de passar os argumentos para o seu script em Perl, o shell vai tentar 'resolver" os argumentos passados, e só depois entregá-los ao Perl.


5. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 21/09/2017 - 18:40h

Sim amigo entendi. Realizei o teste mas não surtiu efeito.


6. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Daniel Vinciguerra
dvinciguerra

(usa Debian)

Enviado em 21/09/2017 - 20:34h

Boa noite mlgrassi,

O problema não esta no perl mas sim em como você esta usando as variáveis...

A variável @ARGV é uma variável do tipo array, porem sempre para acessar seus valores escalares nó precisamos usar o símbolo $ conforme o exemplo seguinte.

my $param1 = $ARGV[0];
my $param2 = $ARGV[1];
my $param3 = $ARGV[2];
...

Outra coisa que é que você esta passando uma string como parâmetro e querendo que o perl interprete isso como uma lista, mas sem fazer a divisão ou alterar seu input isso não vai acontecer.

Agora a solução....
Pra você ter uma estrutura próxima da que você descreveu você pode iterar sobre os seus parâmetros e "splita-los" usando a virgula como padrão
pra obter uma nova lista a partir de uma string. Só ai então você terá a estrutura de array de arrays que você descreveu.


use 5.20.0;
use strict;

# data example
# $ script.pl "'Nome Completo', 'Idade'" "'Joaozinho da Silva', 'Mariazinha Oliveira'" "18, 20"

# getting informations
my ($header, @data) = @ARGV;
my $rows = [map { [split(/,/, $_)] } @data];

use Data::Dumper;
print Dumper $header;
print Dumper $rows;
# output
$VAR1 = "'Nome Completo', 'Idade'";
$VAR1 = [
['Joaozinho da Silva',' Mariazinha Oliveira'],
['18',' 20' ]
];


Note que a variável do header permanece como uma string (scalar) ;)

Espero ter ajudado.
Grande abraço



7. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 21/09/2017 - 22:06h

Na realidade ajudou a esclarecer e em parte com certeza pois já fez com que o script executasse.

No entanto, como faço para substituir VAR1 e VAR1 por respectivamente outras variáveis como por exemplo $cabecalho e $valores ?

Outra coisa, na saída da execução, onde tem uma áspa simples, antes é inserida uma barra invertida: \'

Poderias me ajudar?

Peço desculpas, pois sou iniciante em perl.


8. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Daniel Vinciguerra
dvinciguerra

(usa Debian)

Enviado em 21/09/2017 - 22:19h

mlgrassi escreveu:

Na realidade ajudou a esclarecer e em parte com certeza pois já fez com que o script executasse.

No entanto, como faço para substituir VAR1 e VAR1 por respectivamente outras variáveis como por exemplo $cabecalho e $valores ?

Outra coisa, na saída da execução, onde tem uma áspa simples, antes é inserida uma barra invertida: \'

Poderias me ajudar?

Peço desculpas, pois sou iniciante em perl.



Opaaa, não tem problema! Relaxa! :)

VAR1 na verdade é apenas um nome de variável que é usado pelo modulo Data::Dumper, e este módulo por sua vez é usado para imprimir as estruturas perl (que é bem util pra debugar variáveis e estruturas de dados).

Vamos nos atentar ao código abaixo:


use 5.20.0;
use strict;

# data example
# $ script.pl "'Nome Completo', 'Idade'" "'Joaozinho da Silva', 'Mariazinha Oliveira'" "18, 20"

# getting informations
my ($cabecalho, @data) = @ARGV;
my @valores = map { [split(/,/, $_)] } @data;


Agora você pode usar as variáveis $cabecalho e @valores, onde para acessar as linhas você pode usar $valores[0], $valores[1], ...

No caso das barras invertidas, elas são inseridas para demonstrar que estão "escapando" as aspas simples contidas nas strings. Se não quiser elas basta apenas não passar nos parâmetros! :)

Tente passar assim:
$ script.pl "Nome Completo, Idade" "Joaozinho da Silva, Mariazinha Oliveira" "18, 20"

Qualquer coisa da um toque.
Grande abraço,


9. Re: Problema: Script perl para gerar planilha excel não gera corretamente os dados nas linhas

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 21/09/2017 - 22:44h

Cara tá quase, os dados foram preenchidos corretamente, só o cabeçalho que apareceu os dois na mesma célula.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts