Indentando PRGS

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

evolver
Membro Master
Membro Master
Mensagens: 189
Registrado em: 28 Ago 2004 01:02
Localização: Cruz Alta - RS
Contato:

Indentando PRGS

Mensagem por evolver »

Rotina extremamente basica para identação automática de PRGs, usa funções memo o que pode limitar o tamanho do arquivo aberto e as linhas alêm de poder haver algum bug, mas no geral funciona bunitinho.

Código: Selecionar todos

parameters nomearq
if .not. file(nomearq)
    ? chr(07)+"Nome de Arquivo nao encontrado"
    return
 endif
cls
load=memoread(nomearq)
nome=left(nomearq,rat(".",nomearq))+"IDB"
memowrit(nome,load)
nlin=mlcount(load,254)
prog=""
for i = 1 to nlin
    @ 0,0 say "Aguarde termino da fase 1 ->"+str(int((i*100)/nlin),3)+"% concluido"
    line=alltrim(memoline(load,254,i))+chr(13)+chr(10)
    prog+=line
next
load=strtran(prog,";"+chr(13)+chr(10),"")
tab=0
aum=0
prog=""
nlin=mlcount(load,254)
i=1
while i <=nlin
@ 0,0 say "Aguarde termino da fase 2 ->"+str(int((i*100)/nlin),3)+"% concluido"
line=lower(alltrim(memoline(load,254,i)))
lin=alltrim(memoline(load,254,i))
if line==""
    i++
    loop
endif
if line = "elseif " .or. line= "case " .or. line == "end" .or. line == "endif" .or. line == "enddo" .or. line == "next" .or. line == "endcase" .or. line == "otherwise"
    progx=space(tab-4)+lin+chr(13)+chr(10)
else
    progx=space(tab)+lin+chr(13)+chr(10)
endif
prog+=progx
do case
case line = "do while "
    tab+=4
case line == "enddo"
    tab-=4
case line = "while "
    tab+=4
case line == "end"
    tab-=4
case line = "if "
    tab+=4
case line == "endif"
    tab-=4
case line = "for "
    tab+=4
case line == "next"
    tab-=4
case line == "do case"
    tab+=4
case line == "endcase"
    tab-=4
endcase
i++
enddo
memowrit(nomearq,prog)
Sergio "Evolver" Fagundes

CURVE-SE DIANTE DE MIM SER INSIGNIFICANTE, POIS EU SOU ROOT
Só respondo em PVT perguntas relativas ao que eu faço. Qualquer outra dúvida favor postar no fórum.
Peço aos veteranos que antes de responder a uma pergunta repetida dêem uma pesquisada e instruam a quem perguntou a fazer o mesmo.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Olá Evolver!

O que é mesmo "identar" um PRG, hein?

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Boa Noite Jânio.
Endentar ou Endentação é formatar o prg para melhor interpretação do código, disponibilizando um espaço ou recuo a partir da margem esquerda.
Isso é utilizado em mtas linguagens de programação eu programo tb em Java se eu não endentar meus fontes eu me perco...a mesma coisa faço com meus prgs...

por exemplo um código sem endentação

Código: Selecionar todos

  while !eof()
  if lastkey()=27
  exit
  endif
  do Case
  case a=1
  case a=2
  otherwise
  Endcase
  enddo
  
Com Endentação

Código: Selecionar todos

  while !eof()
      if lastkey()=27
          exit
      endif
      do Case
          case a=1
          case a=2
          otherwise
      Endcase
  enddo  
  

:xau


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Responder