MAIN SCRIPT
COM**************************************************
COM Writer Porter Broyles
COM Name: Field Mapping
COM Written July 2008
COM This is a beautiful script that maps fields out and provides a break down on the field map. This
COM is beneficial as it allows you to determine the normal field formats and the exceptions. EG
COM it will help you identify fields that should have the field map of XXX99999-99 but don't.
COM
COM While this is a beautiful script, it is provided here for educational purposes only. It is highly
COM inefficient, and there are much better ways to do this!
COM**************************************************
SET SAFETY OFF
DEL ALL OK
CLOSE
CLOSE SEC
f_time_start = time()
com DEL TEMP1.fil OK
com DEL FORMAT TEMP1 OK
DEL TEMP2.fil OK
DEL FORMAT TEMP2 OK
DEL TEMP_1.fil OK
DEL FORMAT TEMP_1 OK
DIALOG (DIALOG TITLE "User Dialog" WIDTH 478 HEIGHT 312 ) (BUTTONSET TITLE "&OK;&Cancel" AT 384 12 DEFAULT 1 ) (ITEM TITLE "f" TO "v_table" AT 192 108 WIDTH 263 HEIGHT 175 ) (TEXT TITLE "Select table" AT 36 112 )
COM v_table = "AAA_Voucher_Header"
OPEN %v_table%
DEL f_field OK
DIALOG (DIALOG TITLE "User Dialog" WIDTH 528 HEIGHT 326 ) (BUTTONSET TITLE "&OK;&Cancel" AT 420 24 DEFAULT 1 ) (TEXT TITLE "Select Character Field" AT 24 100 ) (ITEM TITLE "C" TO "v_field" AT 180 96 WIDTH 318 HEIGHT 212 )
COM v_field = "vendor"
COUNT
v_cnt = 1
v_cntr = count1
v_record = blank(20)
DO Z02_field_index WHILE v_cnt <= v_cntr
SET ECHO ON
OPEN TEMP1
SUMMARIZE ON f_test to TEMP2 PRESORT OPEN
SORT ON COUNT D to TEMP3 OPEN
TOTAL FIELDS COUNT
LOCATE RECORD 1
v_1 = count
v_map1 = f_test
LOCATE RECORD 2
v_2 = count
v_map2 = f_test
Locate RECORD 3
v_3 = count
v_map3 = F_test
Locate RECORD 4
v_4 = count
v_map4 = f_test
V_criteria = "1=1"
IF (v_1+v_2+v_3+v_4) > (.95*total1) ASSIGN V_criteria = "NOT MAP(%v_field%, ALL('%v_map1%')) AND NOT MATCH(%v_field%, ALL('%v_map2%')) AND NOT MATCH(%v_field%, ALL('%v_map3%')) AND NOT MATCH(%v_field%, ALL('%v_map4%'))"
IF (v_1+v_2+v_3) > (.95*total1) ASSIGN V_criteria = "NOT MAP(%v_field%, ALL('%v_map1%')) AND NOT MATCH(%v_field%, ALL('%v_map2%')) AND NOT MATCH(%v_field%, ALL('%v_map3%'))"
IF (v_1+v_2) > ( .95*total1) ASSIGN V_criteria = "NOT MAP(%v_field%, ALL('%v_map1%')) AND NOT MATCH(%v_field%, ALL('%v_map2%'))"
IF (v_1) > (.90*total1) ASSIGN V_criteria = "NOT MAP(%v_field%, ALL('%v_map1%'))"
OPEN temp1
EXTRACT FIELDS ALL IF %v_criteria% TO TEMP5
v_time_stop = time()
Z02 Field Index
ZOPEN %v_table%
LOCATE RECORD v_cnt
v_cnt1 = 1
v_cntr1 = len(ALL(%v_field%))
SET FILTER recno() =v_cnt
DO z03_index_pt_2 WHILE v_cnt1 <= v_cntr1
EXTRACT FIELD ALL sub(v_record,1,20) as "f_test" TO TEMP1 APPEND
OPEN %v_table%
DELete f_field OK
DELETE v_record OK
v_record = BLANK(20)
v_cnt = v_cnt +1
Z03 Index pt 2
IF v_cnt1 <> 1 SET ECHO OFF
IF LEN(INCLUDE(sub(%v_field%,v_cnt1,1)," ")) = 1 ASSIGN v_record = ALL(v_record) + " "
IF LEN(INCLUDE(sub(%v_field%,v_cnt1,1),"1234567890")) = 1 ASSIGN v_record = ALL(v_record) + "9"
IF LEN(INCLUDE(sub(UPPER(%v_field%),v_cnt1,1),"ABCDEFGHIJKLMNOPQRSTUVWXYZ")) = 1 ASSIGN v_record = ALL(v_record) + "X"
IF LEN(EXCLUDE(sub(UPPER(%v_field%),v_cnt1,1),"ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890")) = 1 ASSIGN v_record = all(v_record) + "!"
v_cnt1 = v_cnt1 +1