Skip to content

Commit 58994bb

Browse files
committed
1 parent 6d8357d commit 58994bb

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

generator/Common/generate.common.pas

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
156158
begin
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

Comments
 (0)