Página 1 de 1

Alterar o conteudo de um array

Enviado: 14 Jul 2004 13:59
por negrao
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

Enviado: 14 Jul 2004 16:50
por Toledo
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,

matriz multidimensional

Enviado: 14 Jul 2004 16:53
por jubrovolski
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 .

Sobre alteração de Array

Enviado: 14 Jul 2004 17:05
por ddnardi
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....

Re: Alterar o conteudo de um array

Enviado: 21 Jul 2008 17:12
por gvc
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.

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)

Enviado: 21 Jul 2008 17:57
por Maligno
gvc escreveu:Com a função ATNUM do xHarbour...
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.

Re: Alterar o conteudo de um array

Enviado: 22 Jul 2008 11:14
por gvc
[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.