Replace <variavel> with Calculo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Garoto de Programa
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 23 Nov 2005 14:34
Localização: Belo Horizonte/MG
Contato:

Replace <variavel> with Calculo

Mensagem 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.
Christiano Ribeiro Soares
Desenvolvedor
http://www.chrissoares.com.br
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

replace cCampo with SubStr(cLinhaLida, TABCAMPOS->COLUNA, TABCAMPOS->TAMANHO) //Essa linha não funciona.
Tente trocar cCampo por &cCampo ou (cCampo).
[]'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!
Garoto de Programa
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 23 Nov 2005 14:34
Localização: Belo Horizonte/MG
Contato:

Mensagem 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
Christiano Ribeiro Soares
Desenvolvedor
http://www.chrissoares.com.br
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Garoto de Programa
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 23 Nov 2005 14:34
Localização: Belo Horizonte/MG
Contato:

Mensagem por Garoto de Programa »

Funcionou perfeitamente.
Muito Obrigado a todos e pricipalmente ao Stanis Luksys.
Christiano Ribeiro Soares
Desenvolvedor
http://www.chrissoares.com.br
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Eu uso:
calias := 'afunc'
ccampo := 'nome'

...

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

...
"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}
Responder