Centrum Skrypciarzy - Systemy Operacyjne

Jak odczytać zawartość pliku tekstowego, a następnie oznaczyć jego zawartość jako zmienne?

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 odczytać zawartość pliku tekstowego, a następnie oznaczyć jego zawartość jako zmienne?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak odczytać zawartość pliku tekstowego, a następnie oznaczyć jego zawartość jako zmienne?

-- TC

Cześć Skrypciarze! Odpowiedź

Cześć, TC. Nie wiadomo dlaczego tak się dzieje, ale czasem tak jest, że cos się dzieje, a potem okazuje się, że tak naprawdę nic się nie stało. Albo odwrotnie – zupełnie nic się nie dzieje, chociaż powinno, a potem znowu wszystko wraca do normy. Najczęściej takich sytuacji nie da się przewidzieć, a zdarzają się one w chwilach najmniej stosownych ku temu momentach. Dlatego też warto być zabezpieczonym na wypadek każdej sytuacji i mieć w zanadrzu gotowe rozwiązania. Nie jesteśmy pewni, czy pytanie dotyczyło odczytania zawartości pliku tekstowego, a następnie oznaczenia jego zawartości jako zmiennych, ale gdyby potem okazało się, że jednak tak, na wszelki wypadek przedstawiamy skrypt, który to załatwi:

Const ForReading = 1



Set objFSO = CreateObject("Scripting.FileSystemObject")

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



Do Until objFile.AtEndOfStream

    strLine = objFile.ReadLine

    Execute strLine

Loop



objFile.Close



Wscript.Echo strFirstName

Wscript.Echo strLastName

Jeżeli tylko dobrze zrozumieliśmy zadane nam pytanie, to mamy do czynienia z plikiem tekstowym podobnym do poniższego:

strFirstName = "Ken"

strLastName = "Myer"

Jak widać, każdy wiersz wygląda całkiem jak kod przypisujący wartość do zmiennej; w rzeczywistości, gdybyśmy wpisali te wiersze w takiej postaci do skryptu, otrzymalibyśmy zmienną o nazwie strFirstName (mającą wartość Ken) oraz zmienną o nazwie strLastName (o wartości Myer). Oczywiście nie chcemy wpisywać tego skryptu w tej postaci; chcemy natomiast odczytać wiersze z pliku tekstowego, a następnie zastosować je w taki sposób, jakby zostały one wpisane do skryptu. Innymi słowy, chcemy, aby nasz skrypt funkcjonował tak, jak gdybyśmy wpisali te dwa wiersze kodu, chociaż tak naprawdę wcale ich nie będziemy nigdzie wpisywać.

Zaczyna się robić ciekawie!

Jak zatem mamy zamiar to zrobić? Zaczynamy od określenia stałej o nazwie ForReading i nadajemy jej wartość 1; wykorzystamy ją podczas otwierania pliku tekstowego. Po określeniu stałej, tworzymy wystąpienie obiektu Scripting.FileSystemObject, po czym otwieramy plik C:\Scripts\Test.txt:

Set objFSO = CreateObject("Scripting.FileSystemObject")

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

Teraz się zaczyna. Wczytujemy plik tekstowy, wiersz po wierszu, a następnie używamy każdego z nich w taki sposób, jakby był kodem wpisanym do skryptu. W tym celu najpierw uruchamiamy pętlę Do Until, która będzie działać, dopóki nie dojdziemy do końca pliku tekstowego (tzn. dopóki właściwość pliku AtEndOfStream nie osiągnie wartości True). Wewnątrz tej pętli używamy metody ReadLine do odczytania pierwszego wiersza z pliku tekstowego, po czym zachowujemy jego wartość w zmiennej o nazwie strLine:

strLine = objFile.Readline

Widzimy, o co chodzi? Oznacza to po prostu, że zmienna strLine ma wartość:

strFirstName = "Ken"

Czy to nam pomoże? Oczywiście, że tak. Jeżeli chcemy utworzyć zmienną o nazwie strFirstName, mającą wartość Ken, wystarczy wywołać polecenie Execute oraz następującą po nim zmienną, którą chcemy zastosować:

Execute strLine

Polecenie Execute to mało znana, choć bardzo interesująca funkcja VBScript; między innymi, polecenie to umożliwia zastosowanie wartości ciągu (lub zmiennej) w taki sposób, jak gdyby została ona wpisana do naszego skryptu jako wiersz kodu. Zagmatwane? O tak. Ale spójrzmy na ten przykładowy skrypt:

strMessage = "Hi"

strCode = "Msgbox strMessage"

Execute strCode

Zachowaliśmy teraz wartość tekstu Hi w zmiennej o nazwie strMessage. Następnie przypisaliśmy następującą wartość do zmiennej o nazwie strCode:

Msgbox strMessage

Racja, to naprawdę wygląda jak wiersz kodu służącego do wyświetlania wartości zmiennej strMessage w polu wiadomości. Istnieje ku temu dobry powód: to jest wiersz kodu służący do wyświetlania wartość zmiennej strMessage w polu wiadomości. O to właśnie chodzi. W celu uruchomienia tego wiersza kodu (czyli w celu wyświetlenia pola wiadomości) musimy wywołać polecenie Execute z następującą po nim wartością ciągu (w tym wypadku, zmienna strCode), którą chcemy zastosować.

Warto spróbować, żeby przekonać się o czym mowa.

W każdym razie, kiedy wywołamy polecenie Execute, zastosujemy następującą wartość:

strFirstName = "Ken"

I co? Utworzymy w ten sposób zmienną o nazwie strFirstName i przypiszemy jej wartość Ken. Następnie uruchomimy pętlę i powtórzymy ten proces dla następnego wiersza w pliku tekstowym.

Wprawdzie to wszystko brzmi trochę dziwnie, ale spójrzmy, co otrzymamy, kiedy wywołamy echo wartości zmiennej strFirstName oraz zmiennej strLastName:

Ken

Myer

Oczywiście zmienne strFirstName oraz strLastName są ważnymi zmiennymi. A jak myślicie, skąd mają przypisane odpowiednie wartości? No właśnie: z informacji zawartych w pliku tekstowym. Fajne, prawda?

Nie mamy pojęcia jak często zajdzie potrzeba odczytania wiersza kodu z pliku tekstowego i określenia tych wierszy kodu jako zmiennych. Na pewno sytuacje takie się zdarzają. Kiedy na przykład? No cóż, na przykład na Olimpiadzie Skrypciarskiej.

 Do początku strony Do początku strony

Centrum Skrypciarzy - Systemy Operacyjne