5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/fbtok/fbtok.rb', line 5
def self.main( args=ARGV )
opts = {
debug: true,
warn: false,
file: nil,
}
parser = OptionParser.new do |parser|
parser.banner = "Usage: #{$PROGRAM_NAME} [options] DATAFILE or DIR"
parser.on( "-q", "--quiet",
"less debug output/messages (default: #{!opts[:debug]})" ) do |debug|
opts[:debug] = false
end
parser.on( "--verbose", "--debug",
"turn on verbose / debug output (default: #{opts[:debug]})" ) do |debug|
opts[:debug] = true
end
parser.on( "-w", "--warn",
"turn warnings into errors (default: #{opts[:warn]})" ) do |warn|
opts[:warn] = true
end
parser.on( "-f FILE", "--file FILE",
"read datafiles (pathspecs) via .csv file") do |file|
opts[:file] = file
opts[:debug] = false
end
end
parser.parse!( args )
if opts[:debug]
puts "OPTS:"
p opts
puts "ARGV:"
p args
end
specs = if opts[:file]
read_pathspecs( opts[:file] )
else
args = ['/sports/openfootball/euro/2021--europe/euro.txt',
'/sports/openfootball/euro/2024--germany/euro.txt'] if args.empty?
build_pathspecs( args )
end
pp specs
specs.each_with_index do |rec,i|
datafiles = rec['datafiles']
errors = []
datafiles.each_with_index do |path,j|
puts "==> [#{i+1}/#{specs.size}, #{j+1}/#{datafiles.size}] reading >#{path}<..."
txt = read_text( path )
lexer = SportDb::Lexer.new( txt, debug: opts[:debug] )
tokens, more_errors = lexer.tokenize_with_errors
puts " #{tokens.size} token(s)"
errors += more_errors if more_errors.size > 0
end
if errors.size > 0
puts
pp errors
puts
puts "!! #{errors.size} tokenize error(s) in #{datafiles.size} datafiles(s)"
else
puts
puts "OK no tokenize errors found in #{datafiles.size} datafile(s)"
end
rec['errors'] = errors
end
if opts[:file]
buf = SportDb::PathspecReport.new(
specs,
title: 'fbtok summary report' ).build
puts
puts "SUMMARY:"
puts buf
end
puts "bye"
end
|