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>