1.5.1. fejezet, URL adatok feldolgozása

Feladat

Egy a háttértáron megadott könyvtár szerkezetének, a könyvtárszerkezetben tárolt bookmark fájlok nevének és a bennük tárolt URL címnek szöveges fájlba mentése.
Formátum:
- A listában szerepeljen minden alkönyvtár neve, a szülőkönyvtáránál három szóközzel beljebb. Minden könyvtár tartalmazhat bookmark fájlokat, és újabb alkönyvtárokat.
- A könyvtárnév utáni sorba jelenjen meg az alkönyvtárban szereplő összes bookmark fájl neve a kiterjesztés nélkül, a könyvtár nevéhez képest két szóközzel beljebb, és vele egy sorba kettőspont után a fájl második sorában szereplő URL cím.
Megoldás:
Egy eljárás, ami létrehozza az aktuális könyvtárban található alkönyvtárak és fájlok listáját, kiírja a megadott output fájlba az aktuális könyvtár nevét, a benne található URL fájlok nevét és a belőlük kinyert címet. Ha van alkönyvtár az aktuális könyvtárban, meghívja önmagát a soron következő alkönyvtárra.

Filter4Files(Dir : text, FileList : class text-list) = (class text-list)
 FCount, Index : integer;
 Truth : truth-value;
Begin
  FCount= the number of elements in FileList;
  For Index= (FCount - 1) down to 0 do
       Truth = call g2-Directory-Exists("[Dir]/[FileList[Index]]");
       if Truth is true then
         remove FileList[index] from FileList;
   End;
  Return FileList
End
GetURLAddress(File : text) = (text)
 FileStream : class g2-stream;
 URL, URLNameCut : text;
 URLNameLen: integer;
Begin
    FileStream = call g2-Open-File-For-Read("[File]");
    URL = call g2-Read-Line(FileStream);
    URL = call g2-Read-Line(FileStream);
    URLNameLen = Length-of-Text(URL);
    URLNameCut = Get-From-Text(URL,5,URLNameLen);
    call g2-Close-File(FileStream);
    return URLNameCut;
End
GetURLName(FName : text) = (Text)
 FNameLen: integer;
 FNameCut : text;
Begin
  FNameLen = Length-of-Text(FName);
  FNameCut = Get-From-Text(FName,1, (FNameLen - 4));
  return FNameCut;
End
WWW2TXT(Dir :text, Path :text, Out :text, sp :integer)
 FList, DList                      : class text-list;
 FCount, FIndex,
 DCount, DIndex, s                 : integer;
 OFile                             : class g2-stream;
 URL, FName, spaces                : text;
Begin
  spaces = "";
  DList  = call g2-subdirectories-in-directory (Path);                         
  DCount = the number of elements in DList;
  FList  = call g2-files-in-directory(Path);
  FList  = call Filter4Files(Path, FList);
  FCount = the number of elements in FList;
  OFile  = call g2-Open-File-For-Append(Out, true);
 
  For s=1 to sp do
    spaces="[spaces] ";
  End;
 
  call g2-Write-Line(OFile,"[spaces][Upper-Case-Text(Dir)]");
  For FIndex=0 to (FCount - 1) do
       URL   = call GetURLAddress("[Path]/[FList[FIndex]]");
       FName = call GetURLName("[FList[FIndex]]");
       call g2-Write-Line(OFile,"  [spaces][FName] : [URL]");
  End;
 
  IF DCount > 0 then
     For DIndex = 0 to (DCount - 1) do
       call g2-Write-Line(OFile,"");
       call WWW2TXT
          (DList[DIndex],"[Path]/[DList[DIndex]]",Out,sp + 3)
     End;
  Delete FList;
  Delete DList;
  call g2-Close-File(OFile);
  inform the operator that "Finished.";
End