@@ -26,67 +26,33 @@ implementation
2626
2727procedure ChallengeWithStringList ;
2828var
29- WeatherStream: TStream;
30- WeatherLines: TStringList;
3129 SortedList: TStringList;
32- WeatherCity: string;
33- CityTemp: Integer;
3430 ListCity: Integer;
35- CurrLine: Int64;
3631begin
37- WeatherLines := TStringList.Create;
32+ SortedList := TStringList.Create(TDuplicates.dupAccept, False, True) ;
3833 try
39- WeatherLines.Delimiter := ' ;' ;
34+ ChallengeCommon.ReadAndParseAllData(procedure (const CityName: string; const CityTemp: Integer)
35+ begin
36+ ListCity := SortedList.IndexOf(CityName);
37+ if ListCity = -1 then
38+ SortedList.AddObject(CityName, TWeatherCity.Create(CityName, CityTemp))
39+ else
40+ TWeatherCity(SortedList.Objects[ListCity]).AddNewTemp(CityTemp);
41+ end );
42+
43+ SortedList.UseLocale := False;
44+ SortedList.Sort;
45+
46+ Write(' {' );
47+ Write(Trim(TWeatherCity(SortedList.Objects[0 ]).OutputSumLine(True)));
48+ for var i := 1 to SortedList.Count - 1 do
49+ Write(TWeatherCity(SortedList.Objects[i]).OutputSumLine(False));
50+ Writeln(' }' );
4051 { $IFDEF DEBUG}
41- Writeln(' Reading from ' + ChallengeCommon.InputFilename);
42-
43- var StopWatch := TStopwatch.StartNew;
44- { $ENDIF}
45-
46- // WeatherLines.LoadFromFile(ChallengeCommon.InputFilename, TEncoding.UTF8);
47-
48- WeatherStream := TFileStream.Create(ChallengeCommon.InputFilename, fmOpenRead);
49- try
50- WeatherLines.LoadFromStream(WeatherStream, TEncoding.UTF8);
51- finally
52- WeatherStream.Free;
53- end ;
54-
55- { $IFDEF DEBUG}
56- StopWatch.Stop;
57- Writeln(Format(' Loaded %d lines from %s in %d milliseconds' , [WeatherLines.Count, ChallengeCommon.InputFilename,
58- StopWatch.ElapsedMilliseconds]));
52+ Writeln(' Unique Stations: ' , SortedList.Count);
5953 { $ENDIF}
60-
61- SortedList := TStringList.Create(TDuplicates.dupIgnore, False, True);
62- try
63- // process all rows
64- for CurrLine := 0 to WeatherLines.Count - 1 do begin
65- // parse the data and add to our list
66- if ChallengeCommon.SplitCityTemp(WeatherLines[CurrLine], WeatherCity, CityTemp) then begin
67- ListCity := SortedList.IndexOf(WeatherCity);
68- if ListCity = -1 then
69- SortedList.AddObject(WeatherCity, TWeatherCity.Create(WeatherCity, CityTemp))
70- else
71- TWeatherCity(SortedList.Objects[ListCity]).AddNewTemp(CityTemp);
72- end ;
73- end ;
74- SortedList.UseLocale := False;
75- SortedList.Sort;
76-
77- Write(' {' );
78- Write(Trim(TWeatherCity(SortedList.Objects[0 ]).OutputSumLine(True)));
79- for var i := 1 to SortedList.Count - 1 do
80- Write(TWeatherCity(SortedList.Objects[i]).OutputSumLine(False));
81- Writeln(' }' );
82- { $IFDEF DEBUG}
83- Writeln(' Unique Stations: ' , SortedList.Count);
84- { $ENDIF}
85- finally
86- SortedList.Free;
87- end ;
8854 finally
89- WeatherLines .Free;
55+ SortedList .Free;
9056 end ;
9157end ;
9258
0 commit comments