Re: Translate from Pascal to Euphoria -- CChris has done!!!
- Posted by Paulo Fernandes <paulof1953 at gmail.com> Jun 03, 2007
- 648 views
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>