Lázaro, acho que o Tie::Handle::CSV resolve todos os seus problemas: http://sao-paulo.pm.org/equinocio/2011/mar/17
ABS() 2011/6/13 Solli Honorio <[email protected]> > > > Em 12 de junho de 2011 13:02, Blabos de Blebe <[email protected]> escreveu: > > Lázaro, vamos por partes, >> >> Eu não consegui reproduzir o seu problema aqui, mas como vc mandou o >> script eu vou fazer alguams crífticas construtivas que poderão te >> salvar de muitas dores de cabeça no futuro, ou presente, sei lá >> >> 1) Nunca, nunca mesmo faça qualquer código sem começar com as linhas: >> >> use strict; >> use warnings; >> >> Se possível pode trocá-las por: >> >> use Modern::Perl; >> >> Como diz o manual, "strict - Perl pragma to restrict unsafe >> constructs", ou seja, vai restringir o uso de construc'ões inseguras. >> >> http://perldoc.perl.org/strict.html >> http://perldoc.perl.org/warnings.html >> >> 2) Na forma que você utilizou, não vejo tanto problema, mas executar >> qualquer comando externo, passando comandos e caracteres especiais pro >> shell (>) quase sempre abre uma brecha monstruosa de segurança. >> Prefira utilizar módulos que fazem isso pra vc, te poupando de se >> preocupar com os detalhes chatos, tipo o IPC::Open3 >> >> http://search.cpan.org/perldoc?IPC::Open3 >> >> 3) Jamais utilize open com 2 argumentos. Isso também pode adicionar >> uma falha de segurança de proporções épicas. O comando open por razões >> históricas também pode ser utilizado para comunicação iterprocessos, o >> que pode ser um efeito colateral indesejado na maioria dos casos. >> >> http://perldoc.perl.org/functions/open.html >> >> > Dúvidas da melhor maneira de trabalhar com arquivo (não aborda unicode), dê > uma olhada ! > http://sao-paulo.pm.org/artigo/2010/analisedastecnicasparaabrirelerarquivos > > >> 4) Nunca permita que uma entrada de usuário vá diretamente para algum >> comando, principalmente open, como nas linhas: >> >> while($nome=<IN>){ >> open EST,"<$dirin\\$nome"; >> >> Uma linha vianda de um arquivo, também conta como "entrada de usuário". >> >> 5) Use CPAN >> >> Por exemplo você poderia ter utilizado os módulos para tratamento de >> CSV por exemplo, pra manipular os seus arquivo, como o Text::CSV. >> >> ... >> >> No mais, fique esperto com arquivos textos que vc leva de um sistema >> pra outro, porque além dos encodings (que o stan pode te ajudar), tem >> problemas com terminadores de linha, os famosos \n, \r\n, \n\r, >> blablabla. >> >> No mais, sempre que precisar, faça como fez, mande o trecho de código >> e exemplos. Códigos grandes ficam melhores num pastebin da vida. >> >> []'s >> >> 2011/6/10 Oscar Marques <[email protected]>: >> > <off> >> > Bolivia? >> > Que parada é aquela la? >> > Morei anos por la. >> > Até. >> > </off> >> > >> > 2011/6/10 Renato Santos <[email protected]> >> >> >> >> Só um dica, >> >> este arquivo está [provavelmente] em UTF16: >> >> $ file /home/renato/Downloads/alalay_1971.txt >> >> /home/renato/Downloads/alalay_1971.txt: Little-endian UTF-16 Unicode >> text, >> >> with CRLF, CR line terminators >> >> então você pode tentar fazer isto: >> >> >> >> open IN, '<:encoding(utf-16)' , "arquivos.dat"; >> # IN = arquivos.dat >> >> >> >> >> >> 2011/6/10 Solli Honorio <[email protected]> >> >>> >> >>> Lázaro, >> >>> Eu acho que o teu problema é com unicode, dê uma >> >>> olhada http://sao-paulo.pm.org/equinocio/2011/mar/4 e vê se isto >> resolve o >> >>> teu problema. >> >>> Solli M. Honório >> >>> >> >>> 2011/6/10 José Lázaro Siqueira Júnior <[email protected]> >> >>>> >> >>>> Utilizo o windows vista e estou com problemas na leitura de um >> arquivo >> >>>> ascii, pois, entre os caracteres de cada variavel, o perl esta sendo >> >>>> atribuindo automaticamente um espaço. Por exemplo: >> >>>> >> >>>> DATOS DE : TEMPERATURA MEDIA AMBIENTE DIARIA (ºC) (AÑO: 1971) >> >>>> >> >>>> D A T O S D E : T E M P E R A T U R A M E D I A A M B I E N T >> E D >> >>>> I A R I A ( º C ) ( A Ñ O : 1 9 7 1 ) >> >>>> >> >>>> O estranho é que já rodei o mesmo script sem problemas p/ outras >> bases >> >>>> de dados, que seguem o mesmo padrão dos arquivos de entrada(anexo), >> porém, >> >>>> com estes dados não obtive sucesso. >> >>>> >> >>>> Segue anexo os dados de entrada e o script perl. >> >>>> >> >>>> Obrigado, >> >>>> >> >>>> Lázaro >> >>>> >> >>>> =begin disclaimer >> >>>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> >>>> SaoPaulo-pm mailing list: [email protected] >> >>>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> >>>> =end disclaimer >> >>>> >> >>> >> >>> >> >>> >> >>> -- >> >>> "o animal satisfeito dorme". - Guimarães Rosa >> >>> >> >>> =begin disclaimer >> >>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> >>> SaoPaulo-pm mailing list: [email protected] >> >>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> >>> =end disclaimer >> >>> >> >> >> >> >> >> >> >> -- >> >> Renato Santos >> >> http://www.renatocron.com/blog/ >> >> >> >> =begin disclaimer >> >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> >> SaoPaulo-pm mailing list: [email protected] >> >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> >> =end disclaimer >> >> >> > >> > >> > >> > -- >> > Oscar Marques >> > [email protected] >> > http://www.dunkelheit.com.br >> > @f117usbr >> > +55 21 9293-9343 >> > >> > ------------------------------------ >> > Participe do I Hack'n Rio >> > ------------------------------------ >> > >> > >> > =begin disclaimer >> > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> > SaoPaulo-pm mailing list: [email protected] >> > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> > =end disclaimer >> > >> > >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> >> > > > -- > "o animal satisfeito dorme". - Guimarães Rosa > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
