1. Re: Translate from Pascal to Euphoria -- CChris has done!!!

Hello, CChris!!

I have no words to thank you for the work. 
I am deep thank you very much! It was very 
kindness of you!
And the most important: your translation is 
a true lesson for me and for others, of course 
(today or in the future)!!
I intend, now, make a study on your annotations
and put the new program to run!

Merci beacoup. Santé et Bonne Chance!

Paulo Fernandes
Brazil



CChris wrote:
> .................. 
> 
> Here is a translation attempt. I haven't programmed in Pascal for a while,
> so I may have forgotten about subtleties of buffered and formatted file I/O.
> I left translation notes to help you see hw I translated nontrivial parts.
> Don't assume it will have the right formatting out of the box. For this sort
> of stuff, Pascal is way easier to write code with.
> 
> CChris
> 
> -- TR: {} comment brackets are replaced by trailing -- comments
> ----------------------------------------------------------------------
> -- * Prog.: MyProg.pas
> -- * Data : 19/05/2007
> -- * Obs. : Faz trabalho parcial de outro software
> -- *----------------------------------------------------------------------
> -- TR: call your file MyProg.ex, and process cmd line therein
> -- Program  MyProg (p1, p2, p3);
> -- TR: not needed, as we are going to use cross platform I/O routines
> -- Uses  Dos;
> constant TAMBLOCO = 10000,
>        NUMJOGOS = 14
> integer totCPs
> integer limTol
> --       aCPs     : array [1..TAMBLOCO]      of string[NUMJOGOS];
> -- TR: Eu doesn't know about arrays or typed sequences. This data will be used
> at initialisation time
> sequence aCPs
> --       mMgs     : array [1..TAMBLOCO,1..4] of byte;
> sequence mMgs
> ----------------------------------------------------------------------
> procedure MostHora()
> sequence s1, s2
> -- TR: files are represented by integer handles
> integer f9 
> -- TR: Eu doesn't know about instruction groups
> -- begin
> -- TR: '\' must be escaped in manifest strings, as it is the escape character
>     s1="C:\\Windows\\System32\\Cmd.exe "
>     s2="/C Time < C:\\Enter. > Wrk09.txt"
> --    exec(s1,s2);
> -- TR: please refer to the date() and time() commands. I don't know if the
> formats
> are the same as yours.
>     system_exec(s1 & s2,2)
> --    assign(f9,'Wrk09.txt');
> --    reset (f9);
>       f9 = open("Wrk09.txt","r")
> --    readln(f9,s1);
>       s1 = gets(f9)
>     close (f9)
> --    s2:=copy(s1,13,20);
>       s2 = s1[13..13+20-1]
> --    write(s2);
> -- TR: 1 is standard output
>       puts(1,s2)
>  end procedure
> 
> constant FieldSeparator = ',' -- hopefully
> include get.e
> 
> function split(sequence s)
> -- This convrts a flat comme separated record into parts
> -- converting numeric text to values
> integer pos
> sequence field,result
> 
> result={}
> while 1 do
>     pos=find(FieldSeparator,s)
>     field = value(s)
>     if field[1] = GET_SUCCESS then -- number
>         result &= field[2] 
>     else -- text
>         if pos>0 then
>             result=append(result,s[1..pos-1])
>         else
>             result=append(result,s)
>         end if
>     end if
>     if pos=0 then exit 
>     else s=s[pos+1..$]
>     end if
> end while
> return result
> end function
> ----------------------------------------------------------------------
> procedure PegaCPs()
> > var   comb  : string[NUMJOGOS];
> -- TR: this may be an integer as it will receive the gets() output
> object comb
> integer i, j
> integer f1
> -- TR: needed to read the blocks
> -- begin
>     MostHora()
> --    writeln('--Pegando CPs...');
> -- TR: The line break must be explicits
>       puts(1,"\n--Pegando CPs...\n")
> --    assign (f1,'KillCPs.txt');
> --    reset  (f1);
>       f1 = open("KillCPs.txt'","r")
>     totCPs=1
> -- TR: must initialise sequences before writing to them
>      3Mgs = repeat(0,TAMBLOCO)
>      aCPs = repeat(0,TAMBLOCO)
> --    while not(eof(f1)) do begin
> -- TR: There is no eof(), use the type of what gets() returns
>      while 1 do
> --       read(f1,comb);
>         comb = gets(f1)
>         if atom(comb) then exit end if
> -- TR: I assumed your record format is: a
> string,comma,byte1,comma,byte2,comma,byte3,comma,byte4,lineTol
> -- TR: the string being at most NUMJOGOS char long.
>         comb = split(comb)
>         aCPs[totCPs]= comb[1]
> --        for i=1 to 4 do            --lê limites
> --          read(f1,mMgs[totCPs,i]);
> --        end for
>         mMgs[totCPs] = comb[2..5]
> --       read(f1,limTol);
>         limTol = comb[$]
> --       readln(f1);
>          totCPs+=1
>      end while
>      totCPs-=1
>      for i=1 to totCPs do 
> --       write(aCPs[i]:NUMJOGOS);
> -- TR: can't use constants in formats directly
> -- TR: you'd have to build a format string and then apply it
> -- TR: I also assumed you want left justified text. Remove the '-' to get
> right
> justification.
>         printf(1,"%-14s",{aCPs[i]})
>         for j=1 to 4 do 
>            printf(1,"%-3s",{mMgs[i][j]})
>         end for
>         printf(1,"%-3s",{limTol})
> --       writeln('');
>         puts(1,'\n')
>      end for
>      close(f1)
>  end procedure
> ----------------------------------------------------------------------
> constant false = 0, true = not false
> procedure Expurga (sequence arqEnt,sequence arqSai,sequence arqRes)
> object comb --       : string[NUMJOGOS];
> integer f1, f2, f3
> integer iReg, oks 
> integer i, j, nTol
> integer nPts
> atom perc
> -- no builtin boolean type, although it was requested many times
> integer eBoa
> sequence splComb
>     MostHora()
>     puts(1,"\n--Fazendo Expurgo...\n")
> --    assign (f1,arqEnt);
> --    reset  (f1);
>     f1 = open(arqEnt,"r")
> --    assign (f2,arqSai);
> --    rewrite(f2);
>      f2 = open(arqSai,"w")
>      iReg=0 oks=0
>      while 1 do 
>         comb = gets(f1)
>         if atom(comb) then exit end if
>         iReg+=1
>         eBoa=true
>         nTol=0
>         splComb = split(comb)
>         for i=1 to totCPs do 
>            nPts=0
>            for j=1 to NUMJOGOS do 
> >             if splComb[j]=aCPs[i][j] then
>                   nPts+=1
>               end if
>            end for
>            if nPts < mMgs[i][1]) or (nPts > mMgs[i][2]) then
>               nTol+=1
>               if nTol > limTol then 
>                  eBoa=false
>                  exit
>               end if
>            end if
>         end for
>         if eBoa=true then 
>            oks+=1
> --          writeln(f2,comb);
> -- TR: writing a flat file as I expect it to be on entry
> -- TR: this can be made simpler using one line by field, but then you'd have
> to convert older files
> -- TR: I don't know if this issue is relevant.
>            puts(f2,comb)
>         end if
>      end while
>      perc=oks/(iReg*100)
> --    writeln(iReg:10, oks:10, perc:09:2,'%');
>      printf(1,"%-10s %-10s %-9:2d%%",{iReg,oks,perc}) 
>      -- salva dados em arquivo 
> --    assign (f3,arqRes);
> --    append (f3);
<snip>

new topic     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu