Obrigado pelas boas vindas e pela disposição em ajudar.
Segue o Layout de no momento serem 2 bancos de dados;
aih.dbf
Código: Selecionar todos
estrutura:={ {"num_aih" ,"C" ,13 ,0},;
{"prontuario" ,"N" ,07 ,0},;
{"cart_sus" ,"C" ,15 ,0},;
{"raca_pac" ,"C" ,02 ,0},;
{"cep_ende" ,"C" ,08 ,0},;
{"nome_pac" ,"C" ,70 ,0},;
{"tipo_logr" ,"C" ,03 ,0},;
{"nome_tipo" ,"C" ,20 ,0},;
{"ende_pac" ,"C" ,50 ,0},;
{"num_ende" ,"N" ,07 ,0},;
{"comp_ende" ,"C" ,15 ,0},;
{"bairro_ende" ,"C" ,30 ,0},;
{"cidade_ende" ,"C" ,25 ,0},;
{"cod_ibge" ,"C" ,06 ,0},;
{"uf_ende" ,"C" ,02 ,0},;
{"data_nasc" ,"C" ,10 ,0},;
{"idade_pac" ,"N" ,03 ,0},;
{"sexo_pac" ,"C" ,01 ,0},;
{"enfer_pac" ,"C" ,04 ,0},;
{"leito_pac" ,"N" ,04 ,0},;
{"nome_mae" ,"C" ,70 ,0},;
{"nome_resp" ,"C" ,70 ,0},;
{"tpo_doc_pac" ,"C" ,01 ,0},;
{"doc_pac" ,"C" ,11 ,0},;
{"cpf_med_sol" ,"C" ,11 ,0},;
{"proc_sol" ,"C" ,10 ,0},;
{"car_inter" ,"C" ,01 ,0},;
{"data_inter" ,"C" ,10 ,0},;
{"data_alta" ,"C" ,10 ,0},;
{"qtde_dias" ,"N" ,03 ,0},;
{"especiali" ,"C" ,01 ,0},;
{"motivo" ,"C" ,02 ,0},;
{"acompa" ,"N" ,02 ,0},;
{"pre_natal" ,"C" ,11 ,0},;
{"cid_pri" ,"C" ,04 ,0},;
{"cid_sec" ,"C" ,04 ,0},;
{"nasc_vivos" ,"C" ,05 ,0},;
linhas.dbf
Código: Selecionar todos
estrutura:={ {"num_linha" ,"C" ,03 ,0},;
{"aih_num" ,"C" ,13 ,0},;
{"procedto" ,"C" ,10 ,0},;
{"ato_prof" ,"C" ,02 ,0},;
{"proc_qtde" ,"C" ,03 ,0},;
{"num_cpf" ,"C" ,11 ,0},;
{"num_cbo" ,"C" ,06 ,0},;
{"num_cnes" ,"C" ,07 ,0},;
{"num_cnpj" ,"C" ,14 ,0},;
{"cnes_valor" ,"C" ,07 ,0},;
{"ordem_proc" ,"C" ,01 ,0} }
Explicação: os dados do banco de dados aih estarão numa sequencia lado à lado na primeira linha do arquivo txt e o campo em destaque é o campo "num_aih". seguindo a sequencia dos dados, deverá pegar o banco de dados 2 linhas.dbf e o campo que deve identificar é o "aih_num" numa repetição de no máximo 10 vêzes lado à lado. Caso ultrapasse a quantidade de 10 linhas, deverá iniciaruma nova linha no arquivo repetindo os dados do naco de dados aih.dbf e a sequencia será a linha 11 e assim por diante. Será que consegui expôr o problema? Obrigado imensamente pelo interesse em ajudar.
Este é o programa que grava os dados das linhas:
Código: Selecionar todos
select 1
use linhas
index on aih_num to aihnum
index on ordem_proc to ordemproc
index on ato_prof to atoprof
set index to aihnum,ordemproc,atoprof
pRecno :=0
pRecCount :=Lastrec()
C=0
go top
termoh(pRecno)
HandleDCIH :=FCreate(z_num_dcih+".txt",FC_NORMAL)
z_aih_num = space(13)
w_aih_num = space(13)
w_qtde_reg = 1
w_qtde_aih = 1
w_linha = 1
do while .not. eof()
select 1
pRecno=(++C)*100/pRecCount
Termoh(pRecno)
wLine:=""
w_aih_num = aih_num
w_ident_cpf = 5
w_ind_equipe = "0"
w_ident_cnes = "0"
w_procedto = procedto
w_ato_prof = ato_prof
w_proc_qtde = proc_qtde
w_num_cpf = num_cpf
w_num_cbo = num_cbo
w_num_cnes = num_cnes
w_num_cnpj = num_cnpj
w_cnes_valor = cnes_valor
if w_qtde_reg > 10
wLine+=chr(13)+chr(10)
w_qtde_reg = 1
w_linha = w_linha + 1
endif
if w_aih_num <> z_aih_num .and. recno() <> 1
if w_qtde_reg <> 1
w_tot_reg = (10 - w_qtde_reg)
w_um_reg = 73
w_tot_zero = 73 + (w_tot_reg * w_um_reg)
wLine+=PadR(replicate("0",w_tot_zero),w_tot_zero,0)
wLine+=chr(13)+chr(10)
w_qtde_reg = 1
w_linha = w_linha + 1
endif
endif
if val(w_ato_prof) >= 1 .and. val(w_ato_prof) <= 6
w_ind_equipe = subs(w_ato_prof,02,1)
endif
if w_num_cnes <> " "
w_ident_cnes = "5"
endif
if w_num_cpf <> " "
w_ident_cpf = 1
w_ident_cnes = "0"
endif
@ 12,47 say z_num_dcih +".Txt"
@ 15,51 say w_qtde_aih pict "999"
@ 18,45 say ((w_linha * 732) + 1) pict "999,999,999"
@ 20,51 say w_aih_num
wLine+=PadR(w_ident_cpf,1,0) // indicador documento 664 - 664 (01)
wLine+=PadR(replicate(" ",03),03,0) // zeros cpf medico 665 - 667 (03)
wLine+=PadR(w_num_cpf,11,0) // cpf medico 668 - 678 (11)
wLine+=PadR(" ",01,0) // ???? 679 - 679 (01)
wLine+=PadR(w_num_cbo,06,0) // numero cbo do cpf 680 - 685 (06)
wLine+=PadR(w_ind_equipe,01,0) // indicador equipe 686 - 686 (01)
wLine+=PadR(w_ident_cnes,01,0) // indicador cnes 687 - 687 (01)
wLine+=PadR(w_num_cnes,07,0) // numero cnes 688 - 694 (07)
wLine+=PadR(replicate(" ",07),07,0) // espacos cnes 695 - 701 (07)
wLine+=PadR("5",01,0) // indicador executor 702 - 702 (01)
wLine+=PadR(w_cnes_valor,07,0) // cnes valor 703 - 709 (07)
wLine+=PadR(replicate(" ",08),08,0) // espacos executor 710 - 717 (08)
wLine+=PadR(w_procedto,10,0) // procedimento 718 - 727 (10)
wLine+=PadR(" ",01,0) // zero procedimento 728 - 728 (01)
wLine+=PadR(w_proc_qtde,02,0) // qtde procedimento 729 - 730 (03)
wLine+=PadR(replicate("0",04),04,0) // ano competencia 731 - 734 (04)
wLine+=PadR(replicate("0",02),02,0) // mes competencia 735 - 736 (02)
w_qtde_reg = w_qtde_reg + 1
w_qtde_aih = w_qtde_aih + 1
z_aih_num = w_aih_num
File_Save(HandleDCIH,wLine)
DbSkip()
enddo
w_tot_reg = (10 - w_qtde_reg)
w_um_reg = 73
w_tot_zero = (w_tot_reg * w_um_reg)
wLine+=PadR(replicate("0",w_tot_zero),w_tot_zero,0)
wLine+=chr(13)+chr(10)
File_Save(HandleDCIH,wLine)
File_Save(HandleDCIH,chr(26))
FClose(HandleDCIH)
restscreen(00,00,maxrow(),maxcol(),telasave)
close all
Este é o programa que grava os dados de início do arquivo
Código: Selecionar todos
select 2
use aih
index on especiali to espec
index on num_aih to numaih
set index to espec,numaih
LINHA = 1
z_modali = "02"
z_muda_proc = "2"
z_ident_doc = "1"
z_nacionali = "010"
pRecno :=0
pRecCount :=Lastrec()
C=0
go top
termoh(pRecno)
HandleDCIH :=FCreate(z_num_dcih+".txt",FC_NORMAL)
do while .not. eof()
inkey(0.05)
pRecno=(++C)*100/pRecCount
Termoh(pRecno)
@ 12,47 say z_num_dcih+".Txt" color"w+/n+"
@ 15,51 say qtde_aih pict "999" color "w+/n+"
@ 20,51 say num_aih color "w+/n+"
z_identifi = "01"
z_num_aih = num_aih
z_prontua = prontuario
z_cart_sus = cart_sus
z_raca_pac = raca_pac
z_cep_ende = cep_ende
z_nome_pac = nome_pac
z_ende_pac = ende_pac
z_num_ende = num_ende
z_tipo_logr = tipo_logr
z_nome_tipo = nome_tipo
z_comp_ende = comp_ende
z_bairro_ende = bairro_ende
z_cidade_ende = cidade_ende
z_cod_ibge = cod_ibge
z_uf_ende = uf_ende
z_data_nasc = data_nasc
z_sexo_pac = sexo_pac
z_enfer_pac = enfer_pac
z_leito_pac = leito_pac
z_nome_mae = nome_mae
z_nome_resp = nome_resp
z_tpo_doc_pac = tpo_doc_pac
z_doc_pac = doc_pac
z_cpf_med_sol = cpf_med_sol
z_proc_sol = proc_sol
z_car_inter = car_inter
z_data_inter = data_inter
z_data_alta = data_alta
z_especiali = especiali
z_motivo = motivo
z_acompa = acompa
z_pre_natal = pre_natal
z_cid_pri = cid_pri
z_cid_sec = cid_sec
z_cid_obi = space(04)
z_nasc_vivos = nasc_vivos
if z_motivo = "41"
z_cid_obi = z_cid_pri
endif
if z_sexo_pac = "1"
z_sexo_pac = "M"
endif
if z_sexo_pac = "3"
z_sexo_pac = "F"
endif
wLine:=""
wLine+=PadR(z_num_dcih,08,0) // numero do lote 01 - 08 (08)
wLine+=PadR(replicate("0",03),03,0) // qtde de aihs 09 - 11 (03)
wLine+=PadR(z_apres,06,0) // apresentacao 12 - 17 (06)
wLine+=PadR(replicate("0",03),03,0) // sequencial 18 - 20 (03)
wLine+=PadR(z_org_emisso,10,0) // orgao emissor 21 - 30 (10)
wLine+=PadR(z_cnes,07,0) // cnes hospital 31 - 37 (07)
wLine+=PadR(z_ibge_hosp,06,0) // ibge hospital 38 - 43 (06)
wLine+=PadR(z_num_aih,13,0) // numero aih 44 - 56 (13)
wLine+=PadR(z_identifi,02,0) // identificacao 57 - 58 (02)
wLine+=PadR("0",01,0) // especialidade 59 - 59 (01)
wLine+=PadR(z_especiali,01,0) // especialidade 60 - 60 (01)
wLine+=PadR(replicate("0",45),45,0) // filler (zeros) 61 - 105 (45)
wLine+=PadR(z_modali,02,0) // modalidade aih 106 - 107 (02)
wLine+=PadR(replicate("0",03),03,0) // sequencial aih5 108 - 110 (03)
wLine+=PadR(replicate("0",13),13,0) // aih posterior 111 - 123 (13)
wLine+=PadR(replicate("0",13),13,0) // aih anterior 124 - 136 (13)
wLine+=PadR(Subs(z_data_inter,7,4),4,0) // ano emiss/inter 137 - 140 (04)
wLine+=PadR(Subs(z_data_inter,4,2),2,0) // mes emiss/inter 141 - 142 (02)
wLine+=PadR(Subs(z_data_inter,1,2),2,0) // dia emiss/inter 143 - 144 (02)
wLine+=PadR(Subs(z_data_inter,7,4),4,0) // ano internacao 145 - 148 (04)
wLine+=PadR(Subs(z_data_inter,4,2),2,0) // mes internacao 149 - 150 (02)
wLine+=PadR(Subs(z_data_inter,1,2),2,0) // dia internacao 151 - 152 (02)
wLine+=PadR(Subs(z_data_alta,7,4),4,0) // ano alta 153 - 156 (04)
wLine+=PadR(Subs(z_data_alta,4,2),2,0) // mes alta 157 - 158 (02)
wLine+=PadR(Subs(z_data_alta,1,2),2,0) // dia alta 159 - 160 (02)
wLine+=PadR(z_proc_sol,10,0) // proc solicitado 161 - 170 (10)
wLine+=PadR(z_muda_proc,01,0) // mudanca proc 171 - 171 (01)
wLine+=PadR(z_proc_sol,10,0) // proc realizado 172 - 181 (10)
wLine+=PadR("0",01,0) // carat inter 182 - 182 (01)
wLine+=PadR(z_car_inter,01,0) // carat inter 183 - 183 (01)
wLine+=PadR(z_motivo,02,0) // motivo alta 184 - 185 (02)
wLine+=PadR(z_ident_doc,01,0) // ident doc med sol 186 - 186 (01)
wLine+=PadR(replicate("0",04),04,0) // zeros cpf med sol 187 - 190 (04)
wLine+=PadR(z_cpf_med_sol,11,0) // cpf med sol 191 - 201 (11)
wLine+=PadR(z_ident_doc,01,0) // ident doc med res 202 - 202 (01)
wLine+=PadR(replicate("0",04),04,0) // zeros cpf med res 203 - 206 (04)
wLine+=PadR(z_cpf_med_sol,11,0) // cpf med res 207 - 217 (11)
wLine+=PadR(z_ident_doc,01,0) // ident doc dir cli 218 - 218 (01)
wLine+=PadR(replicate("0",04),04,0) // zeros cpf dir cli 219 - 222 (04)
wLine+=PadR(z_dir_cli,11,0) // cpf dir cli 223 - 233 (11)
wLine+=PadR(z_ident_doc,01,0) // ident doc med aut 234 - 234 (01)
wLine+=PadR(replicate("0",04),04,0) // zeros cpf med aut 235 - 238 (04)
wLine+=PadR(z_cpf_aud,11,0) // cpf med aut 239 - 249 (11)
wLine+=PadR(z_cid_pri,04,0) // cid principal 250 - 253 (04)
wLine+=PadR(z_cid_sec,04,0) // cid secundario 254 - 257 (04)
wLine+=PadR(replicate(" ",04),04,0) // cid causas comple 258 - 261 (04)
wLine+=PadR(z_cid_obi,04,0) // cid obito 262 - 265 (04)
wLine+=PadR(replicate("0",03),03,0) // cod solic liber 266 - 268 (03)
wLine+=PadR(z_nome_pac,70,0) // nome paciente 269 - 338 (70)
wLine+=PadR(Subs(z_data_nasc,7,4),4,0) // ano data nasc 339 - 342 (04)
wLine+=PadR(Subs(z_data_nasc,4,2),2,0) // mes data nasc 343 - 344 (02)
wLine+=PadR(Subs(z_data_nasc,1,2),2,0) // dia data nasc 345 - 346 (02)
wLine+=PadR(z_sexo_pac,01,0) // sexo paciente 347 - 347 (01)
wLine+=PadR(z_raca_pac,02,0) // raca paciente 348 - 349 (02)
wLine+=PadR(z_nome_mae,70,0) // nome mae pac 350 - 419 (70)
wLine+=PadR(z_nome_resp,70,0) // nome responsavel 420 - 489 (70)
wLine+=PadR(z_tpo_doc_pac,01,0) // tipo doc pac 490 - 490 (01)
wLine+=PadR(z_doc_pac,11,0) // doc paciente 491 - 501 (11)
wLine+=PadR(z_cart_sus,15,0) // cartao sus 502 - 516 (15)
wLine+=PadR(z_nacionali,03,0) // nacionalidade 517 - 519 (03)
wLine+=PadR(z_tipo_logr,03,0) // tipo logradouro 520 - 522 (03)
wLine+=PadR(z_ende_pac,50,0) // endereco paciente 523 - 572 (50)
wLine+=PadR(z_num_ende,07,0) // numero endereco 573 - 579 (07)
wLine+=PadR(z_comp_ende,15,0) // complemento ende 580 - 594 (15)
wLine+=PadR(z_bairro_ende,30,0) // bairro endereco 595 - 624 (30)
wLine+=PadR(z_cod_ibge,06,0) // codigo ibge pac 625 - 630 (06)
wLine+=PadR(z_uf_ende,02,0) // uf endereco pac 631 - 632 (02)
wLine+=PadR(z_cep_ende,08,0) // cep endereco pac 633 - 640 (08)
wLine+=PadR(replicate(" ",08),08,0) // espacos prontua 641 - 648 (08)
wLine+=PadL(z_prontua,07,0) // prontuario 649 - 655 (07)
wLine+=PadR(z_enfer_pac,04,0) // enfermaria 656 - 659 (04)
wLine+=PadL(z_leito_pac,04,0) // leito 660 - 663 (04)
wLine+=chr(13)+chr(10)
File_Save(HandleDCIH,wLine)
DbSkip()
enddo
File_Save(HandleDCIH,chr(26))
FClose(HandleDCIH)
restscreen(00,00,maxrow(),maxcol(),telasave)
close all
---
Nota da Moderação (Maligno):
A presente mensagem foi editada para a inserção das tags de indentação de código. Se ler o código alheio já é uma coisa extremamente aborrecida e difícil, sem a indentação fica muito pior. Indentando, pode-se notar agora, melhora muito. Portanto, por favor, futuramente, quando for postar código e/ou estruturas e/ou scripts, mesmo que em menor tamanho, use essas tags de identação. Aliás, isso já incentiva um pouco mais pessoas a ler o código e, assim, crescem suas chances de ter seu problema resolvido. Ou seja, você também ganha.