Página 1 de 1

Replace <variavel> with Calculo

Enviado: 30 Ago 2007 11:55
por Garoto de Programa
Prezados,

Estou querendo fazer um replace so que invéz de informar o campo que receberá o valor, quero que pegue o campo de uma variavel.


Tenho duas tabelas com as seguintes estrutura:

Código: Selecionar todos

TabCampos
---------
ID       Numerico 6
Campo    Caracter 10
Tamanho  Numerico 3
Coluna   Numerico 3

TabDados
--------
ID       Numerico 6
CPF      Caracter 11
NOME     Caracter 50
Eu recebo um arquivo com os dados em colunas espessificas. Cada linha contem as informações sobre o ID, CPF e Nome.
Itentificação fica da 1ª até 6ª coluna , o cpf da 7ª até a 17ª coluna, o nome da 18ª até a 68ª coluna.

Na tabela TabCampos eu tenho dados referentes ao layout do arquivo a ser importado e quero gravar estes dados na taleba TabDados, então estou fazendo da seguinte maneira:

Código: Selecionar todos

dbSelectArea("TABCAMPOS")
while !eof()
  cCampo = CAMPO //Aki vou pegar o nome do campo
  dbSelectArea("TABDADOS")
  //Faço um Lock no arquivo
  Applend()
  //Faço um Lock no Registro
  replace cCampo with SubStr(cLinhaLida, TABCAMPOS->COLUNA, TABCAMPOS->TAMANHO) //Essa linha não funciona.
  dbSelectArea("TABCAMPOS")
  dbSkip(1)
enddo
Então quando rodo ocorre erro Base 1003 - Variável não existe.

Agradeço a atenção de todos.
Que Deus continue nos abençoando.

Enviado: 30 Ago 2007 12:09
por Maligno
replace cCampo with SubStr(cLinhaLida, TABCAMPOS->COLUNA, TABCAMPOS->TAMANHO) //Essa linha não funciona.
Tente trocar cCampo por &cCampo ou (cCampo).

Enviado: 30 Ago 2007 13:31
por Garoto de Programa
Maligno,
Já tentei isto tb.

Colocando o & da erro de execução
replace &cCampo with SubStr(cLinha, TABCAMPOS->COLUNA, TABCAMPOS->TAMANHO)
Erro BASE/1449 Erro de síntase: &
Colocando os () da erro de compilação.
replace (cCampo) with SubStr(cLinha, TABCAMPOS->COLUNA, TABCAMPOS->TAMANHO)
Error E0039 Invalid alias expression: ','
Tentei fazer também por referência @ mas não rolou. Deve haver alguma forma, so falta descobrir qual :P

Muito obrigado. :D

Enviado: 30 Ago 2007 15:13
por Stanis Luksys
Opa,

Pelo que vejo, através da sua rotina é possível saber a posição de cada campo, neste caso você poderia utilizar a função FIELDPUT().

Se você não souber a posição, pode fazer algo do tipo para descobrir a posição, e então gravar:

Código: Selecionar todos

cCampo1 = "id"
FieldPut( FieldPos( cCampo1 ), "aqui vai o conteudo do replace" )

É por aí o caminho...

Enviado: 30 Ago 2007 16:56
por Garoto de Programa
Funcionou perfeitamente.
Muito Obrigado a todos e pricipalmente ao Stanis Luksys.

Enviado: 30 Ago 2007 16:59
por gvc
Eu uso:
calias := 'afunc'
ccampo := 'nome'

...

(calias)->&ccampo := <valor>

...