Jump to content


Photo

Localizar Uma Sequência De Texto Em 1 Arquivo


  • Faça o login para participar
22 replies to this topic

#1 Hospedar-se .Com

Hospedar-se .Com

    Super Veterano

  • Usuários
  • 1500 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 12/01/2005, 13:40

Estou tentando a dias fazer com que meu código localize em um texto uma sequencia de palavras, o problema é que estão uma em cada linha.

arquivo: texto.txt

<seila aaaa>
user aaaa
grupo aaaa
</seila>

<seila bbb>
user bbb
grupo bbb
</seila>

<seila ccc>
user ccc
grupo ccc
</seila>


No caso, meu script abre esse arquivo, e tentaria procurar por
<seila bbb>
user bbb
grupo bbb
</seila>
mas mesmo se eu colocar somente

@busca =~ /user bbb/

isso é depois do open ... ele não retorna nada.

Alguem sabe como posso fazer pra ele buscar a sequencia inteira?

#2 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 12/01/2005, 15:47

Não testei mas ve se dá certo:

$valores = ($vem_do_foreach=~ m#<seila bbb>\s*(.*?)\s*</seila bbb>#is);

O "$vem_do_foreach" vc vai ter que dar um foreach no arquivo e usar essa variavel.

tente ai.

flw
João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#3 Gabriel

Gabriel

    CGI & PHP até Morre!!!!

  • Usuários
  • 573 posts
  • Sexo:Não informado
  • Localidade:Santo Andre-SP
  • Interesses:http://www.divulgue-me.com

Posted 13/01/2005, 11:26

se for nesse tipo que vc ta falando

os dados estãram separados com 5 linhas
faça um for que pegue cada 5 linha (isso dentro de um foreach, depois é so comparar com o if
tenta ai

flw
Editado pela equipe Forum Wmo, favor ler as regras.

#4 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 17/01/2005, 00:28

mid: conseguiu?
João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#5 Hospedar-se .Com

Hospedar-se .Com

    Super Veterano

  • Usuários
  • 1500 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 19/01/2005, 13:31

desculpe a demora, mas tem um outro jeito tbm,

open(FD, "arquivo.txt") or die("$!\n");
@usuarios = grep(/^<seila/i, FD);
close(FD);

ai ele já vai separar do jeito que eu preciso os usuários que tem cadastrado nesse arquivo, acho q agora o resto deve ser fácil de fazer

#6 Whitesnake

Whitesnake
  • Visitantes

Posted 20/01/2005, 20:55

Humm cara + axo q o grep assim soh serviria se as tags iniciassem e terminassem em uma linha mesmo. Tenta separar por newlines, assim:

open(TXT,"texto.txt");
@linhas = grep(/\n/gi, <TXT>);
close(TXT);

print "@linhas";

#7 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 23/01/2005, 17:46

parece q vc quer algo pra excluir linhas do apache neh.

tenta algo assim:
$input = "<seila aaaa>\n";
$output = "</seila>\n";

open(FILE, "+<$patch");
@db = <FILE>;

$cont = 0;
foreach $base(@db){
if($base eq $input) {
while(1){
$base = $db[$cont];
print "Apagando $db[$cont]\n";
$db[$cont] = "";
last if($base eq $output);
$cont++;
}
seek(FILE,0,0);
print FILE @db;
truncate(FILE, tell(FILE));
last;
}
$cont++;
}
close(FILE);

o output faz o script parar de deletar

esse eh um dos meios... eh meio confuso mas tem outros mais simples mas esse ja tava na mao ehehe...

ainda nao testei nao mas teste ai num arquivo separado

Edição feita por: prix, 23/01/2005, 17:47.

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#8 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 23/01/2005, 23:03

Hum... vi esse comando em um arquivo de exemplo da PerlBR e gostaria de saber qual a função dele:

"+<" >> na parte que abre o arquivo.

flw
João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#9 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 24/01/2005, 00:36

basicamente ele eh usado para fazer um abertura para leitura e gravação como neste caso estou lendo e apagando dados eles eh mais recomendavel.

vc pode ter mais informações do comando usando
perldoc perlopentut
na pasta bin do perl

ou
perldoc -f open

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#10 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 24/01/2005, 21:53

pra q se usa o seek e o truncate e o tell?

flw

Edição feita por: jgcl, 24/01/2005, 21:54.

João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#11 Gabriel

Gabriel

    CGI & PHP até Morre!!!!

  • Usuários
  • 573 posts
  • Sexo:Não informado
  • Localidade:Santo Andre-SP
  • Interesses:http://www.divulgue-me.com

Posted 25/01/2005, 16:25

e tbm para que serve o grep????
flw
Editado pela equipe Forum Wmo, favor ler as regras.

#12 Whitesnake

Whitesnake
  • Visitantes

Posted 25/01/2005, 23:42

Grep

Seek
Altera o modo de gravação quando FILEHANDLE é aberto com +<
Sintaxe: seek ([FILEHANDLE,][NAOSEI :b ,][MODO])

Tell
Retorna o tamanho em bytes do arquivo especificado em FILEHANDLE.
Sintaxe: tell ([FILEHANDLE])

Truncate
Pica o arquivo de modo a que ele tenha que ficar com o tamanho em bytes especificado em BYTES.
Sintaxe: truncate ([FILEHANDLE,][BYTES])

#13 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 26/01/2005, 19:00

seek serve para varias coisas uma delas o white falou

porem ele tambem serve para acorda algo adormecido ou q tenha passado da posição desejada no meu caso o foreach passa a posicao entao uso o seek para restaurar a posicao.

quanto ao truncate e tell usado.
digamos assim para informar ao perl o novo valor do arquivo para q ele nao seja corrompido.

sendo q o truncate pega a expressao nome e o tell os bytes

grep
eh normalmente usado para expressoes regulares tipo para localizar algo etc. ou montar algum expressao de bloqueio.

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#14 Gabriel

Gabriel

    CGI & PHP até Morre!!!!

  • Usuários
  • 573 posts
  • Sexo:Não informado
  • Localidade:Santo Andre-SP
  • Interesses:http://www.divulgue-me.com

Posted 05/02/2005, 10:33

ai prix, testei o seu codigo, so que ele nao remove a tag do </seila>
o resto tira certinho

e vc tem ai outro exemplo de como fazer isso?
abraços
Editado pela equipe Forum Wmo, favor ler as regras.

#15 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 05/02/2005, 12:27

esse codigo ta feito pra deletar e parar.
ou seja o output eh onde ele para o input onde ele comeca.

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq