CLEAR CLEAR ALL CLOSE ALL RELEASE ALL SET CENTURY ON ON ESCAPE DO quitit ON KEY LABEL F10 SUSPEND ON KEY LABEL F11 RESUME PUBLIC showit, lncount, lcount ln=0 && length of name of variable when no PUB in it lcount=5 lncount=0 showit=.F. xquit=.F. xfile='memory.txt' IF FILE(xfile) xfilehan = FOPEN(xfile) ELSE MESSAGEBOX(xfile+ " does not exist.",16) RETURN ENDIF IF !FILE('arrays.txt') =FCREATE('arrays.txt') ENDIF IF !FILE('messups.txt') =FCREATE('messups.txt') ENDIF IF !FILE('messups1.txt') =FCREATE('messups1.txt') ENDIF IF xfilehan > 0 && successfully opened memory.txt xfileh = FOPEN('arrays.txt',2) IF xfileh=0 =FCLOSE(xfilehan) MESSAGEBOX("Cannot open file arrays.txt",16) RETURN ENDIF =FCHSIZE(xfileh,0) xfileh1 = FOPEN('messups1.txt',2) IF xfileh1=0 =FCLOSE(xfilehan) =FCLOSE(xfileh) MESSAGEBOX("Cannot open file messups1.txt",16) RETURN ENDIF =FCHSIZE(xfileh1,0) xfileh2 = FOPEN('messups.txt',2) IF xfileh2=0 =FCLOSE(xfilehan) =FCLOSE(xfileh) =FCLOSE(xfileh1) MESSAGEBOX("Cannot open file messups.txt",16) RETURN ENDIF =FCHSIZE(xfileh2,0) *---Search for the begining of the section xiniold="" xiniline="" DO WHILE !FEOF(xfilehan) .AND. !xquit xiniline="" xiniline = FGETS(xfilehan) * xiniline=cleanline(xiniline) IF "variables defined" $ xiniline EXIT ENDIF xiniline=checkit(xiniline) IF TYPE('xiniline')="C" .AND. !EMPTY(xiniline) .AND. "Pub A" $ xiniline *IF RIGHT(ALLTRIM(xiniline),1)="A" .AND. ! "(" $ xiniline .AND. ! "Pub C " $ xiniline IF LEN(ALLTRIM(xiniline))>1 IF ALLTRIM(xiniline)="Pub A" .AND. !EMPTY(xiniold) xiniline=PADR(ALLTRIM(xiniold),40)+LTRIM(xiniline) * xiniline=cleanline(xiniline) =FPUTS(xfileh,xiniline) ELSE lnpos=0 lnpos=AT('Pub A',xiniline) IF lnpos>0 xiniline=PADR(ALLTRIM(LEFT(xiniline,lnpos-1)),40)+RIGHT(xiniline,LEN(xiniline)-(lnpos-1)) =FPUTS(xfileh,xiniline) ELSE =FPUTS(xfileh,xiniline) ENDIF ENDIF ENDIF ELSE && not the first line of an array IF !"Pub "$ xiniold.AND. ! "(" $ xiniold IF LEN(ALLTRIM(xiniold))>ln ln=LEN(ALLTRIM(xiniold)) ENDIF IF LEFT(ALLTRIM(xiniline),3)="Pub" xiniline=PADR(ALLTRIM(xiniold),40)+ALLTRIM(xiniline) ENDIF lnpos=0 lnpos=AT('Pub ',xiniline) IF lnpos>0 xiniline=PADR(ALLTRIM(LEFT(xiniline,lnpos-1)),40)+RIGHT(xiniline,LEN(xiniline)-(lnpos-1)) ENDIF aresult=";" FOR i = 1 TO LEN(xiniline) aresult=aresult+ALLTRIM(STR(ASC(SUBSTR(xiniline,i,1))))+";" ENDFOR DO CASE CASE OCCURS('34',aresult)=2 =FPUTS(xfileh,xiniline) CASE RIGHT(ALLTRIM(xiniline),3)=".T." .OR. RIGHT(ALLTRIM(xiniline),3)=".F." =FPUTS(xfileh,xiniline) OTHERWISE IF "Pub C " $ xiniline .AND. OCCURS('34',aresult)=1 xiniline=LTRIM(xiniline)+CHR(34) =FPUTS(xfileh,xiniline) &&^^tch missing quotes checked ok ELSE IF ") C" $ xiniline .AND. OCCURS('34',aresult)=1 xiniline=LTRIM(xiniline)+CHR(34) =FPUTS(xfileh,xiniline) &&^^tch missing quotes checked out ELSE =FPUTS(xfileh,xiniline) && tested ok ENDIF ENDIF ENDCASE *ENDIF ELSE && additional array line has Pub and ( in it lnpos=0 lnpos=AT('Pub ',xiniline) IF lnpos>0 xiniline=PADR(ALLTRIM(LEFT(xiniline,lnpos-1)),40)+RIGHT(xiniline,LEN(xiniline)-(lnpos-1)) ENDIF aresult=";" FOR i = 1 TO LEN(xiniline) aresult=aresult+ALLTRIM(STR(ASC(SUBSTR(xiniline,i,1))))+";" ENDFOR IF "Pub C " $ xiniline .AND. OCCURS('34',aresult)=1 xiniline=LTRIM(xiniline)+CHR(34) =FPUTS(xfileh,xiniline) &&^^tch ENDIF IF LEFT(xiniline,5)=SPACE(5) && additional array lines *^^tch IF !LEFT(ALLTRIM(xiniline),1)="(" xiniline=checkit(xiniline) xiniold=checkit(xiniold) =FPUTS(xfileh,ALLTRIM(xiniold)+ALLTRIM(xiniline)) ELSE =FPUTS(xfileh,ALLTRIM(xiniline)) ENDIF ELSE IF "Pub "$xiniline =FPUTS(xfileh,xiniline) &&^tch ELSE IF !LEFT(ALLTRIM(xiniline),1)="(" *=FPUTS(xfileh1,"REMOVE!"+xiniline) ELSE =FPUTS(xfileh,ALLTRIM(xiniline)) ENDIF ENDIF ENDIF ENDIF ENDIF DO CASE CASE ASC(RIGHT(xiniline,1))=41 && ) numeric type CASE ASC(RIGHT(xiniline,1))=34 && " character type CASE RIGHT(xiniline,3)=".T." && . logical .T. ASC 46 CASE RIGHT(xiniline,3)=".F." && . logical .F. ASC 46 CASE RIGHT(xiniline,10)=" / / " && date type empty CASE "Pub D" $ xiniline && date type CASE ") C" $ xiniline .AND. !ASC(RIGHT(RTRIM(xiniline),1))=34 ? "FIXED: " ? ALLTRIM(xiniold)+ALLTRIM(xiniline) ? "----------------------------------------------------------------" OTHERWISE IF TYPE('xiniline')="C" .AND. !EMPTY(xiniline) .AND. "Pub A" $ xiniline * top Array line ELSE =FPUTS(xfileh2,"------------------------------------------------------------------") =FPUTS(xfileh2,"Previous line: "+xiniold) =FPUTS(xfileh2,"This line: "+xiniline) =FPUTS(xfileh2,"Last Character: "+RIGHT(xiniline,1)+" "+ALLTRIM(STR(ASC(RIGHT(xiniline,1))))) =FPUTS(xfileh2,"Length: "+ALLTRIM(STR(LEN(xiniline)))) ENDIF ENDCASE xiniold=xiniline ENDDO =FCLOSE(xfileh) =FCLOSE(xfileh1) =FCLOSE(xfileh2) =FCLOSE(xfilehan) ELSE MESSAGEBOX("Cannot open file "+xfile,16) RETURN ENDIF DO copytotable ON ESCAPE ON KEY LABEL F10 ON KEY LABEL F11 ? "Longest length is: "+ALLTRIM(STR(ln)) ? "FINISHED!" RELEASE showit RELEASE lncount RELEASE lcount RETURN PROCEDURE quitit =FCLOSE(xfilehan) =FCLOSE(xfileh1) =FCLOSE(xfileh) =FCLOSE(xfileh2) xquit=.T. ON ESCAPE ON KEY LABEL F10 ON KEY LABEL F11 RETURN ********************************* FUNCTION cleanline PARAMETERS xiniline IF TYPE('xiniline')="L" .OR. LEN(ALLTRIM(xiniline))=0 xiniline=SPACE(50) ENDIF PRIVATE result result="" #DEFINE _END_CHAR CHR(10) #DEFINE _NULL CHR(0) istop=(LEN(xiniline)) FOR i = 1 TO istop DO WHILE ASC(SUBSTR(xiniline, i, 1))!=0 .AND. SUBSTR(xiniline, i, 1) != _NULL ; .AND. ASC(SUBSTR(xiniline, i, 1))!=32 IF SUBSTR(xiniline, i, 1) != _END_CHAR .AND. SUBSTR(xiniline, i, 1)!=">"; .AND.SUBSTR(xiniline, i, 1) != _NULL; .AND.ASC(SUBSTR(xiniline, i, 1))!=32 result = LEFT(xiniline, i) i=i+1 ELSE i=i+1 ENDIF ENDDO i=i+1 ENDFOR FOR i = 1 TO LEN(result) IF ASC(SUBSTR(result, i, 1))=32 .AND. i>1 result = LEFT(result, i-1) ENDIF IF ASC(SUBSTR(result, i, 1))=13 .AND. i>1 result = LEFT(result, i-1) ENDIF ENDFOR IF TYPE('result')="L" .OR. LEN(ALLTRIM(result))=0 result=SPACE(50) ENDIF RETURN result FUNCTION checkit PARAMETERS xiniline IF TYPE('xiniline')="C" .AND. !EMPTY(xiniline) .AND. "Pub A" $ xiniline FOR i = 1 TO LEN(xiniline) IF ASC(SUBSTR(xiniline, i, 1))=32 .AND. i>1 xinilinet = LEFT(xiniline, i-1) ENDIF *^^Tch IF ASC(SUBSTR(xiniline, i, 1))=13 .AND. i>1 xinilinet = LEFT(xiniline, i-1) ENDIF *^^Tch IF ASC(SUBSTR(xiniline, i, 1))=10 .AND. i>1 xinilinet = LEFT(xiniline, i-1) ENDIF ENDFOR IF "RATE_ERR " $ xiniline showit=.T. ENDIF IF showit lncount=lncount+1 ? ALLTRIM(STR(lncount))+"-"+xiniline ENDIF ENDIF RETURN xiniline PROCEDURE copytotable CLOSE TABLES WAIT WINDOW "Press anykey to create table of memory variables: memtab.dbf" CLEAR IF FILE('memtab.dbf') DELETE FILE ('memtab.dbf') ENDIF SELE 0 CREATE TABLE MEMTAB FREE (cvar c(40), cscope c(10), ctype c(1), cvalue c(200),; nvalue N(15,2), lvalue L, dvalue D, csubscript c(20)) IF FILE('arrays.txt') !COPY arrays.txt newmem.txt ENDIF xfile='newmem.txt' IF FILE(xfile) xfilehan = FOPEN(xfile) ELSE MESSAGEBOX(xfile+ " does not exist.",16) RETURN ENDIF IF xfilehan > 0 && successfully opened memory.txt DO WHILE !FEOF(xfilehan) .AND. !xquit xiniline="" xiniline = FGETS(xfilehan) xiniline=LTRIM(xiniline) IF LEN(ALLTRIM(xiniline))>1 WAIT WINDOW xiniline NOWAIT DO CASE CASE "Pub A" $ xiniline SELE MEMTAB APPEND BLANK myvar=ALLTRIM(LEFT(xiniline,40)) REPLACE MEMTAB.cvar WITH ALLTRIM(LEFT(xiniline,40)) REPLACE MEMTAB.cscope WITH "Pub" REPLACE MEMTAB.ctype WITH "A" CASE LEFT(xiniline,1)="(" SELE MEMTAB APPEND BLANK IF !EMPTY(myvar) REPLACE MEMTAB.cvar WITH myvar ENDIF REPLACE MEMTAB.cscope WITH "Pub" REPLACE MEMTAB.csubscript WITH SUBSTR(xiniline,1,AT(')',xiniline)) lcvalue=SUBSTR(xiniline,AT(')',xiniline)+6,1) DO CASE CASE lcvalue="N" REPLACE MEMTAB.ctype WITH "N" REPLACE MEMTAB.nvalue WITH ; VAL(SUBSTR(xiniline,RAT('(',xiniline)+1,RAT(')',xiniline)-RAT('(',xiniline)-1)) CASE lcvalue="C" REPLACE MEMTAB.ctype WITH "C" REPLACE MEMTAB.cvalue WITH ; SUBSTR(xiniline,AT(CHR(34),xiniline)+1,(RAT(CHR(34),xiniline)-1)-AT(CHR(34),xiniline)) CASE lcvalue="L" REPLACE MEMTAB.ctype WITH "L" REPLACE MEMTAB.lvalue WITH ; IIF(SUBSTR(xiniline,AT('.',xiniline)+1,(RAT('.',xiniline)-1)-AT('.',xiniline))="T",.T.,.F.) CASE lcvalue="D" REPLACE MEMTAB.ctype WITH "D" REPLACE MEMTAB.dvalue WITH CTOD(RIGHT(ALLTRIM(xiniline),10)) ENDCASE CASE "Pub C" $ xiniline myvar="" SELE MEMTAB APPEND BLANK REPLACE MEMTAB.cvar WITH ALLTRIM(LEFT(xiniline,40)) REPLACE MEMTAB.cscope WITH "Pub" REPLACE MEMTAB.ctype WITH "C" REPLACE MEMTAB.cvalue WITH ; SUBSTR(xiniline,AT(CHR(34),xiniline)+1,(RAT(CHR(34),xiniline)-1)-AT(CHR(34),xiniline)) CASE "Pub N" $ xiniline myvar="" SELE MEMTAB APPEND BLANK REPLACE MEMTAB.cvar WITH ALLTRIM(LEFT(xiniline,40)) REPLACE MEMTAB.cscope WITH "Pub" REPLACE MEMTAB.ctype WITH "N" REPLACE MEMTAB.nvalue WITH ; VAL(SUBSTR(xiniline,AT('(',xiniline)+1,(RAT(')',xiniline)-2)-AT('(',xiniline))) CASE "Pub L" $ xiniline myvar="" SELE MEMTAB APPEND BLANK REPLACE MEMTAB.cvar WITH ALLTRIM(LEFT(xiniline,40)) REPLACE MEMTAB.cscope WITH "Pub" REPLACE MEMTAB.ctype WITH "L" REPLACE MEMTAB.lvalue WITH ; IIF(SUBSTR(xiniline,AT('.',xiniline)+1,(RAT('.',xiniline)-1)-AT('.',xiniline))="T",.T.,.F.) CASE "Pub D" $ xiniline myvar="" SELE MEMTAB APPEND BLANK REPLACE MEMTAB.cvar WITH ALLTRIM(LEFT(xiniline,40)) REPLACE MEMTAB.cscope WITH "Pub" REPLACE MEMTAB.ctype WITH "D" REPLACE MEMTAB.dvalue WITH CTOD(RIGHT(ALLTRIM(xiniline),10)) OTHERWISE ? "CHECK: "+myvar ? xiniline LOOP ENDCASE ENDIF ENDDO ENDIF GO TOP INDEX ON cvar TAG cvar SET ORDER TO TAG cvar BROWSE IF USED('memtab') USE IN MEMTAB ENDIF RETURN