@@ -152,6 +152,8 @@ procedure TGenerator.Generate;
152
152
outputFileStream: TFileStream;
153
153
outputBufWriter: TWriteBufStream;
154
154
line, randomTempFinal: String;
155
+ stationArray, temperatureArray: TStringArray;
156
+ i, stationsCount, temperaturesCount: Integer;
155
157
start: TDateTime;
156
158
begin
157
159
// Randomize sets this variable depending on the current time
@@ -164,30 +166,46 @@ procedure TGenerator.Generate;
164
166
outputFileStream:= TFileStream.Create(FOutPutFile, fmCreate);
165
167
166
168
progressBatch:= floor(FLineCount * (batchPercent / 100 ));
169
+ start:= Now;
170
+
171
+ // based on code @domasz from lazarus forum, github: PascalVault
172
+ stationsCount := FStationNames.Count;
173
+ SetLength(stationArray, stationsCount);
174
+ for i := 0 to stationsCount - 1 do
175
+ stationArray[i] := FStationNames[i];
176
+
177
+ temperaturesCount := 1999 ;
178
+ SetLength(temperatureArray, temperaturesCount);
179
+ temperatureArray[0 ] := ' 0.0' ;
180
+ for i := 1 to 999 do
181
+ begin
182
+ randomTempStr := IntToStr(i);
183
+ case Ord(randomTempStr[0 ]) of
184
+ 1 : randomTempFinal := ' 0.' + randomTempStr;
185
+ 2 : randomTempFinal := randomTempStr[1 ] + ' .' + randomTempStr[2 ];
186
+ 3 : randomTempFinal := randomTempStr[1 ] + randomTempStr[2 ] + ' .' + randomTempStr[3 ];
187
+ 4 : randomTempFinal := randomTempStr[1 ] + randomTempStr[2 ] + randomTempStr[3 ] + ' .' + randomTempStr[4 ];
188
+ end ;
189
+ temperatureArray[i * 2 - 1 ] := randomTempFinal;
190
+ temperatureArray[i * 2 - 1 ] := ' -' + randomTempFinal;
191
+ end ;
192
+ //
193
+
194
+ line := ' ' ;
167
195
168
196
try
169
197
// outputBufWriter:= TWriteBufStream.Create(outputFileStream, 4*1024);
170
198
outputBufWriter:= TWriteBufStream.Create(outputFileStream, 64 *1024 );
171
199
try
172
- start:= Now;
173
200
Write(GenerateProgressBar(1 , FLineCount, 50 , 0 , Now - start), #13 );
174
201
// Generate the file
175
202
for index:= 1 to FLineCount do
176
203
begin
177
- stationId:= Random(FStationNames.Count );
204
+ stationId:= Random(stationsCount );
178
205
// This is all paweld magic:
179
206
// From here
180
- randomTemp:= Random(1000 );
181
- randomTempStr:= IntToStr(randomTemp);
182
- case Ord(randomTempStr[0 ]) of
183
- 1 : randomTempFinal := ' 0.' + randomTempStr;
184
- 2 : randomTempFinal := randomTempStr[1 ] + ' .' + randomTempStr[2 ];
185
- 3 : randomTempFinal := randomTempStr[1 ] + randomTempStr[2 ] + ' .' + randomTempStr[3 ];
186
- 4 : randomTempFinal := randomTempStr[1 ] + randomTempStr[2 ] + randomTempStr[3 ] + ' .' + randomTempStr[4 ];
187
- end ;
188
- if (randomTemp <> 0 ) and (Random(2 ) = 1 ) then
189
- randomTempFinal := ' -' + randomTempFinal;
190
- line := line + FStationNames[stationId] + ' ;' + randomTempFinal + #13 #10 ;
207
+ randomTemp:= Random(temperaturesCount);
208
+ line := line + stationArray[stationId] + ' ;' + temperatureArray[randomTemp] + #13 #10 ;
191
209
// Write(line);
192
210
if index mod 10000 = 0 then
193
211
begin
0 commit comments