{*******************************************************} { } { ManagerUrlData } { } { Copyright (C) 2022 kku } { } {*******************************************************} unit ManagerUrlData; interface uses Tocsg.Obj, System.SysUtils, System.Classes; type TManagerUrlData = class(TTgObject) private UrlList_, CateList_: TStringList; public Constructor Create; Destructor Destroy; override; procedure LoadFromFile(sPath: String); function GetUrlCate(sUrl: String): String; function GetUrlCount: Integer; end; implementation uses Tocsg.Safe, Tocsg.Exception; Constructor TManagerUrlData.Create; begin Inherited Create; UrlList_ := TStringList.Create; CateList_ := TStringList.Create; end; Destructor TManagerUrlData.Destroy; begin FreeAndNil(CateList_); FreeAndNil(UrlList_); Inherited; end; procedure TManagerUrlData.LoadFromFile(sPath: String); var DataList: TStringList; i, nPos, nIdx: Integer; sData, sUrl, sCate: String; begin UrlList_.Clear; CateList_.Clear; try if not FileExists(sPath) then exit; Guard(DataList, TStringList.Create); DataList.LoadFromFile(sPath); for i := 0 to DataList.Count - 1 do begin sUrl := ''; sCate := ''; sData := Trim(DataList[i]); if sData = '' then continue; nPos := Pos(' ', sData); if nPos <> 0 then begin sUrl := Copy(sData, 1, nPos - 1); Delete(sData, 1, nPos); nPos := Pos(' ', sData); if nPos <> 0 then Delete(sData, 1, nPos); sCate := sData; nIdx := CateList_.IndexOf(sCate); if nIdx = -1 then nIdx := CateList_.Add(sCate); UrlList_.AddObject(sUrl.ToLower, TObject(nIdx)); end; end; // UrlList_.Sort; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. LoadFromFile()'); end; end; function TManagerUrlData.GetUrlCate(sUrl: String): String; var i, nPos: Integer; begin Result := 'Unknown'; try if sUrl = '' then exit; sUrl := StringReplace(sUrl, 'http://', '', [rfReplaceAll]).ToLower; sUrl := StringReplace(sUrl, 'https://', '', [rfReplaceAll]); nPos := Pos('/', sUrl); if nPos <> 0 then Delete(sUrl, nPos, Length(sUrl) - nPos + 1); for i := 0 to UrlList_.Count - 1 do if Pos(UrlList_[i], sUrl) <> 0 then begin Result := CateList_[Integer(UrlList_.Objects[i])]; exit; end; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. GetUrlCate()'); end; end; function TManagerUrlData.GetUrlCount: Integer; begin Result := UrlList_.Count; end; end.