Centrum Skryptów - Systemy Operacyjne

W jaki sposób mogę policzyć liczbę wierszy w pliku tekstowym? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w nowej rubryce TechNet’u, w której Skrypciarze odpowiadają na najczęściej zadawane pytania dotyczące używania skryptów podczas administrowania systemami. Jeśli masz jakieś pytania dotyczące tego tematu, nie wahaj zwrócić się z nimi do nas. Napisz na adres scripter@microsoft.com (w jęz. angielskim). Nie możemy obiecać, że odpowiemy na wszystkie pytania. Z pewnością jednak zrobimy wszystko, co w naszej mocy, żeby pomóc Ci w rozwiązaniu problemu.

W jaki sposób mogę policzyć liczbę wierszy w pliku tekstowym?

Cześć Skrypciarze! Pytanie

Cześć Skrypciarze! W jaki sposób mogę policzyć liczbę wierszy w pliku tekstowym?

-- MS

Cześć Skrypciarze! Odpowiedź

Cześć MS. Nietrudno zauważyć, że ludzie, którzy stworzyli technologie skryptowania Microsoftu nie pracowali nigdy jako administratorzy systemu. Nasze technologie mają mnóstwo przeróżnych fajerwerków i bajerów, ale często brak im prostych, bardzo potrzebnych funkcji. Liczenie liczby wierszy to dobry przykład. Wydaje się, że administratorzy muszą robić to bardzo często – to już czwarty czy piąty raz w tym miesiącu, gdy nas o to zapytano. A zatem: może istnieje metoda CountLines? Nie. To może właściwość NumberOfLines? Też nie. W ogóle nie ma prostej metody liczenia wierszy. Trzeba kombinować. Na szczęście, chociaż nasze technologie skryptowania nie zawsze są proste, to z reguły są na tyle elastyczne, by obejść różne ograniczenia. Tak jest też w tym wypadku. Sposób liczenia wierszy przy użyciu skryptów nie jest może oczywisty, ale jest to możliwe. I tak na przykład, poniższy skrypt może policzyć liczbę wierszy w pliku C:\Scripts\Test.txt:

Const ForReading = 1



Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objTextFile = objFSO.OpenTextFile _

    ("C:\Scripts\Test.txt", ForReading)



objTextFile.ReadAll

Wscript.Echo "Number of lines: " & objTextFile.Line

Jaką sztuczkę zastosowaliśmy? Na początek otwieramy plik przy użyciu obiektu FileSystemObject. Następnie cały plik jest odczytywany przy użyciu metody ReadAll. Użycie metody ReadAll powoduje odczytanie każdego wiersza tekstu. Obiekt FileSystem może odczytywać jedynie od początku pliku do końca, więc kiedy metoda ReadAll kończy odczytywanie, znajdować się musimy na końcu pliku. Wystarczy wtedy wyświetlić wartość właściwości Line (właściwość ta informuje o numerze bieżącego wersu). Bieżący wers z konieczności jest wersem ostatnim, więc wartość właściwości Line to również liczba wierszy w pliku. Proste.

Oczywiście, otwieranie i odczytywanie całego pliku tylko po to żeby policzyć wiersze może wydać się trochę niemądre. Ileż czasu może to trwać? Okazuje się, że wcale niedużo. Skrypt ten testowaliśmy na pliku mającym ponad 20 tys. wierszy. Na komputerze laptop o prędkości 2.39 GhZ z 512 MB pamięci RAM wykonanie skryptu trwało jedną sekundę. Wyniki na innych komputerach będą się różnić, ale na pewno nieznacznie.

 Do początku strony Do początku strony


Centrum Skryptów - Systemy Operacyjne