Centrum skryptów - Systemy operacyjne

Jak policzyć liczbę znaków w pliku tekstowym?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak policzyć liczbę znaków w pliku tekstowym?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak policzyć liczbę znaków w pliku tekstowym?

-- LD

Cześć Skrypciarze! Odpowiedź

Cześć LD. Jakże wiele pytań w dzisiejszym świecie pozostaje bez odpowiedzi! Smutne to, nieprawdaż? Ile takich pytań zadajemy sami sobie i nie potrafimy na nie odpowiedzieć. Ale to nie jest jeszcze najgorsze, co nam się może przytrafić. Czasami zwracamy się z prośbą o pomoc do różnych autorytetów, mądrych głów, ekspertów i… nic. Oni też zawodzą. I co? Wtedy dopiero mamy problem.

Pomyślmy przez chwilę, co by się stało, gdyby się okazało, że Skrypciarz piszący te słowa nie ma bladego pojęcia o tym, jak napisać skrypt, który może policzyć liczbę znaków w pliku tekstowym. Katastrofa! A gdyby tak jeszcze żaden z jego kolegów nie umiał mu pomóc…. Źle, bardzo niedobrze.

Jednak nie ma się czym martwić, Skrypciarz piszący te słowa jest jednym z ostatnich żyjących autorytetów i doskonale wie, co robi. Pewne rzeczy są po prostu niemożliwe i tak jak wydaje nam się, że niemożliwe jest, aby słoń wysiedział jajko, podobnie niemożliwe jest, aby jakiś Skrypciarz nie był w stanie odpowiedzieć na zadane mu pytanie.

Powróćmy zatem do naszego pytania. Jak policzyć liczbę znaków w pliku tekstowym. Mamy do dyspozycji plik tekstowy, pochodzący, całkiem przypadkowo zresztą, z bajki: „Słoń, który wysiedział jajko”, o następującej treści:

"It's strange! It's amazing! It's wonderful! New!

Don't shoot him! We'll catch him! That's just what we'll do!

Let's take him alive. Why he's terribly funny!

We'll sell him back home to a circus, for money!"

Jak teraz policzyć znaki w tym pliku tekstowym? W ten oto sposób:

Const ForReading = 1



Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)



strCharacters = objFile.ReadAll



strCharacters = Replace(strCharacters, vbCrLf, "")

Wscript.Echo Len(strCharacters)



objFile.Close

Prawdę mówiąc, nie ma prostej metody pozwalającej bezpośrednio określić liczbę znaków w pliku tekstowym (jak np. otwarcie pliku i sprawdzenie właściwości NumberOfCharacters).

Ale czy to nas może powstrzymać? Oczywiście, że nie. Zamiast tego, po prostu odczytamy cały plik i sami policzymy znaki.

Uwaga. OK, To nie jest do końca prawdą. Być może przesadzamy, ale można otworzyć plik tekstowy za pomoca programu Microsoft Word i uzywając metody ComputeStatistics określić liczbę znaków w pliku. Szczegóły dotyczące tej operacji znajdują się w odpowiednim artykule Office Space (j.ang.).

Jak obliczymy liczbę znaków w pliku? No cóż, na początek określimy stałą o nazwie ForReading i nadamy jej wartość 1; zastosujemy ją podczas otwierania pliku tekstowego do odczytu. Następnie za pomocą poniższych dwóch wierszy kodu utworzymy wystąpienie obiektu Scripting.FileSystemObject i otworzymy plik C:\Scripts\Test.txt do odczytu:

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)

Po otwarciu, odczytujemy cały plik przy użyciu metody ReadAll i zachowujemy jego treść w zmiennej o nazwie strCharacters:

strCharacters = objFile.ReadAll

Praktycznie to już koniec. Dlaczego? Ponieważ mając zawartość pliku ukrytą w zmiennej, możemy zastosować funkcję skryptu VBScript – Len i uzyskać liczbę znaków znajdujących się w tej zmiennej. I dobrze, gdyż liczba ta będzie równa liczbie znaków znajdujących się w pliku tekstowym.

Dlaczego więc stwierdziliśmy, że praktycznie to już koniec? Cóż, gdybyśmy ręcznie policzyli znaki w pliku, prawdopodobnie wyszłoby nam 204. Jednakże, według skryptu, jest ich 210. Dlaczego? Ponieważ skrypt policzy także dwa znaki (znak powrotu karetki i znak przesunięcia wiersza), które pojawiają się w naszym pliku na końcu wierszy 1, 2 oraz 3. Te znaki nie są widoczne i my nie uznajemy ich za znaki, jednak nasz skrypt tak.

Dlatego też, zanim rozpoczniemy obliczanie, zastosujemy poniższy wiersz kodu, aby pozbyć się wszelkich znaków powrotu karetki z pliku:

strCharacters = Replace(strCharacters, vbCrLf, "")

Używamy do tego funkcji Replace w celu przeszukania zmiennej strCharacters i zastąpienia wszystkich znaków powrotu karetki (reprezentowanych przez stałą skryptu VBScript – vbCrLf) niczym: „”. Chyba nie trzeba już dodawać, że w ten sposób możemy pozbyć się z pliku wszystkiego, czego nie chcemy policzyć jako znaku. I tak na przykład, załóżmy, że nie chcemy liczyć spacji jako znaków. Żaden problem, po prostu dodajemy poniższy wiersz kodu, który usuwa wszystkie spacje ze zmiennej strCharacters:

strCharacters = Replace(strCharacters, " ", "")

Nie chcemy kropek, znaków zapytania, czy choćby średników? Już wiemy, co należy z nimi w takim wypadku zrobić.

Kiedy już usuniemy znaki powrotu karetki (lub inne niechciane znaki), stosujemy funkcję len w celu uzyskania liczby znaków w pliku:

Wscript.Echo Len(strCharacters)

Jedyne, co nam teraz pozostaje, to zamknąć plik i wrócić przed telewizor.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne