@@ -152,6 +152,8 @@ procedure TGenerator.Generate;
152152 outputFileStream: TFileStream;
153153 outputBufWriter: TWriteBufStream;
154154 line, randomTempFinal: String;
155+ stationArray, temperatureArray: TStringArray;
156+ i, stationsCount, temperaturesCount: Integer;
155157 start: TDateTime;
156158begin
157159 // Randomize sets this variable depending on the current time
@@ -164,30 +166,46 @@ procedure TGenerator.Generate;
164166 outputFileStream:= TFileStream.Create(FOutPutFile, fmCreate);
165167
166168 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 := ' ' ;
167195
168196 try
169197 // outputBufWriter:= TWriteBufStream.Create(outputFileStream, 4*1024);
170198 outputBufWriter:= TWriteBufStream.Create(outputFileStream, 64 *1024 );
171199 try
172- start:= Now;
173200 Write(GenerateProgressBar(1 , FLineCount, 50 , 0 , Now - start), #13 );
174201 // Generate the file
175202 for index:= 1 to FLineCount do
176203 begin
177- stationId:= Random(FStationNames.Count );
204+ stationId:= Random(stationsCount );
178205 // This is all paweld magic:
179206 // 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 ;
191209 // Write(line);
192210 if index mod 10000 = 0 then
193211 begin
0 commit comments