BSOne.SFC/Tocsg.Module/UrlMon/ManagerUrlData.pas

133 lines
2.9 KiB
Plaintext

{*******************************************************}
{ }
{ 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.