Ajuda com PRG

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

kristo
Usuário Nível 2
Usuário Nível 2
Mensagens: 78
Registrado em: 21 Set 2004 16:19

Ajuda com PRG

Mensagem por kristo »

Bom dia amigos,
Estou com um problema nessa PRG e gostaria da ajuda dos senhores.
Preciso que essa PRG faça o seguinte, que ela copie e exclua do CADASSO1 as cidades listadas abaixo, ela faz isso, só que no caso se eu especificar ex: SANTA MARIA, ela copia a SANTA MARIA e todas as outras que contém SANTA OU MARIA, eu preciso que ela copie e exclua do CADASSO1 somente a SANTA MARIA, não sei onde estou errando, por favor me ajudem.

Grato, segue abaixo a PRG

copy file CADASSO1.DBF to CAD100.DBF

sele 1
use CADASSO1

sele 2
use CAD100
zap

ok=.f.

sele 1
do while .not. eof()
if at("ALVORADA",CIDADE) # 0;
.or. at("BAGE",CIDADE) # 0;
.or. at("BENTO GONCALVES",CIDADE) # 0;
.or. at("CACHOEIRINHA",CIDADE) # 0;
.or. at("CANOAS",CIDADE) # 0;
.or. at("CAXIAS DO SUL",CIDADE) # 0;
.or. at("GRAVATAI",CIDADE) # 0;
.or. at("NOVO HAMBURGO",CIDADE) # 0;
.or. at("PASSO FUNDO",CIDADE) # 0;
.or. at("PELOTAS",CIDADE) # 0;
.or. at("RIO GRANDE",CIDADE) # 0;
.or. at("SANTA CRUZ DO SUL",CIDADE) # 0;
.or. at("SANTA MARIA",CIDADE) # 0;
.or. at("SAO LEOPOLDO",CIDADE) # 0;
.or. at("SAPUCAIA DO SUL",CIDADE) # 0;
.or. at("URUGUAIANA",CIDADE) # 0;
.or. at("VIAMAO",CIDADE) # 0;

sele 2
appe blan

replace DDD with CADASSO1->DDD
replace TELEFONE with CADASSO1->TELEFONE
replace RESULTADO with CADASSO1->RESULTADO
replace NBCONT with CADASSO1->NBCONT
replace BRANCOA1 with CADASSO1->BRANCOA1
replace NUMERO with CADASSO1->NUMERO
replace BRANCOA2 with CADASSO1->BRANCOA2
replace TELEFONE3 with CADASSO1->TELEFONE3
replace SHOW2 with CADASSO1->SHOW2
replace AREA2 with CADASSO1->AREA2
replace TELEFONE2 with CADASSO1->TELEFONE2
replace LASTTELDIA with CADASSO1->LASTTELDIA
replace BRANCOB with CADASSO1->BRANCOB
replace FIELDS with CADASSO1->FIELDS
replace NOME with CADASSO1->NOME
replace CIDADEUF with CADASSO1->CIDADEUF
replace ENDERECO with CADASSO1->ENDERECO
replace REGIAO with CADASSO1->REGIAO
replace CODREG with CADASSO1->CODREG
replace CODMARCA with CADASSO1->CODMARCA
replace IDADE with CADASSO1->IDADE
replace SEGMENTO with CADASSO1->SEGMENTO
replace MODELO with CADASSO1->MODELO
replace NOVO with CADASSO1->NOVO
replace CEP with CADASSO1->CEP
replace XNR with CADASSO1->XNR
replace BAIRRO with CADASSO1->BAIRRO
replace CIDADE with CADASSO1->CIDADE
replace ESTADO with CADASSO1->ESTADO
replace USO with CADASSO1->USO


ok=.t.
endif
sele 1
if ok=.t.
dele
ok=.f.
endif
skip
enddo
pack
close data
return
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: Ajuda com PRG

Mensagem por Pablo César »

Bom dia Kristo, na minha opinião o que você deveria fazer é codificar as cidades de acordo com o cadastro. Esse campo CIDADE do CADASSO1.DBF o usuário digita, ou é feito através de menú a inclusão de dados. Porque deixa te explicar o por quê da minha pergunta.

A utilização da função AT() procura a string e dá a posição dela, mas acho que para ser mais preciso você poderia comparar as cidades mediante outro campo onde conteria o código. Dessa forma fica muito mais seguro comparar COD_CID=nCod_cid. Pois mesmo que você pesquise o NOME da cidade, de nada vai servir se o usuário digitar errado, ou até mesmo com acentos, ou sem espaço, ou abreviado (sabe como é usuário). Então eu acho que você deveria ter certeza que os NOMES das cidades sejam incluídas tal qual você a procura. Caso contrário a indicação por códigos de cidades é a melhor opção.

Outra coisa: me permita perguntar para quê você copia esses registros para o CAD100.DBF ?. Porque dependendo a sua necessidade/finalidade, pode ser pensado outro tipo de procedimento. Tipo a de seleção de cidade para gerar um relatório, por exemplo. Mas gostaria que você exemplificasse e nos dissesse a razão.

Obs.: Seria bom que nas próximas vezes, você utilize o recurso de edição de mensagens do fórum. Utilizando marcação de bloco e o botão "Code" quando for código-fonte, assim permitirá melhor a visualização edentada. E desculpe fazer outra crítica... PRG é arquivo, chamá-lo de ESSA PRG ou NESSA PRG soa mal aos ouvidos do bom português. Me desculpe os meus comentários se estou lhe chateando.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
kristo
Usuário Nível 2
Usuário Nível 2
Mensagens: 78
Registrado em: 21 Set 2004 16:19

Mensagem por kristo »

Olá
Esquenta a cuca não, toda crítica é bem vinda.
Respondendo sua pergunta, esse campo "cidade" é totalmente seguro, uma vez que os dados foram tirados de um banco de dados comercial, então não á erros de digitação, espaços, acentos, etc....
Quanto ao eu copiar a cidade específica é porque eu preciso separar cidades que contenha entre 100.000 a 500.000 habitantes.

So não sei o que está acontecendo com a PRG na ora de ler, o pq que ela está copiando também as outras cidades que contenham algo parecido ou igual no nome.

Explicado!
Grato
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Veja se ajuda:

Código: Selecionar todos

select 1
use CADASSO1

copy struct to CAD100

select 2
use CAD100

a_cidade := {padr("ALVORADA", 30),;
             padr("BAGE", 30),;
             padr("BENTO GONCALVES", 30),;
             padr("CACHOEIRINHA", 30),;
             padr("CANOAS", 30),;
             padr("CAXIAS DO SUL", 30),;
             padr("GRAVATAI", 30),;
             padr("NOVO HAMBURGO", 30),;
             padr("PASSO FUNDO", 30),;
             padr("PELOTAS", 30),;
             padr("RIO GRANDE", 30),;
             padr("SANTA CRUZ DO SUL", 30),;
             padr("SANTA MARIA", 30),;
             padr("SAO LEOPOLDO", 30),;
             padr("SAPUCAIA DO SUL", 30),;
             padr("URUGUAIANA", 30),;
             padr("VIAMAO", 30)}

select 1
while !eof()
   if ascan(a_cidade, CIDADE) # 0

      CAD100->(dbappend())
      CAD100->DDD := CADASSO1->DDD
      CAD100->TELEFONE := CADASSO1->TELEFONE
      CAD100->RESULTADO := CADASSO1->RESULTADO
      CAD100->NBCONT := CADASSO1->NBCONT
      CAD100->BRANCOA1 := CADASSO1->BRANCOA1
      CAD100->NUMERO := CADASSO1->NUMERO
      CAD100->BRANCOA2 := CADASSO1->BRANCOA2
      CAD100->TELEFONE3 := CADASSO1->TELEFONE3
      CAD100->SHOW2 := CADASSO1->SHOW2
      CAD100->AREA2 := CADASSO1->AREA2
      CAD100->TELEFONE2 := CADASSO1->TELEFONE2
      CAD100->LASTTELDIA := CADASSO1->LASTTELDIA
      CAD100->BRANCOB := CADASSO1->BRANCOB
      CAD100->FIELDS := CADASSO1->FIELDS
      CAD100->NOME := CADASSO1->NOME
      CAD100->CIDADEUF := CADASSO1->CIDADEUF
      CAD100->ENDERECO := CADASSO1->ENDERECO
      CAD100->REGIAO := CADASSO1->REGIAO
      CAD100->CODREG := CADASSO1->CODREG
      CAD100->CODMARCA := CADASSO1->CODMARCA
      CAD100->IDADE := CADASSO1->IDADE
      CAD100->SEGMENTO := CADASSO1->SEGMENTO
      CAD100->MODELO := CADASSO1->MODELO
      CAD100->NOVO := CADASSO1->NOVO
      CAD100->CEP := CADASSO1->CEP
      CAD100->XNR := CADASSO1->XNR
      CAD100->BAIRRO := CADASSO1->BAIRRO
      CAD100->CIDADE := CADASSO1->CIDADE
      CAD100->ESTADO := CADASSO1->ESTADO
      CAD100->USO := CADASSO1->USO

      cadass01->(dbdelete())

   end

   dbskip()
end

pack
close data

return

ou então...

Código: Selecionar todos


select 1
use CADASSO1

a_cidade := {padr("ALVORADA", 30),;
             padr("BAGE", 30),;
             padr("BENTO GONCALVES", 30),;
             padr("CACHOEIRINHA", 30),;
             padr("CANOAS", 30),;
             padr("CAXIAS DO SUL", 30),;
             padr("GRAVATAI", 30),;
             padr("NOVO HAMBURGO", 30),;
             padr("PASSO FUNDO", 30),;
             padr("PELOTAS", 30),;
             padr("RIO GRANDE", 30),;
             padr("SANTA CRUZ DO SUL", 30),;
             padr("SANTA MARIA", 30),;
             padr("SAO LEOPOLDO", 30),;
             padr("SAPUCAIA DO SUL", 30),;
             padr("URUGUAIANA", 30),;
             padr("VIAMAO", 30)}

copy to CAD100 for ascan(a_cidade, CIDADE) # 0

dbgotop()
delete for ascan(a_cidade, CIDADE) # 0
pack

close data

return
Espero ter ajudado. Boa sorte.
"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}
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Entendí. Podias postar alguns registros de exemplo ?. Se puder listar a estrutura do arquivo. Utilize este recurso para as duas questões: https://pctoledo.org/forum/viewtopic.php?t=6616
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Se existe uma regra (quantidade de habitantes) e isso esta no cadastro da cidade:

Código: Selecionar todos

use CADASSO1

copy to CAD100 for habitantes >= 100000 .and. habitantes <= 500000

delete for  for habitantes >= 100000 .and. habitantes <= 500000
pack

close data

return 
"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}
kristo
Usuário Nível 2
Usuário Nível 2
Mensagens: 78
Registrado em: 21 Set 2004 16:19

Mensagem por kristo »

GVC
Bom dia !!

Olha eu testei aqui, e a PRG é processada mais quando ela gera o CAD100 ele está vazio!! os dados não são transferidos para o CAD100 e nem são apagados do CADASSO1.

PQ será?

Obrigado
kristo
Usuário Nível 2
Usuário Nível 2
Mensagens: 78
Registrado em: 21 Set 2004 16:19

Mensagem por kristo »

Desculpe, não tenho essa regra no cadastro, e futuramente é essa minha idéia.
Obrigado pelo empenho.

gvc escreveu:Se existe uma regra (quantidade de habitantes) e isso esta no cadastro da cidade:

Código: Selecionar todos

use CADASSO1

copy to CAD100 for habitantes >= 100000 .and. habitantes <= 500000

delete for  for habitantes >= 100000 .and. habitantes <= 500000
pack

close data

return 
kristo
Usuário Nível 2
Usuário Nível 2
Mensagens: 78
Registrado em: 21 Set 2004 16:19

Mensagem por kristo »

OBRIGADO GVC, DEU TUDO CERTO, EU SO PRECISAVA ALTERAR O TAMANHO DO CAMPO, OBRIGADO MESMO DE CORAÇÃO, FIQUE EM PAZ

KRISTO
Responder