PESQUISA EM UMA MATRIZ

LCSD 28/05/2007 16:40:41
#218549
Boa Tarde.
Andei procurrrando pelo site e não encontrei nenhuma referência a este assunto.

Para realizar uma pesquisa dentro de uma matriz (array) tenho que verificar cada elemento (através de um FOR) ou existe alguma função para isto ?

Obrigado

Eder
ALMARTI 28/05/2007 16:48:45
#218553
Resposta escolhida
For Linha = 1 to SuaMatriz.NumeroDeLinha
For COluna = 1 to SuaMatriz.NumeroDeColunas
If SuaMatriz(Linha,Coluna).Text = SuaCondicao then
MsgBox 'Achei'
Exit For
end if
next Coluna
Coluna = 0
Next Linha
USUARIO.EXCLUIDOS 28/05/2007 16:53:23
#218556
Segue um exemplo: Nele foi criado uma matriz (2x2) e a palavra procurada é MATRIZ.

Dim sArray(2, 2) As String, sPalavra As String
Dim L As Integer, C As Integer

sPalavra = "MATRIZ"

sArray(1, 1) = "TESTE"
sArray(2, 1) = "OPERACIONAL"
sArray(1, 2) = "PARA"
sArray(2, 2) = "MATRIZ"

For L = 1 To 2
For C = 1 To 2
If sArray(L, C) = sPalavra Then
MsgBox "PALAVRA " & sPalavra & " ACHADA COM SUCESSO.", vbInformation
Exit For
End If
Next C
Next L

ESPERO TER AJUDADO.
DANIELCPAETE 28/05/2007 17:01:26
#218560
o que vc guarda na sua matriz ?
LCSD 29/05/2007 08:08:18
#218613
Obrigado a todos, porém estas não eram as soluções que eu esperava.

Eu buscava uma função que realizasse a pesquisa automaticamente.

Ao Daniel,
Utilizo o Firebird e tenho vários bancos para efeito de segurança.
Em um banco tenho a tabela de pagamentos efetuados e seus respectivos códigos. Em outro banco tenho o cadastro de códigos e suas descrições.
Demora bastante para que encontrar 300 despesas e suas descrições.

Vou efetuar outros testes para minimizar este problema, por exemplo uma matriz multidimensional onde divido os códigos para facilitar a pesquisa.

VALEU !!!!
USUARIO.EXCLUIDOS 29/05/2007 08:30:15
#218616
edermir procure algo sobre split, acho que com ele vc consegue.
vou ver se acho algo pra vc
USUARIO.EXCLUIDOS 29/05/2007 08:35:33
#218620
veja essa explicacao sobre a funcao Array se te ajuda em algo.

Array(argumentList)
Esta função retorna um variante contendo um array cujos elementos recebem valores de argumentList. O argumento argumentList é uma lista delimitada por vírgulas com valores atribuídos a elementos consecutivos do array. A omissão da argumentList cria um array sem elementos. Para usá-lo, você deve redimensioná-lo com o comando ReDim. As instruções a seguir criam um array com os nomes dos dias da semana:
Dim DiasSemana
DiasSemana = Array("Segunda", "Terça", "Quarta", "Quinta", _
"Sexta”, "Sábado", "Domingo")
PrimeiroDia = DiasSemana(0) ' Segunda
SegundoDia = DiasSemana(1) ' Terça
O limite inferior de um array criado com a função Array é sempre 0. Observe que a função Array não dimensiona o array. Ela só atribui valores aos seus elementos.
LBound(arrayname[,dimension])
Esta função informa o menor índice da dimensão indicada de um array. O argumento arrayname é o nome do array e dimension é um inteiro indicando a dimensão cujo limite inferior será retornado. Se o dimension for omitido, a primeira dimensão será considerada. A função LBound() é usada com a função UBound(), que informa o maior índice de uma dimensão de um determinado array, para determinar-lhe o tamanho.
UBound(Arrayname [,dimension])
Esta função retorna o maior índice da dimensão indicada de um array. O argumento Arrayname é o nome do array e dimension é um inteiro indicando a dimensão cujo limite superior será retornado. Se o dimension for omitido, a primeira dimensão será considerada.
Para analisar todos os elementos de um array unidimensional, use as funções LBound() e UBound(). As instruções a seguir convertem os elementos do array de strings String() em maiúsculas:
Inf = LBound(Strings)
Sup = UBound(Strings)
For i = Inf to Sup
String(i) = Ucase(Strings(i))
Next
IsArray(variable)
Esta função informará True se o seu argumento for um array. Se a variável Nomes tiver sido definida como:
Dim Nomes(100)
a função:
IsArray(Nomes)
retornará True.

USUARIO.EXCLUIDOS 29/05/2007 08:36:30
#218621
talvez o split tb possa te ajudar

Split(expression,[delimiter],[limit],[compare])
Esta função é o oposto da função Join(0. Ela retorna um array unidimensional de base zero contendo um número especificado de substrings. O argumento expression é uma string que contém a string original que será subdividida em substrings e o argumento opcional delimiter é um caractere usado para delimitar as substrings. Se o delimiter for omitido, será assumido o caractere de espaço (“ “) como delimitador. Se o delimiter for uma string de comprimento zero, será retornado um array de um único elemento contendo toda a expressão. O argumento limit também é opcional e ele determina o número de substrings a serem retornadas. Se ele for -1, todas as substrings serão retornadas. O último argumento, compare, também é opcional e indica o tipo de comparação a ser usada ao avaliar substrings. Seus valores válidos são descritos na função Filter().
Digamos que você tenha declarado uma variável string com o seguinte nome de caminho:
path = "c:\win\desktop\ActiveX\Exemplos\VBSCRIPT"
A função Split() pode extrair os componentes do caminho e atribuí-los ao array Parts por meio da seguinte instrução:
Parts = Split("c:\win\desktop\ActiveX\Exemplos\VBSCRIPT", "\")
Para exibir as partes do caminho, configure um laço como o seguinte:
For i = 0 To ubound(Parts)
MsgBox parts(i)
Next

ALMARTI 29/05/2007 08:51:24
#218626
"Vários bancos" não é uma solução de segurança, e sim um massacre na performance. Desculpe, mas você não resolverá o seu problema desta maneira. Analise o conceito de função.
Se você quer uma função que faça a pesquisa em uma matriz, ela pode ter o nome que for, a assinatura que for, mas em seu nucleo, ira funcionar com laços, do mesmo jeito que citamos antes para voce.
Repense esta sua distribuição de bancos, imagine que a cada conexão em um banco, é um pedaço de banda consumida.
LCSD 29/05/2007 10:17:06
#218644
Concordo com você ALMARTI.

Estou realmente pensando em unificar o banco. Em alguns casos ainda manterei dividido devido a quantidade de tabelas de cada banco.

Quanto a rotina, pesquisava por uma "caixa preta" porém já percebi que a solução é desenvolve-la.

Obrigado a todos novamente
Tópico encerrado , respostas não são mais permitidas