*----------------------------------------------------------------------* * * PROPERTY OF Advanced Transportation Systems * (C)opyright 2019, All Rights Reserved * * DATE 17:25:28 01 FEB 2019 * * AUTHOR Sam Powell * * PURPOSE Program to create a tab delimeted file. * from the TCL based on the dictionary fields of the file * passed in the sentence. * * USAGE: EXCEL.TAB {FILENAME} {FIELDNAMES} * Must have an active select list prior to running. *----------------------------------------------------------------------* * Program maintenance * Date Programmer Reason *----------------------------------------------------------------------* * *----------------------------------------------------------------------* $INCLUDE STD.INSERTS CONSTANTS $INCLUDE INSERTS DIM.DICT.FILE MAT D.DICT.FILE = "" ; SW.DICT.FILE = "" ; K.DICT.FILE = "" *----------------------------------------------------------------------* MAIN: * *----------------------------------------------------------------------* GOSUB INIT SENTENCE = TRIM(@SENTENCE) PRINT SENTENCE FILENAME = FIELD(SENTENCE," ",2) GOSUB OPEN.FILE IF NOT(ERROR) THEN GOSUB GET.FIELDS END IF NOT(ERROR) THEN GOSUB PROCESS.RECORDS END RETURN *----------------------------------------------------------------------* PROCESS.RECORDS:* *----------------------------------------------------------------------* DONE=FALSE LOOP READNEXT K.FILE ELSE DONE=TRUE UNTIL DONE DO GOSUB READ.FILE IF SW.FILE THEN PRINT ".": GOSUB BUILD.RECORD END REPEAT PRINT PRINT "Uploading file" EXCEL.FILE = LOGNAME:".EXCEL" EXCEL.KEY = FILENAME:".txt" OPEN "",EXCEL.FILE TO F.EXCEL.FILE THEN WRITE RECORD TO F.EXCEL.FILE,EXCEL.KEY PRINT EXCEL.KEY:" Written to ":EXCEL.FILE:" Press RETURN to upload file": ; INPUT Q STATUS="" PC.FOLDER = "C:\TEMP" PC.FILE = EXCEL.KEY CALL *ATS$PCWRITE(RECORD,PC.FOLDER,PC.FILE,STATUS) PROGRAM.TO.CALL = "EXCEL.EXE" ARGS = PC.FOLDER:"\":PC.FILE MODE='' ; STATUS='' CALL *ATS$PCRUN(PROGRAM.TO.CALL,ARGS,MODE,STATUS) END RETURN *----------------------------------------------------------------------* BUILD.RECORD:* *----------------------------------------------------------------------* MAX.FIELDS = DCOUNT(FIELD.NAMES,@VM) LINE = "" ; POS=1 FOR MV = 1 TO MAX.FIELDS ATB = FIELD.ATBS<1,MV> CONV = FIELD.CONVS<1,MV> DESC = FIELD.DESC<1,MV> NAME = FIELD.NAMES<1,MV> TYPE = FIELD.TYPES<1,MV> IF NUM(ATB) THEN IF ATB EQ 0 THEN VALUE = K.FILE END ELSE VALUE = DATA END IF CONV GT "" THEN VALUE = OCONV(VALUE,CONV) END END ELSE IF TYPE = "I" THEN READ ITYPE.ITEM FROM F.DICT.FILE,NAME THEN @RECORD = DATA @ID = K.FILE VALUE = ITYPE(ITYPE.ITEM) END END END CONVERT '"' TO '' IN VALUE CONVERT @SM TO @VM IN VALUE MAX.VLS = DCOUNT(VALUE,@VM) FOR VLS = 1 TO MAX.VLS IF COUNT(VALUE<1,VLS>,',') GE 1 THEN VALUE<1,VLS> = QUOTE(VALUE<1,VLS>) END NEXT VLS CONVERT @VM TO "," IN VALUE LINE = VALUE POS += 1 NEXT MV * * Convert the FM's to TAB's * RECORD<-1> = CHANGE(LINE,@FM,TAB) RETURN *----------------------------------------------------------------------* GET.FIELDS:* *----------------------------------------------------------------------* FIELDS = FIELD(SENTENCE," ",3,99) CONVERT " " TO @VM IN FIELDS MAX.FIELDS = DCOUNT(FIELDS,@VM) FIELD.NAMES = "" ; FIELD.ATBS = "" ; FIELD.CONVS = "" FIELD.DESC = "" ; FIELD.TYPES="" POS = 1 ; LINE="" FOR MV = 1 TO MAX.FIELDS K.DICT.FILE = FIELDS<1,MV> GOSUB READ.DICT.FILE IF SW.DICT.FILE THEN FIELD.NAMES<1,-1> = K.DICT.FILE FIELD.ATBS<1,-1> = DICT.FILE.LOC FIELD.CONVS<1,-1> = DICT.FILE.CONV FIELD.TYPES<1,-1> = DICT.FILE.TYPE DISP.NAME = CHANGE(DICT.FILE.DISP.NAME,@VM," ") FIELD.DESC<1,-1> = DISP.NAME LINE = DISP.NAME POS += 1 END NEXT MV RECORD<-1> = CHANGE(LINE,@FM,TAB) RETURN *----------------------------------------------------------------------* READ.FILE:* *----------------------------------------------------------------------* SW.FILE=1 READ DATA FROM F.FILE,K.FILE ELSE SW.FILE=FALSE ; DATA='' RETURN *----------------------------------------------------------------------* READ.DICT.FILE:* *----------------------------------------------------------------------* MAT D.DICT.FILE='' ; SW.DICT.FILE=TRUE MATREAD D.DICT.FILE FROM F.DICT.FILE,K.DICT.FILE ELSE SW.DICT.FILE=0 RETURN *----------------------------------------------------------------------* OPEN.FILE:* *----------------------------------------------------------------------* OPEN "",FILENAME TO F.FILE ELSE STOP "ERROR: Opening File ":FILENAME END OPEN "DICT",FILENAME TO F.DICT.FILE ELSE STOP "ERROR: Opening DICT,":FILENAME END RETURN *----------------------------------------------------------------------* INIT: * *----------------------------------------------------------------------* ERROR=FALSE RECORD = "" ; TAB=CHAR(009) RETURN END