1º DUVIDA
Tenho em um array a seguinte informacao:
// 1234567890123456789012345678901234567
nTeste[1] := "nome da pessoa ¦27/05/1980¦ R$ 150,00"
nTeste[2] := ....
nTeste[3] := ....
Tenho varios registro armazenado s nesse array e todos tem um tamanho pre-definido.
Supondo que eu queira alterar a data de nascimento. Hoje eu faco da seguinte maneira.
nTeste[1] := subs(nTeste[1],1,16)+nova data+subs(nTeste[1],26)
Tem alguma outra maneira melhor de se fazer isso ?
Obs.: Como vou exibir essa informacao em um achoice, a forma de se armazena os registros no array devera ser essa.
2º DUVIDA
Em um cAMPO tenho a seguinte informacao:
PEDRO ALVARES;01/01/2004;CURITIBA
O ponto e virgula é que separa uma informacao da outra.
Tem alguma maneira fora percorrer todo o conteudo do campo letra por letra ate encontrar o ; e ir adicionando em um array ?
Obrigado
Alterar o conteudo de um array
Moderador: Moderadores
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Negrão,
Se você estiver usando o Clipper 5.x (5.2 ou 5.3), neste caso seria melhor usar uma matriz multidimensional.
Veja um exemplo:
PRIV nTeste:={}
AADD(nTeste, {"Jose da Silva","27/05/1980","R$ 150,00"})
AADD(nTeste, {"Antonio dos Santos","20/02/1970","R$ 210,00"})
Para alterar a data de nascimento do "Antonio dos Santos" você faria assim:
nTeste[2,2]:="25/03/1972"
Como é uma matriz muldimensional, você precisa informar qual o elemento e a dimensão que você vai alterar.
É como em uma planilha do excel, existe linhas (que são os elementos) e colunas (que são as dimensões). No exemplo acima, a dimensão onde está o nome é 1, onde está a data de nascimento é 2 e onde está o valor é 3. Assim se você quiser alterar o valor (R$ 150,00) do Jose da Silva você faria assim:
nTeste[1,3]:="R$ 320,00"
Agora só existe um problema, na função ACHOICE() não se pode usar matriz multidimensional, neste caso você terá de criar uma segunda matriz para colocar no achoice().
PRIV nTest2:={}
FOR i=1 TO LEN(nTeste)
AADD(nTest2,nTeste[i,1]+"|"+nTeste[i,2]+"|"+nTeste[i,3])
NEXT
op=ACHOICE(4,2,23,75,nTest2)
Abraços,
Se você estiver usando o Clipper 5.x (5.2 ou 5.3), neste caso seria melhor usar uma matriz multidimensional.
Veja um exemplo:
PRIV nTeste:={}
AADD(nTeste, {"Jose da Silva","27/05/1980","R$ 150,00"})
AADD(nTeste, {"Antonio dos Santos","20/02/1970","R$ 210,00"})
Para alterar a data de nascimento do "Antonio dos Santos" você faria assim:
nTeste[2,2]:="25/03/1972"
Como é uma matriz muldimensional, você precisa informar qual o elemento e a dimensão que você vai alterar.
É como em uma planilha do excel, existe linhas (que são os elementos) e colunas (que são as dimensões). No exemplo acima, a dimensão onde está o nome é 1, onde está a data de nascimento é 2 e onde está o valor é 3. Assim se você quiser alterar o valor (R$ 150,00) do Jose da Silva você faria assim:
nTeste[1,3]:="R$ 320,00"
Agora só existe um problema, na função ACHOICE() não se pode usar matriz multidimensional, neste caso você terá de criar uma segunda matriz para colocar no achoice().
PRIV nTest2:={}
FOR i=1 TO LEN(nTeste)
AADD(nTest2,nTeste[i,1]+"|"+nTeste[i,2]+"|"+nTeste[i,3])
NEXT
op=ACHOICE(4,2,23,75,nTest2)
Abraços,
Editado pela última vez por Toledo em 14 Jul 2004 21:44, em um total de 1 vez.
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
jubrovolski
- Usuário Nível 1

- Mensagens: 5
- Registrado em: 14 Jul 2004 16:40
matriz multidimensional
matriz:={}
vdata0:=date()
vdata1:=ctod("15/07/2004")
aadd(matriz,{"jose da silva",vdata0,100.00})
aadd(matriz,{"antonio pedro",vdata1,130.00})
para alterar o conteudo da primeira matriz
matriz[1,2]:=ctod("12/08/2004") // ou seja o segundo item
depois basta gerar uma matriz simples
matach:={}
for k = 1 to len(matriz)
aadd(matach,matriz[k,1]+"|"+dtoc(matriz[k,2])+"|"+transf(matriz[k,3],"R$ 9,999.99"))
next
se não me engano é isto .
vdata0:=date()
vdata1:=ctod("15/07/2004")
aadd(matriz,{"jose da silva",vdata0,100.00})
aadd(matriz,{"antonio pedro",vdata1,130.00})
para alterar o conteudo da primeira matriz
matriz[1,2]:=ctod("12/08/2004") // ou seja o segundo item
depois basta gerar uma matriz simples
matach:={}
for k = 1 to len(matriz)
aadd(matach,matriz[k,1]+"|"+dtoc(matriz[k,2])+"|"+transf(matriz[k,3],"R$ 9,999.99"))
next
se não me engano é isto .
-
ddnardi
- Usuário Nível 1

- Mensagens: 25
- Registrado em: 13 Jul 2004 15:28
- Localização: Limeira
- Contato:
Sobre alteração de Array
Caro colega, pelo q eu entendi vc precisa disto.....
Kra....
não precisa cria um array e jogar 3 tipos de informacao dentro de uma unica dimensão.
Você precisa criar um Array coim 3 dimensões....
Bom seguinte...
// Criando o Array
aArray := {}
// Encontrando a Posicao que este nome se encontra dentro do Array
NPos := Ascan(aArray, {|x| x[1] == "DAVI")
// Se Nao existir o nome "DAVI" no array, sera criado um registro novo
If Ascan(aArray, {|x| x[1] == "DAVI"}) == 0
// Criando uma nova posicao dentro do array
AAdd(aArray, {(Nome, Data, Valor})
Else
// Porem se encontrar , troca-se pela Data Nova
aArray[NPos][2] := DataNova
EndIf
Um array de 3 dimensoes fica +- assim
array[1][1] -> DAVI
array[1][2] -> 10/10/1978
array[1][3] -> 150,00
array[2][1] -> JOAO
array[2][2] -> 11/10/1980
array[2][3] -> 240,00
e assim vai.....
kra ..espero ter ajudado....
Kra....
não precisa cria um array e jogar 3 tipos de informacao dentro de uma unica dimensão.
Você precisa criar um Array coim 3 dimensões....
Bom seguinte...
// Criando o Array
aArray := {}
// Encontrando a Posicao que este nome se encontra dentro do Array
NPos := Ascan(aArray, {|x| x[1] == "DAVI")
// Se Nao existir o nome "DAVI" no array, sera criado um registro novo
If Ascan(aArray, {|x| x[1] == "DAVI"}) == 0
// Criando uma nova posicao dentro do array
AAdd(aArray, {(Nome, Data, Valor})
Else
// Porem se encontrar , troca-se pela Data Nova
aArray[NPos][2] := DataNova
EndIf
Um array de 3 dimensoes fica +- assim
array[1][1] -> DAVI
array[1][2] -> 10/10/1978
array[1][3] -> 150,00
array[2][1] -> JOAO
array[2][2] -> 11/10/1980
array[2][3] -> 240,00
e assim vai.....
kra ..espero ter ajudado....
Re: Alterar o conteudo de um array
Com a função ATNUM do xHarbour vc pode localizar a N ocorrência do caracter de separação.
E se for desmontar a string, tem a função TOKEN.
E se for desmontar a string, tem a função TOKEN.
Código: Selecionar todos
function main
local a1, a2, a3, a4
cls
a1 := "nome da pessoa |27/05/1980| R$ 150,00"
a2 := atnum('|', a1, 1)
a3 := atnum('|', a1, 2)
if a2 # 0 .and. a3 # 0
a2++
a4 := a3 - a2
a1 := stuff(a1, a2, a4, '10/11/1935')
end
? a1
return(Nil)"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
Imagino que você deve ter se distraído ao redigir sua mensagem e, mencionou XHarbour, ao invés de dizer CATools, que contém essas funções.gvc escreveu:Com a função ATNUM do xHarbour...
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: Alterar o conteudo de um array
[Maligno]
Eu só pesquisei a documentação do xHarbour. Como a maior parte das funções CA-Tools foram convertidas para xHarbour, tudo bem então.
Fui verificar na documentação da CA-Tools e a função consta. Obrigado pelo complemento da informação.
Eu só pesquisei a documentação do xHarbour. Como a maior parte das funções CA-Tools foram convertidas para xHarbour, tudo bem então.
Fui verificar na documentação da CA-Tools e a função consta. Obrigado pelo complemento da informação.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}


