Ajuda com PRG
Moderador: Moderadores
Ajuda com PRG
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
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
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Ajuda com PRG
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.
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.
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.
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
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
Veja se ajuda:
ou então...
Espero ter ajudado. Boa sorte.
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
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
"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}
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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.
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.
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}
{POG - Programação Orientada a Gambiarra}
Desculpe, não tenho essa regra no cadastro, e futuramente é essa minha idéia.
Obrigado pelo empenho.
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

