checar usuarios de uma lista [RESOLVIDO]

1. checar usuarios de uma lista [RESOLVIDO]

cléo
sayde

(usa Outra)

Enviado em 04/06/2016 - 18:03h

Boa noite gostaria de ajuda gostaria que meu código fizesse o seguinte eu teria uma lista com nomes chamada users.txt no código
open(USUARIOS,"< ./users.txt") or die "users.txt not found\n";
chomp(my @user = <USUARIOS>);

essa parte iria ler o arquivo e colocar todos os nomes na escalar @user
queria saber como fazer um if pra checar se qualquer usuário do array ele continuar o código se não encerrar


  


2. Re: checar usuarios de uma lista [RESOLVIDO]

Daniel Vinciguerra
dvinciguerra

(usa Debian)

Enviado em 04/06/2016 - 20:49h

Ola,

Primeira coisa, use sempre 3 parâmetros para abrir arquivos, isso garante um pouco mais de segurança na hora de abrir file handlers.

Estou imaginando que você tem uma lista de usuários parecida com isso:

users.txt

João Ferreira
Carlos Eduardo
Daniel Silva
Marcos Alberto


Então você poderia fazer o ser código da seguinte forma:


my $users = [];

# abre o arquivo
open my $file, '<', 'users.txt' or die "Não foi possível abrir o arquivo users.txt";

# le todas as linhas para o array users
while(my $line = <$file>){
chomp $line;
push @$users, $line
}
close $file;

# verefica se existe algum registro
if(scalar(@$users)){
# ... continua o processamento
use Data::Dumper;
say Dumper $users
}


Espero que isso resolva.

Abs


3. Re: checar usuarios de uma lista [RESOLVIDO]

cléo
sayde

(usa Outra)

Enviado em 04/06/2016 - 21:09h

seria quase isso basicamente a ideia do código é funcionar como um mini login aonde essa parte seria o servidor ele leria todos os usuários autorizados no arquivo users.txt e o client enviaria um usuário se o nome do usuário fosse igual a algum dos nomes que estivessem no users.txt ele continuaria se fosse algum usuário que não estivesse listado encerraria


4. Re: checar usuarios de uma lista [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 04/06/2016 - 21:14h

sayde escreveu:

Boa noite gostaria de ajuda gostaria que meu código fizesse o seguinte eu teria uma lista com nomes chamada users.txt no código
open(USUARIOS,"< ./users.txt") or die "users.txt not found\n";
chomp(my @user = <USUARIOS>);

essa parte iria ler o arquivo e colocar todos os nomes na escalar @user
queria saber como fazer um if pra checar se qualquer usuário do array ele continuar o código se não encerrar


'@user' não é escalar, é array. Scalar seria '$user'.

O código sugeriu-me um "file slurp" para array, desta forma:


chomp ( my @user = do { local @ARGV = '/etc/passwd'; <> } );


Mas isto não é código que se usa em produção então use por favor a solução do colega dvinciguerra.

A parte do teste eu não entendi muito bem. Seria por exemplo, se existir o usuário 'textmode' o código faz um procedimento e outro do contrário? Exemplo:


my $skip_user = 'textmode';
if ( ! grep { $_ eq $skip_user } @user ) {
printf 'O %s nao esta\n', $skip_user;
}
else {
printf 'O %s esta\n', $skip_user;
}


[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
https://perspicazsite.wordpress.com


5. Re: checar usuarios de uma lista [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 04/06/2016 - 21:33h

sayde escreveu:

seria quase isso basicamente a ideia do código é funcionar como um mini login aonde essa parte seria o servidor ele leria todos os usuários autorizados no arquivo users.txt e o client enviaria um usuário se o nome do usuário fosse igual a algum dos nomes que estivessem no users.txt ele continuaria se fosse algum usuário que não estivesse listado encerraria


Entendi um pouco melhor. Esse código é exercício acadêmico ou é profissional? Quantos usuários e quantas consultas por segundo são esperados?


6. Re: checar usuarios de uma lista

cléo
sayde

(usa Outra)

Enviado em 04/06/2016 - 22:24h

textmode escreveu:

Entendi um pouco melhor. Esse código é exercício acadêmico ou é profissional? Quantos usuários e quantas consultas por segundo são esperados?


acadêmico, de 2 a 4 consultas seu código funcionou bem só estou com um único problema agora preciso escrever um comentário na frente do usuário mais tem que ser ignorado pelo script
exemplo
Cléo # está abaixo do peso
Rafael # está acima do peso
Lucas # está no peso ideal





7. Re: checar usuarios de uma lista [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 05/06/2016 - 00:03h

sayde escreveu:

textmode escreveu:

Entendi um pouco melhor. Esse código é exercício acadêmico ou é profissional? Quantos usuários e quantas consultas por segundo são esperados?


acadêmico, de 2 a 4 consultas seu código funcionou bem só estou com um único problema agora preciso escrever um comentário na frente do usuário mais tem que ser ignorado pelo script
exemplo
Cléo # está abaixo do peso
Rafael # está acima do peso
Lucas # está no peso ideal




Agora você verá porque o código do dvinciguerra é melhor. Mas vou mostrar primeiro como ficaria usando a minha sugestão:


my @user = do { local @ARGV = '/tmp/user.txt'; map { (/^(.*?)\s*#/)[0] } <>; };


Daí eu lhe perguntou: O que aconteceu aí?

Agora compare com esta opção:


my $file = '/tmp/user.txt';
open my $fh, '<', $file or die $!;
my @user;
while ( my $line = readline $fh ) {
my ( $user, $comment ) = split /\s*#\s*/, $line, 2;
push @user, $user;
}
close $fh;


Tenho certeza que consegue ler este código. Sem falar que possíveis modificações/melhorias são muito mais fáceis de serem implementadas.

Pode-se considerar também a utilização de hash ao invés de array. Agiliza as consultas à estrutura de dados, ainda que não tenha certeza que você perceba alguma diferença por conta da pouco demanda de consultas.

Como você mencionou no início, realmente precisa ser cliente-servidor?


8. Re: checar usuarios de uma lista [RESOLVIDO]

cléo
sayde

(usa Outra)

Enviado em 06/06/2016 - 14:45h

Muito obrigado a todos que me ajudaram


9. Re: checar usuarios de uma lista [RESOLVIDO]

cléo
sayde

(usa Outra)

Enviado em 06/06/2016 - 18:48h

o código ficou assim
 my $file = './keys.txt';
open my $fh, '<', $file or die $!;
my @keys;
while ( my $line = readline $fh ) {
my ( $keys, $comment ) = split /\s*#\s*/, $line, 2;
push @keys, $keys;
}
close $fh;

my $args->{individualkey} = 'teste';

if ( ! grep { $_ eq $args->{individualkey} } @keys ) {
print "Key invalida \n";
return $self;
}


mais acabei tento problemas, acontece o seguinte algumas solicitações são respondidas e outras acabam não sendo respondidas como faria pra ficar mais rápido o código para responder todas?


10. Re: checar usuarios de uma lista [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 06/06/2016 - 23:09h

sayde escreveu:
[...]
mais acabei tento problemas, acontece o seguinte algumas solicitações são respondidas e outras acabam não sendo respondidas como faria pra ficar mais rápido o código para responder todas?


Teria como explicar melhor o ambiente que você tem? Eu não consegui entender onde os problemas se encaixariam no código.


11. Re: checar usuarios de uma lista [RESOLVIDO]

cléo
sayde

(usa Outra)

Enviado em 06/06/2016 - 23:47h

consegui resolver o problema usando hash meu código ficou assim
my $file = './keys.txt';
open my $fh, '<', $file or die $!;
my %keys_hash;
while (<$fh>) {
chomp;
s/\s*#.+//;
next unless ($_);
$keys_hash{$_} = undef;
}
close $fh;


foreach my $received_key ($args->{individualkey}) {
unless ( exists $keys_hash{$received_key} ) {
print "Key invalida encontrada: '".$received_key."'.\n";
}
}







Patrocínio

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts