[COLOR=#0000ff]'-----------------------------------------------------------------------[/color]
[COLOR=#0000ff]' Writing summary report from sorted file using [/color]
[COLOR=#0000ff]' Single level control break technique[/color]
[COLOR=#0000ff]'-----------------------------------------------------------------------[/color]
[COLOR=#0000ff]'[/color]
[COLOR=#0000ff]'------------------------- main program --------------------------------[/color]
[COLOR=#0000ff]' initialize global variables[/color]
nr_records [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
current_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]""[/color]
numcde [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]""[/color]
numcde_save [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]""[/color]
reference [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]""[/color]
qty [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
input_file [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"input.csv"[/color]
output_file [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"output.csv"[/color]
[COLOR=#0000ff]' create Dictionary object[/color]
[COLOR=#804040][b]set[/b][/color] hash [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]CreateObject[/color][COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]"Scripting.Dictionary"[/color][COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff]' create File System object[/color]
[COLOR=#804040][b]set[/b][/color] Fso [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]CreateObject[/color][COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]"Scripting.FileSystemObject"[/color][COLOR=#804040][b])[/b][/color]
[COLOR=#804040][b]const[/b][/color] ForReading [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color][COLOR=#804040][b],[/b][/color] ForWriting [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]2[/color][COLOR=#804040][b],[/b][/color] ForAppending [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]8[/color]
[COLOR=#0000ff]'open the input file for reading[/color]
[COLOR=#804040][b]set[/b][/color] oInFile [COLOR=#804040][b]=[/b][/color] fso[COLOR=#804040][b].[/b][/color]OpenTextFile[COLOR=#804040][b]([/b][/color]input_file[COLOR=#804040][b],[/b][/color] ForReading[COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff]'open the output file for writing[/color]
[COLOR=#804040][b]set[/b][/color] oOutFile [COLOR=#804040][b]=[/b][/color] fso[COLOR=#804040][b].[/b][/color]OpenTextFile[COLOR=#804040][b]([/b][/color]output_file[COLOR=#804040][b],[/b][/color] ForWriting[COLOR=#804040][b],[/b][/color] [COLOR=#ff00ff]True[/color][COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff]'for each line in the input file[/color]
wscript[COLOR=#804040][b].[/b][/color]echo [COLOR=#ff00ff]"processing file: "[/color] [COLOR=#804040][b]&[/b][/color] input_file
[COLOR=#804040][b]do[/b][/color] [COLOR=#804040][b]while[/b][/color] [COLOR=#804040][b]not[/b][/color] oInFile[COLOR=#804040][b].[/b][/color]AtEndOfStream
process_line
save_keys
[COLOR=#804040][b]loop[/b][/color]
[COLOR=#0000ff]'at end print summary[/color]
print_summary
[COLOR=#0000ff]'number of lines (without header)[/color]
wscript[COLOR=#804040][b].[/b][/color]echo [COLOR=#ff00ff]"Number of records processed: "[/color] [COLOR=#804040][b]&[/b][/color] nr_records [COLOR=#804040][b]-[/b][/color] [COLOR=#ff00ff]1[/color] [COLOR=#804040][b]& _[/b][/color]
[COLOR=#ff00ff]", output written to: "[/color] [COLOR=#804040][b]&[/b][/color] output_file
[COLOR=#0000ff]'close the input file[/color]
oInFile[COLOR=#804040][b].[/b][/color][COLOR=#804040][b]close[/b][/color]
[COLOR=#0000ff]'close the output file[/color]
oOutFile[COLOR=#804040][b].[/b][/color][COLOR=#804040][b]close[/b][/color]
[COLOR=#0000ff]'release objects from memory[/color]
[COLOR=#804040][b]set[/b][/color] hash [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]nothing[/b][/color]
[COLOR=#804040][b]set[/b][/color] fso [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]nothing[/b][/color]
[COLOR=#0000ff]'----------------------------- subroutines -----------------------------[/color]
[COLOR=#804040][b]sub[/b][/color] process_line
nr_records [COLOR=#804040][b]=[/b][/color] nr_records [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#0000ff] 'read the line[/color]
current_line [COLOR=#804040][b]=[/b][/color] oInFile[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]ReadLine[/color][COLOR=#804040][b]()[/b][/color]
[COLOR=#804040][b]if[/b][/color] nr_records [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color] [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff] 'do not process 1.line which contains header[/color]
[COLOR=#0000ff] 'write header ot the screen[/color]
wscript[COLOR=#804040][b].[/b][/color]echo current_line
[COLOR=#0000ff] 'write other header to the output file[/color]
out_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"NUMCDE; QTY & REFERENCE"[/color]
oOutFile[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]WriteLine[/color][COLOR=#804040][b]([/b][/color]out_line[COLOR=#804040][b])[/b][/color]
[COLOR=#804040][b]exit[/b][/color] [COLOR=#804040][b]sub[/b][/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]if[/b][/color]
[COLOR=#0000ff] 'get fields[/color]
line_array [COLOR=#804040][b]=[/b][/color] [COLOR=#a020f0]split[/color][COLOR=#804040][b]([/b][/color]current_line[COLOR=#804040][b],[/b][/color][COLOR=#ff00ff]";"[/color][COLOR=#804040][b])[/b][/color]
numcde [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]trim[/color][COLOR=#804040][b]([/b][/color]line_array[COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]0[/color][COLOR=#804040][b]))[/b][/color]
reference [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]trim[/color][COLOR=#804040][b]([/b][/color]line_array[COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]1[/color][COLOR=#804040][b]))[/b][/color]
qty [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]trim[/color][COLOR=#804040][b]([/b][/color]line_array[COLOR=#804040][b]([/b][/color][COLOR=#ff00ff]2[/color][COLOR=#804040][b]))[/b][/color] [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#0000ff] 'if not on first record[/color]
[COLOR=#804040][b]if[/b][/color] numcde_save [COLOR=#804040][b]<>[/b][/color] [COLOR=#ff00ff]""[/color] [COLOR=#804040][b]then[/b][/color]
process_control_break
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]if[/b][/color]
[COLOR=#0000ff] 'print current line[/color]
wscript[COLOR=#804040][b].[/b][/color]echo current_line
[COLOR=#0000ff] 'wscript.echo "numcde = '" & numcde & "'; " & _[/color]
[COLOR=#0000ff] ' "reference = '" & reference & "'; " & _[/color]
[COLOR=#0000ff] ' "qty = '" & qty & "'"[/color]
[COLOR=#0000ff] 'add elements to hash (i.e. dictionary)[/color]
[COLOR=#804040][b]if[/b][/color] hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]exists[/color][COLOR=#804040][b]([/b][/color]reference[COLOR=#804040][b])[/b][/color] [COLOR=#804040][b]then[/b][/color]
hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]item[/color][COLOR=#804040][b]([/b][/color]reference[COLOR=#804040][b])[/b][/color] [COLOR=#804040][b]=[/b][/color] hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]item[/color][COLOR=#804040][b]([/b][/color]reference[COLOR=#804040][b])[/b][/color] [COLOR=#804040][b]+[/b][/color] qty
[COLOR=#804040][b]else[/b][/color]
hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]item[/color][COLOR=#804040][b]([/b][/color]reference[COLOR=#804040][b])[/b][/color] [COLOR=#804040][b]=[/b][/color] qty
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]if[/b][/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]sub[/b][/color]
[COLOR=#804040][b]sub[/b][/color] process_control_break
[COLOR=#804040][b]if[/b][/color] numcde_save [COLOR=#804040][b]<>[/b][/color] numcde [COLOR=#804040][b]then[/b][/color]
print_summary
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]if[/b][/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]sub[/b][/color]
[COLOR=#804040][b]sub[/b][/color] save_keys
numcde_save [COLOR=#804040][b]=[/b][/color] numcde
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]sub[/b][/color]
[COLOR=#804040][b]sub[/b][/color] print_summary
out_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]""[/color]
[COLOR=#a020f0]keys[/color] [COLOR=#804040][b]=[/b][/color] hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]keys[/color]
[COLOR=#804040][b]for[/b][/color] i[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]0[/color] [COLOR=#804040][b]to[/b][/color] hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]count[/color][COLOR=#804040][b]-[/b][/color][COLOR=#ff00ff]1[/color]
out_line [COLOR=#804040][b]=[/b][/color] out_line [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]" "[/color] [COLOR=#804040][b]&[/b][/color] hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]item[/color][COLOR=#804040][b]([/b][/color][COLOR=#a020f0]keys[/color][COLOR=#804040][b]([/b][/color]i[COLOR=#804040][b]))[/b][/color] [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]" x "[/color] [COLOR=#804040][b]&[/b][/color] [COLOR=#a020f0]keys[/color][COLOR=#804040][b]([/b][/color]i[COLOR=#804040][b])[/b][/color]
[COLOR=#804040][b]next[/b][/color]
out_line [COLOR=#804040][b]=[/b][/color] numcde_save [COLOR=#804040][b]&[/b][/color] [COLOR=#ff00ff]";"[/color] [COLOR=#804040][b]&[/b][/color] out_line
[COLOR=#0000ff] 'write to the output file[/color]
oOutFile[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]WriteLine[/color][COLOR=#804040][b]([/b][/color]out_line[COLOR=#804040][b])[/b][/color]
[COLOR=#0000ff] 'write to screen[/color]
out_line [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]"* "[/color] [COLOR=#804040][b]&[/b][/color] out_line
wscript[COLOR=#804040][b].[/b][/color]echo out_line
[COLOR=#0000ff] 'remove all hash items[/color]
hash[COLOR=#804040][b].[/b][/color][COLOR=#a020f0]removeAll[/color]
[COLOR=#804040][b]end[/b][/color] [COLOR=#804040][b]sub[/b][/color]