Ćwiczenia 5-6
Napisać aplikację, która tworzy (zapisuje)
plik HTML, zawierający tytuły innych plików HTML (z podanego katalogu
i jego podkatalogów; w szczególności z całego dysku)..
Tytuły (jeśli są) znajdują się w plikach HTML pomiędzy znacznikami <title> ... </title>.
Tytuły innych plików zapisane do wyjściowego pliku HTML powinny zarazem
być linkami, pozwalającymi otwierać dane pliki. Tekst odnośnika zawiera tytuł
oraz - w nawiasach okrągłych nazwę pliku - bez ścieżki.
Przy generacji pliku z tytulami powinny ze sobą współpracować dwa wątki.
Wątek 1 przegląda system plikowy rekursywnie wchodząc we wszystkie
podkatalogi (poczynając od katalogu podanego na starcie aplikacji) i
odnajduje pliki html. Nazwy plików przekazuje równolegle działającemu
wątkowi 2.
Wątek 2 w każdym otrzymanym pliku wyszukuje tytuł i zapisuje go jako odnośnik w wyjściowym pliku HTML.
Postępy przekształcenia powinny być uwidaczaniane na konsoli (lub graficznie).
Oprócz tego aplikacja powinna udostępniać dialog, z którego można będzie zakończyć działanie obu wątków.
Na co trzeba zwrócić uwagę:
- znaczniki <title> mogą być pisane małymi lub wielkimi literami,
-
tytuł może być zapisany w kilku wierszach tzn. otwierający znacznik
<title> i zamykający znacznik </title> mogą być w różnych
wierszach,
- wyjściowy plik HTML winien być kodowany w ISO-8859-2.
- wątki winny działać wizualnie równolegle, naprzemiennie; niedopuszczalna
jest sytuacja, aby jeden z nich wykonał całe zadanie (wyszukanie plików),
a drugi zadziałał po nim; również nie należy dopuścić do tego by każdy
z wątków na długi czas zawłaszczał procesor (oczywiście widoczna rownobieżność wątków jest do
osiągnięcia, gdy przeglądamy dużą liczbe katalogów).
Ilustracja - pomoc:
Na dysku G, w kalogu TEMP są następujące katalogi i pliki:
test - katalog
W23 - katalog
dodatki - katalog
W2EfUb.htm
W2RexxTyp.htm
W2A.htm - plik
W3A.htm - plik
W12.htm - plik
test.html - plik
Ten ostatni ma taką postać:
<html>
<head>
<title>Po co wróbel ćwierka
nocą
w niegdysiejszych kęskach świnki
</title>
</head>
<body></body>
</html>
Uwaga: domyślna systemowa strona kodowa Windows-1250 i w takim kodzie jest również zapisany powyższy plik.
Przykładowy wygenerowany przez program plik HTML z tytulami wygląda tak (to są linki, które
prowadzą do plików w omówionym katalogu na dusku G):
Wykład 2 (W2A.HTM)
Efekty uboczne (W2EfUb.htm)
Języki z typami i jęzki beztypowe (W2RexxTyp.htm)
Wykład 3 (W3A.HTM)
Wykład 12 - Architektura MVC (W12.htm)
Po co wróbel ćwierka nocą w niegdysiejszych kęskach świnki (test.html)
a jego kod HTML - tak:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<br><a href="file:///G:\TEMP\Test\W23\W2A.HTM"> Wykład 2 (W2A.HTM)</a>
<br><a href="file:///G:\TEMP\Test\W23\dodatki\W2EfUb.htm"> Efekty uboczne (W2EfUb.htm)</a>
<br><a href="file:///G:\TEMP\Test\W23\dodatki\W2RexxTyp.htm"> Języki z typami i jęzki beztypowe (W2RexxTyp.htm)</a>
<br><a href="file:///G:\TEMP\Test\W23\W3A.HTM"> Wykład 3 (W3A.HTM)</a>
<br><a href="file:///G:\TEMP\Test\W12.htm"> Wykład 12 - Architektura MVC (W12.htm)</a>
<br><a href="file:///G:\TEMP\Test\test.html"> Po co wróbel ćwierka noc+ w niegdysiejszych kęskach ¶winki </title> </head> <body></body> (test.html)</a>
</body>
</html>
Proszę sięgnąć do dokumentacji HTML dla zapoznania się ze znaczeniem pokazanych tu metaznaczników i znaczników.
Punktacja:
- za poprawnie (być może nie spełniający wszystkich wymagań) działający program - max 5 punktów
- za wszystkie wymagania + za jakość (dobre pomysły, styl programowania,
dobrą strukturę programu itp.) - dodatkowe max 5 punktów.
-
za rozwiązanie problemów "nadobowiązkowych" (np. właściwego dekodowania
plików wejściowych, zgodnie z ich stroinami kodowymi, a nie według
strony systemowej) - dodatkowo max 5 punktów.
Problemy do przemyślenia:
- co to są pliki html i jak je odszukiwać ?
- jak postępować z plikami wejściowymi, które są kodowane w różnych
stronach kodowych - co się stanie z tytułem napisanym po polsku w stronie
kodowej innej od domyślnej strony systemowej (np. plik jest w ISO8859-2,
a domyślna strona systemowa - Windows-1250)?
- jak zapewnić komunikację między wątkami tak, by program działal możliwie efektywnie?