Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AMON-HÁ

Setando condições pra Busca

Recommended Posts

Pessoal,

estou aki contruindo uma busca e me deparei com um pequeno problema...

 

imaginem um formulário de busca com apenas uma caixa de texto...

agora, digamos que o usuário digitou a seguinte msg para busca: problema    com busca "preciso de ajuda"

Notem que há alguns problemas aki pra busca...

primeiro, a qnt de espaço entre a palavra problema e com é muito grande...

segundo, notem que ele colocou a frase "preciso de ajuda" entre aspas, o q significa que ele pretende busca pela frase, exatamente como está escrita....

 

Bem, tentando resolver o problema eu fiz o seguinte script...

 

<%strBusca = "problema	com busca "preciso de ajuda""			   'valor recuperado do formstrBusca = Split(strBusca, " ", -1, 1)							  'criando o array com as palavras pra buscaFor i=0 To UBound(strBusca)										 'separando o q deve ser buscado	  If strBusca(i) <> "" Then			Response.Write "Palavra (" & i & "): " & strBusca(i)			Response.Write "<BR>"	  End IfNext%>
Como resposta temos:

Palavra (0): problema

Palavra (4): com

Palavra (5): busca

Palavra (6): "preciso

Palavra (7): de

Palavra (8): ajuda"

Os array (1), (2) e (3)... correspondem a espaços em branco... por isso foram retirados... (naum interessa fazer busca de espaços em branco...

Coclusão: vai ser feita a pesquisa de: problema, com, busca, "preciso, de, ajuda"...

sendo que o que eu quero é que faça a pesquisa de: problema, com, busca, preciso de ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem vamos fazer quem o jack vamos por partes ...

 

primeiro tira os espaços excedentes antes e depois da string

 

strBusca = TRIM(strBusca)

depois pesquisamos se tem espaços juntos e retiramos com o REPLACE

 

WHILE INSTR(strBusca, "  ") > 0 THEN	   ///AQUI TEM DOIS ESPAÇOS	strBusca = REPLACE(strBusca,"  "," ")			 ///AQUI TROCA DOIS ESPAÇOS POR UM APENASWEND

Ja acabou o problemas dos espaços

 

agora antes de quebrar a busca voce deve pesquisar se tem algo entre aspas se voce não conseguir posta aqui como ta tentando fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente, só pra deixar claro pros usuários iniciantes que estejam acompanhando o post...

While InStr(strBusca, "  ") > 0			strBusca = Replace(strBusca,"  "," ")Wend
O amigo marioufpa colocou o THEN no final...

e sobre o TRIM... eu já tinha feito aki... tá de boa...

 

pronto... com essa boa idéia do marioufpa ficou bem mais bonito o script... porém ainda naum resolvido...

por enquanto o código tá assim...

<%strBusca = "problema    com busca "preciso de ajuda""	  'valor recuperado do formWhile InStr(strBusca, "  ") > 0			strBusca = Replace(strBusca,"  "," ")WendstrBusca = Split(strBusca, " ", -1, 1)					 'criando o array com as palavras pra buscaFor i=0 To UBound(strBusca)								'separando o q deve ser buscado	Response.Write "Palavra (" & i & "): " & strBusca(i)	Response.Write "<BR>"Next%>
e tá retornando isso...

Palavra (0): problema

Palavra (1): com

Palavra (2): busca

Palavra (3): "preciso

Palavra (4): de

Palavra (5): ajuda"

a dúvida com relação a busca pela frase entre aspas... ainda continua... se os amigos poderem dá uma maozinha ae... já tentei algumas formas mais em vão...

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi mal o THEN ali...mas voltando ao problema da busca tem que dar um jeito de varrer os indices do array e concatenar o que tiver de concatenar e tirar as aspas depois... antes de substituirvou pensar alguma coisa aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal... eu andei mexendo aki no código e consegui chegar a alguns resultados... porém não ainda o que eu quero... fiz e refiz tantas fezes esse código, q é possivel até que esteja meio sem rumo... mas funciona... só naum 100% correto... rsrsrs

<%strBusca = "palavras buscadas"		'valor recuperado de um formstrBusca = Split(strBusca, " ", -1, 1)intValorArrayPrimeiraAspas = 0intValorArrayUltimaAspas = 0For i=0 To UBound(strBusca)	If Left(strBusca(i), 1) = Chr(34) Then		strPrimeiraAspas = strBusca(i)		intValorArrayPrimeiraAspas = i	End If		If Right(strBusca(i), 1) = Chr(34) Then		strUltimaAspas = strBusca(i)		intValorArrayUltimaAspas = i	End If	NextIf intValorArrayPrimeiraAspas <> Empty And intValorArrayUltimaAspas <> Empty Then	For i=intValorArrayPrimeiraAspas To intValorArrayUltimaAspas		strFraseConcatenada = strFraseConcatenada & " " & strBusca(i)	NextEnd IfIf strFraseConcatenada <> Empty Then	If intValorArrayUltimaAspas = UBound(strBusca) Then		Redim Preserve strBusca(intValorArrayPrimeiraAspas)	End If	strBusca(intValorArrayPrimeiraAspas) = strFraseConcatenadaEnd IfFor i=0 To UBound(strBusca)		strBusca(i) = Replace(strBusca(i), """", "")		Response.Write "Palavra (" & i & "): " & strBusca(i)		Response.Write "<BR>"Next%>
simulei algumas situações para ele...

para

strBusca = "palavra1"		   'FUNCIONA
retorna

Palavra  (0): palavra1
para

strBusca = "palavra1 palavra2"		  'FUNCIONA
retorna

Palavra (0): palavra1Palavra (1): palavra2
para

strBusca = """frase 1 aki"""			   'NÃO FUNCIONA
retorna

Palavra (0): frasePalavra (1): 1Palavra (2): aki
para

strBusca = "palavra1 ""frase 1 aki"""		'FUNCIONA
retorna

Palavra (0): palavra1Palavra (1): frase 1 aki
para

strBusca = """frase 1 aki"" palavra1"			   'NÃO FUNCIONA
retorna

Palavra (0): frasePalavra (1): 1Palavra (2): akiPalavra (3): palavra1
para

strBusca = """frase 1 aki"" ""frase 2 aki"""		   'NÃO FUNCIONA
retorna

Palavra (0): frasePalavra (1): 1Palavra (2): akiPalavra (3): frase 2 aki
para

strBusca = """frase 1 aki"" palavra1 ""frase 2 aki"""			  'NÃO FUNCIONA
retorna

Palavra (0): frasePalavra (1): 1Palavra (2): akiPalavra (3): palavra1Palavra (4): frase 2 aki
para

strBusca = """frase 1 aki"" palavra1 ""frase 2 aki"" palavra2"			 'NÃO FUNCIONA
retorna

Palavra (0): frasePalavra (1): 1Palavra (2): akiPalavra (3): palavra1Palavra (4): frase 2 akiPalavra (5): 2Palavra (6): akiPalavra (7): palavra2
PS: Chr(34) = caracter de aspas duplas (")

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se você fizesse algo assim:Ele quebra as palavras e joga cada uma em um array (ok, isto já é feito hoje)Se aparece uma aspas, ele vai concatenando a té aparecer outra (ou terminar a frase). Aí ele joga o valor concatenado no array.Desculpe, sou péssimo de sintaxe ... mas talvez essa lógica sirva para algo ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.