@@ -13,7 +13,6 @@ import (
13
13
"flag"
14
14
"fmt"
15
15
"github.com/mogren/grig/vose"
16
- "io/ioutil"
17
16
"math/rand"
18
17
"os"
19
18
"strconv"
@@ -100,7 +99,7 @@ func main() {
100
99
listLangs ()
101
100
os .Exit (0 )
102
101
}
103
- rand .Seed ( time . Now (). UnixNano ())
102
+ // rand.Seed is deprecated in Go 1.20+, random source is now auto-seeded
104
103
dict := loadData (langFlag )
105
104
if jsonFlag && nrLoopsFlag > 1 {
106
105
fmt .Println ("\" list\" : [" )
@@ -122,7 +121,7 @@ func main() {
122
121
123
122
func listLangs () {
124
123
// for all dirs in data
125
- files , _ := ioutil .ReadDir ("./data/" )
124
+ files , _ := os .ReadDir ("./data/" )
126
125
for _ , f := range files {
127
126
if f .IsDir () && ! strings .HasPrefix (f .Name (), "." ) {
128
127
if validateDir (f .Name ()) {
@@ -136,14 +135,23 @@ func validateDir(iso string) bool {
136
135
// Check for fnames, mnames, lnames, zipcodes and Streets
137
136
srcFileNames := []string {"fnames.grig" , "lnames.grig" , "mnames.grig" , "streets.grig" , "zipcodes.grig" }
138
137
valid := true
139
- filename := ""
138
+
140
139
for _ , srcFile := range srcFileNames {
141
- filename = "./data/" + iso + "/" + srcFile
142
- if _ , err := os .Stat (filename ); os .IsNotExist (err ) {
143
- if verbose {
144
- fmt .Println ("Data file" , srcFile , "missing for" , iso )
140
+ filePath := "./data/" + iso + "/" + srcFile
141
+ _ , err := os .Stat (filePath )
142
+ if err != nil {
143
+ if os .IsNotExist (err ) {
144
+ if verbose {
145
+ fmt .Println ("Data file" , srcFile , "missing for" , iso )
146
+ }
147
+ valid = false
148
+ } else {
149
+ // Handle other errors (permissions, etc.)
150
+ if verbose {
151
+ fmt .Printf ("Error accessing %s: %v\n " , filePath , err )
152
+ }
153
+ valid = false
145
154
}
146
- valid = false
147
155
}
148
156
}
149
157
return valid
@@ -175,6 +183,7 @@ func loadFile(iso string, srcFile string) RigFile {
175
183
defer func (file * os.File ) {
176
184
err := file .Close ()
177
185
if err != nil {
186
+ fmt .Println ("Error closing file:" , err )
178
187
os .Exit (1 )
179
188
}
180
189
}(file )
@@ -189,22 +198,30 @@ func loadFile(iso string, srcFile string) RigFile {
189
198
if strings .HasPrefix (scanText , "#" ) {
190
199
continue
191
200
}
192
- dataStr = strings .Split (scanner . Text () , "\t " )
201
+ dataStr = strings .Split (scanText , "\t " )
193
202
// string to float
194
203
f , err := strconv .ParseFloat (dataStr [0 ], 64 )
195
204
if err != nil {
196
- // Ignore error
197
- fmt . Println ( err )
205
+ fmt . Printf ( "Error parsing float in %s: %v \n " , srcFile , err )
206
+ continue
198
207
}
199
208
sum += f
200
209
str = dataStr [1 :]
201
210
weights = append (weights , f )
202
211
rigFile .texts = append (rigFile .texts , str )
203
212
}
213
+
214
+ if err := scanner .Err (); err != nil {
215
+ fmt .Printf ("Error reading file %s: %v\n " , srcFile , err )
216
+ }
217
+
204
218
rigFile .total = sum
205
- rigFile .vose , err = vose .NewVose (weights , rand .New (rand .NewSource (time .Now ().UnixNano ())))
219
+
220
+ // Create a new random source for each file to avoid correlations
221
+ rng := rand .New (rand .NewSource (time .Now ().UnixNano ()))
222
+ rigFile .vose , err = vose .NewVose (weights , rng )
206
223
if err != nil {
207
- fmt .Println ("Vose error:" , err )
224
+ fmt .Printf ("Vose error with %s: %v \n " , srcFile , err )
208
225
panic (1 )
209
226
}
210
227
return rigFile
@@ -222,6 +239,11 @@ func getNext(dict RigDict) Rig {
222
239
rig .StreetNumber = rand .Intn (150 ) + 1
223
240
zip := dict .zipcodes .texts [dict .zipcodes .vose .Next ()]
224
241
rig .City = zip [1 ]
225
- rig .Zipcode , _ = strconv .Atoi (zip [0 ])
242
+ zipcode , err := strconv .Atoi (zip [0 ])
243
+ if err != nil {
244
+ // Fallback to default value if conversion fails
245
+ zipcode = 10000
246
+ }
247
+ rig .Zipcode = zipcode
226
248
return rig
227
249
}
0 commit comments