wtorek, 6 marca 2012

Od chaosu do uporządkowania



Pewnego dnia (tj. kilka tygodni temu), poszukiwałem wśród tysięcy stron www jakiegoś wzornika kolorów RAL. Wreszcie trafiłem! Nawet tabela na stronie była tak zbudowana, że wydawało mi się proste skopiowanie jej i wczytanie do Excel-a.

Po zapisaniu zawartości tabeli do pliku TXT, rozpocząłem importowanie go do Excel-a. Okazało się to trudne (czytaj: nie możliwe), z powodu nie właściwej budowy pliku tekstowego. Skopiowane dane z Clipboard-u do Notepad-a zupełnie pomieszały się, dane z fragmentami tabeli z kodem website. Pomyślałem że trochę po klikam (delete, arrow, enter, itd.) w Notepad-dzie, żeby poukładać pola w rekordy, szybko poprawię plik i po sprawie. Jednak po kilkudziesięciu razach odechciało mi się tego bez sensownego klikania. Plik składa się z 1720 wierszy. Zostawiłem tę sprawę na lepsze czasy.

Jako że to jest zadanie jednorazowe, zastosowałem PowerShell. Dla nie zorientowanych: PowerShell jest to narzędzie do tworzenia skryptów, działa na platformie .Net. Dzięki temu można wykorzystać praktycznie wszystkie zasoby komputera, nawet można stworzyć GUI dla skryptu. Jest już dołączone do Windows 7 (do innych Windows być może trzeba je sobie zainstalować). Z PowerShell jest dodane proste środowisko PowerShell ISE, które bardzo ułatwia pisanie skryptu.

Zadanie podzieliłem na cztery skrypty (4 zadania) które kolejno generują odpowiednie pliki tekstowe, żeby nie komplikować problemu w jednym skrypcie (ponieważ to mój pierwszy kontakt z PowerShell). Ostatni plik wynikowy jest plikiem CSV który zawiera interesujące mnie informacje. Skrypty są jednorazowego zastosowania, więc nie mają żadnego interfejsu. 


Praca polegała na wielokrotnym uruchamianiu (testowaniu) skryptu na małym fragmencie orginalnego pliku, aż efekt był zadowalający, wtedy wykonywałem go na orginalnym pliku. Następnie przechodziłem do pisania następnego skryptu, aż do całkowitego rozwiązania problemu.


Fragment pliku przed edycją (stan początkowy).
Skrypt „Kolory3.ps1” dzieli wiersze w miejscu wystąpienia znaku „#” na dwa wiersze, tylko w przypadku gdy ten znak nie jest znakiem pierwszym w wierszu (gdy tylko znak „#” występuje w środku wiersza). Plik wynikowy zawiera istotne informacje w każdym osobnym wierszu.


Plik po dzieleniu wierszy.
Skrypt „UsuwaniePustychWierszy1.ps1” usuwa wszystkie znaki niepożądane, czyli wszystkie znaki o kodach mniejszych od ascii 32.


Plik po usunięciu znaków nie pożądanych.
Skrypt „UsuwanieTabulatora.ps1” usuwa wszystkie tabulacje z pliku.


Plik bez tabulacji.
Skrypt „UtworzeniePlikuCSV.ps1” tworzy właściwy, formatuje ostateczny plik wynikowy CSV, zawierający tylko potrzebne mi informacje, w postaci którą łatwo wczytam do Excel-a. Plik teraz zawiera 214 wierszy.


Plik CSV przygotowany dla Excel-a.
Pliki skryptów są dostępne tutaj: Kolory skrypty.