Centrum skryptów - Systemy operacyjne

Jak wstawić tekst do odsyłacza 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 wstawić tekst do odsyłacza w pliku tekstowym?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak wstawić tekst do odsyłacza w pliku tekstowym?

-- LR

Cześć Skrypciarze! Odpowiedź

Cześć, LR. Musisz wybaczyć Skrypciarzowi piszącemu te słowa dzisiejszy brak entuzjazmu. Okazało się bowiem, że nie zawsze może robić to, na co ma ochotę (nawet, jeśli dysponuje odpowiednimi do tego środkami) oraz że niemożność wykonania pewnych czynności niekiedy spowodowana jest ograniczeniami, na które on sam nic nie może poradzić. Tak jak w tej reklamie, w której najpierw rozbijają samochód, a potem mówią: Nie próbujcie tego w domu. Każdy by się zdołował.

Tymczasem, nie ma absolutnie żadnych przeciwwskazań ani ograniczeń związanych za wstawianiem tekstu do odsyłacza (bookmark) pliku tekstowego w domu, ani w jakimkolwiek innym miejscu:

Const ForReading = 1

Const ForWriting = 2



Set objNetwork = CreateObject("Wscript.Network")

strUser = objNetwork.UserName



Set objFSO = CreateObject("Scripting.FileSystemObject")

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



strText = objFile.ReadAll

objFile.Close



strText = Replace(strText, "[BOOKMARK #1]", Date)

strText = Replace(strText, "[BOOKMARK #2]", strUser)



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

objFile.WriteLine strText

objFile.Close

Zanim omówimy sposób działania tego skryptu, zauważmy, iż on wcale nie zadziała, jeżeli nie mamy pliku tekstowego zawierającego określone odsyłacze (które, w tym wypadku, odnoszą się po prostu do łatwo identyfikowalnych fragmentów tekstu). I tak na przykład, użyjmy prostego pliku tekstowego (C:\Scripts\Test.txt), który wygląda tak:

This text file was updated on [BOOKMARK #1] by [BOOKMARK #2].

Nasz skrypt zastąpi tekst [BOOKMARK #1] obecną datą, a następnie zastąpi tekst [BOOKMARK #2] nazwiskiem zalogowanego użytkownika. Zauważmy przy tym, że tekst, którego użyliśmy w odsyłaczach może być dowolny, jedynym zastrzeżeniem jest tutaj to, że nie może się on pojawiać w żadnym miejscu w pliku tekstowym. Na przykład, jeżeli słowo komputer pojawia się wielokrotnie w pliku, to używanie słowa komputer jako odsyłacza nie będzie dobrym pomysłem. Dlaczego? Ponieważ skrypt zastąpi każde słowo komputer pojawiające się w pliku tekstowym – nie tylko tekst odsyłacza – nowym tekstem. Z tego powodu lepsze będzie użycie zwrotu unikalnego, np. [NAZWA KOMPUTERA].

Jeżeli chodzi o sam skrypt, zaczynamy od określenia dwóch par stałych – ForReading oraz ForWriting – które będą nam potrzebne w późniejszej pracy. Następnie używamy dwóch poniższych wierszy kodu w celu utworzenia wystąpienia obiektu Wscript.Network, uzyskujemy nazwę zalogowanego użytkownika i zapisujemy tę wartość w zmiennej o nazwie strUser:

Set objNetwork = CreateObject("Wscript.Network")

strUser = objNetwork.UserName

Gdy to już zrobimy, tworzymy wystąpienie obiektu Scripting.FileSystemObject, a następnie stosując metodę OpenTextFile otwieramy plik C:\Scripts\Test.txt do odczytu (zauważmy stałą przekazaną jako parametr metody):

Set objFSO = CreateObject("Scripting.FileSystemObject")

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

Mając otwarty plik tekstowy używamy metody ReadAll do wczytania całej zawartości pliku do zmiennej o nazwie strText, a następnie natychmiast zamykamy plik:

strText = objFile.ReadAll

objFile.Close

Dlaczego jednak zamykamy plik, jeżeli chcemy zastąpić odsyłacze, które się w nim znajdują? No cóż, wynika to ze specyfiki obiektu FileSystemObject: zezwala on na odczyt zawartości pliku lub zapisywanie w nim nowego tekstu, ale nie pozwala na wykonanie obu tych czynności w tym samym czasie. Po odczytaniu z pliku, należy go zamknąć i otworzyć ponownie, zanim dokonamy zapisu w pliku.

Jednakże zanim tego dokonamy, musimy zmodyfikować wartość zmiennej strText: Do tego celu posłużą nam następujące wiersze kodu:

strText = Replace(strText, "[BOOKMARK #1]", Date)

strText = Replace(strText, "[BOOKMARK #2]", strUser)

Dobre pytanie: Co zdziałamy tymi dwoma wierszami? No cóż, w wypadku pierwszego wiersza używamy funkcji Replace, aby wyszukać w zmiennej strText tekst [BOOKMARK #1]. Jeżeli znajdziemy tę wartość, zastąpimy [BOOKMARK #1] aktualną datą (stąd funkcja Date skryptu VB przekazana jako parametr 3). Za pomocą drugiego wiersza wyszukujemy tekst [BOOKMARK #2] i jeżeli go znajdziemy, zastąpimy nazwą zalogowanego użytkownika. W obu wypadkach otrzymana wartość zostanie zachowana w zmiennej strText.

Oznacza to oczywiście, że zmienna strText zawierać będzie „wirtualny plik tekstowy”, w którym desygnatory odsyłaczy zostały zastąpione określonymi wartościami. Z tego powodu jesteśmy w stanie zastąpić właściwy plik tekstowy (C:\Scripts\Test.txt) jego zmodyfikowaną wersją. Do tego służy poniższy kod:

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

objFile.WriteLine strText

objFile.Close

Kiedy go zastosujemy, zaktualizowany tekst będzie wyglądał następująco:

This text file was updated on 2/15/2007 by kenmyer.

I to by było tyle na ten temat.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne