6. Pliki tekstowe
Plik tekstowy to plik zawierający wiersze tekstu. Przyjrzyjmy się tworzeniu i wykorzystaniu takich plików na przykładach.
6.1. Tworzenie i wykorzystanie
Program |
![]() |
Wyniki |
Komentarze
- W wierszu 7 tworzony jest obiekt pliku typu „Scripting.FileSystemObject” za pomocą funkcji CreateObject („Scripting.FileSystemObject”). Taki obiekt umożliwia dostęp do dowolnego pliku w systemie, a nie tylko do plików tekstowych.
- W wierszu 9 tworzony jest obiekt „TextStream”. Utworzenie tego obiektu wiąże się z utworzeniem pliku testfile.txt. Plik ten nie jest określony za pomocą nazwy bezwzględnej w postaci c:\dir1\dir2\....\testfile.txt, lecz za pomocą nazwy względnej testfile.txt. Zostanie on zatem utworzony w katalogu, z którego zostanie uruchomione polecenie wykonania tego pliku.
- System plików systemu Windows nie rozróżnia pojęć takich jak plik tekstowy czy plik nietekstowy. Rozpoznaje jedynie pliki. To zatem program, który korzysta z tego pliku, musi zdecydować, czy potraktuje go jako plik tekstowy, czy nie.
- Wiersz 9 tworzy obiekt, z którego pochodzi nazwa set użyta do przypisania. Utworzenie obiektu pliku tekstowego wymaga utworzenia dwóch obiektów:
- utworzenie obiektu Scripting.FileSystemObject (wiersz 7)
- a następnie utworzenie obiektu „TextStream” (plik tekstowy) za pomocą metody OpenTextFile obiektu Scripting.FileSystemObject, która przyjmuje kilka parametrów:
- nazwę pliku, który ma być przetwarzany (obowiązkowe)
- tryb wykorzystania pliku. Jest to liczba całkowita o trzech możliwych wartościach:
- 1: korzystanie z pliku w trybie odczytu
- 2: korzystanie z pliku w trybie zapisu. Jeśli plik jeszcze nie istnieje, a trzeci parametr jest podany i ma wartość true, zostanie utworzony; w przeciwnym razie nie zostanie utworzony. Jeśli plik już istnieje, zostanie nadpisany.
- 8: dodawanie do pliku, c.a.d. zapis na końcu pliku. Jeśli plik jeszcze nie istnieje, a trzeci parametr jest podany i ma wartość „true”, zostanie utworzony; w przeciwnym razie nie zostanie utworzony.
- Wiersz 11 zapisuje wiersz tekstu za pomocą metody WriteLine utworzonego obiektu TextStream.
- Wiersz 13 „zamyka” plik. Nie można już wtedy do niego zapisywać ani z niego odczytywać.
- W wierszu 16 tworzony jest nowy obiekt „TextStream” w celu obsługi tego samego pliku co poprzednio, ale tym razem w trybie „dodawania”. Nowe wiersze będą zapisywane za istniejącymi wierszami.
- Wiersz 18 zapisuje dwa nowe wiersze, przy czym stała vbCRLF oznacza znak końca wiersza w plikach tekstowych.
- Wiersz 20 ponownie zamyka plik
- Wiersz 23 ponownie otwiera plik w trybie „odczytu”: będziemy odczytywać zawartość pliku.
- Wiersz 27 odczytuje wiersz tekstu za pomocą metody ReadLine obiektu TextStream. Gdy plik został właśnie „otwarty”, kursor znajduje się na pierwszym wierszu tekstu tego pliku. Gdy wiersz ten zostanie odczytany za pomocą metody ReadLine, kursor zostanie ustawiony na drugim wierszu. W ten sposób metoda Readline nie tylko odczytuje bieżący wiersz, ale następnie automatycznie „przechodzi” do następnego wiersza.
- Aby przetworzyć wszystkie wiersze tekstu, metodę ReadLine należy stosować wielokrotnie w pętli. Pętla ta (wiersz 26) kończy się, gdy atrybut AtEndOfStream obiektu TextStream przyjmuje wartość true. Oznacza to, że w pliku nie ma już żadnych wierszy do odczytania.
6.2. Przypadki błędów
Występują dwa częste przypadki błędów:
- otwarcie do odczytu pliku, który nie istnieje
- Otwarcie pliku w trybie zapisu lub próba dodania pliku, który nie istnieje, przy wartości „false” jako trzecim parametrze w wywołaniu metody OpenTextFile.
Poniższy program pokazuje, jak wykrywać te błędy:
6.3. Aplikacja IMPOTS z plikiem tekstowym
Wracamy do aplikacji do obliczania podatku, zakładając, że dane niezbędne do obliczenia podatku znajdują się w pliku tekstowym o nazwie data.txt:
12620 13190 15640 24740 31810 39970 48360 55790 92970 127860 151250 172040 195000 0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55 0,6 0,65
0 631 1290,5 2072,5 3309,5 4900 6898,5 9316,5 12106 16754,5 23147,5 30710 39312 49062
Te trzy wiersze zawierają odpowiednio dane z tabel limitów coeffR i coeffN aplikacji. Dzięki modułowej budowie naszej aplikacji zmiany dotyczą głównie procedury getData, odpowiedzialnej za tworzenie tych trzech tabel. Nowy program wygląda następująco:
Program |
|
Uwagi:
- w pliku tekstowym data.txt wartości mogą być oddzielone jedną lub kilkoma spacjami, co uniemożliwia użycie funkcji split do pobrania wartości z wiersza. Konieczne było zastosowanie wyrażenia regularnego
- funkcja getData zwraca, oprócz trzech tablic limitów (coeffR, coeffN), wynik wskazujący, czy wystąpił błąd, czy nie. Wynik ten jest tablicą składającą się z dwóch elementów. Pierwszy element to kod błędu (0, jeśli nie wystąpił błąd), drugi to komunikat o błędzie, jeśli błąd wystąpił.
- Funkcja getData nie sprawdza poprawności wartości znalezionych w pliku data.txt. W rzeczywistej sytuacji powinna to robić.
