Centrum skryptów - Systemy operacyjne

W jaki sposób mogę dodać tag HTML na końcu każdego wiersza w pliku?

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.

W jaki sposób mogę dodać tag HTML na końcu każdego wiersza w pliku?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Mam parę dokumentów, które chcę przenieść do MySpace. Aby to zrobić, muszę umieścić tag <br> na końcu każdego wiersza w każdym z nich. Czy można to zrobić przy pomocy programu Microsoft Word, albo nawet Notatnika?

-- MM

Cześć Skrypciarze! Odpowiedź

Cześć, MM. Przypuszczalnie, jak większość ludzi, nie lubisz spamu. Być może jednak nie wiesz, że niektórzy dziwni ludzie, którzy może niekoniecznie lubią spam, mogą uznawać go jednak za interesujący. Właśnie do takich ludzi należę i często czytam wiadomości-śmieci przed ich usunięciem. (Natomiast bez czytania usuwam wszystko, co pochodzi z serwerów Microsoft. Przeczytanie takich wiadomości często wiąże się bowiem z dodatkową pracą.)

Dzisiejsza paczka spamu zawierała jedną szczególnie ciekawą wiadomość. Brzmiała ona: „Czy masz problemy z wydajnością? Jeśli tak, możemy pomóc – wypróbuj nasze naturalne wzmacniacze wydajności średniej jakości”.

Jak widać, jest tu sporo ciekawych rzeczy. „Naturalne wzmacniacze wydajności średniej jakości”? Szczerze mówiąc, nie mam bladego pojęcia, co by to miało znaczyć. Jednak określenie jakości wzmacniaczy mianem „średniej” wydaje się niezwykle nowatorskim rozwiązaniem reklamowym. Nie mówiąc już o zgrabnym podkreśleniu hasłowego charakteru tego zwrotu za pomocą rymu. Wydajności-jakości, łapiecie?

Jeśli więc poniższy skrypt będzie działał za wolno, MM, to wiesz już, czego użyć, by go przyspieszyć!

Const ForReading = 1

Const ForWriting = 2



Set objFSO = CreateObject("Scripting.FileSystemObject")

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



strContents = objFile.ReadAll

objFile.Close

strContents = Replace(strContents, vbCrlf, "<br>" & vbCrLf)



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



objFile.Write strContents

objFile.Close

<p>Przyjrzyjmy się jego działaniu. Jak widać, zaczynamy od zdefiniowania dwu stałych: ForReading i ForWriting. Użyjemy ich później, by poinstruować skrypt, czy chcemy otwierać plik po to, by z niego odczytywać (stała ForReading), czy w celu zapisu (stała ForWriting). Potrzebne nam są obie stałe, ponieważ będziemy otwierać plik dwukrotnie - najpierw w celu odczytania istniejącej zawartości, a następnie w celu zapisania zmian (czyli tej samej zawartości z tagiem &lt;br&gt; dodanym na końcu każdego wiersza).</p>
<p>Po zdefiniowaniu stałych tworzymy wystąpienie obiektu <strong>Scripting.FileSystemObject</strong>, a następnie przy pomocy poniższego wiersza kodu otwieramy plik C:\Scripts\Test.txt do odczytu:</p>

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

Następnie wywołujemy metodę ReadAll w celu odczytania całej zawartości pliku, którą przechowujemy w zmiennej o nazwie strContents. Teraz wywołujemy metodę Close, zamykając plik. Nie martwcie się jednak – otworzymy go ponownie do zapisu, zanim zdążycie się za nim stęsknić.

Dlaczego musieliśmy odczytać zawartość pliku i zachować ją w zmiennej? To proste: FileSystemObject nie pozwala na bezpośrednią modyfikację zawartości pliku. Dlatego musimy umieścić ją w pamięci i tam zmodyfikować, po czym zastąpi nią dotychczasową zawartość. Wykonaliśmy właśnie pierwszy z trzech kroków – umieściliśmy zawartość pliku w pamięci. Czas więc na część 2, czyli zmodyfikowanie wirtualnej wersji pliku:

strContents = Replace(strContents, vbCrlf, "<br>" & vbCrLf)

Nasz plik C:\Scripts\Test.txt jest zwyczajnym plikiem tekstowym – zawiera po prostu parę wierszy tekstu. Jak utworzyć nowy wiersz w pliku tekstowym? To oczywiste – wystarczy pisać, dopóki bieżący wiersz się nie znudzi, a wtedy nacisnąć klawisz Enter. Dodaje to znak powrotu karetki (znaku tego nie widać w Notatniku, ale zapewniamy wszystkich, że jest na miejscu).

Teraz ważna informacja: możemy znaleźć końce poszczególnych wierszy, wyszukując po prostu wystąpienia znaku powrotu karetki (reprezentowane przez stałą vbCrLf języka VBScript). Dzięki temu dodanie tagu <br> na końcu każdego wiersza nie jest wcale trudne. Wystarczy w tym celu zastąpić każdy znak powrotu karetki tagiem <br> oraz znakiem powrotu karetki. Załóżmy, że plik tekstowy wygląda tak (używamy tu gwiazdki na oznaczenie znaku powrotu karetki):

This is line 1.* 

This is line 2.* 

This is line 3.*

Zastąpienie każdego znaku powrotu karetki tagiem <br> oraz znakiem powrotu karetki da nam plik wyglądający tak:

This is line 1.<br>* 

This is line 2.<br>* 

This is line 3.<br>*

I bardzo dobrze. O to nam przecież chodziło.

Żeby nie przedłużać: używamy funkcji Replace do wyszukania wartości strContents dla wszystkich wystąpień vbCrLf i zastępujemy jest tagiem <br> plus vbCrLf. Widać to w tym wierszu kodu:

strContents = Replace(strContents, vbCrlf, "<br>" & vbCrLf)

Nie było to takie trudne, jak się można było spodziewać, nie?

Krok trzeci jest jeszcze łatwiejszy – otwieramy ponownie plik C:\Scripts\Test.txt, tym razem do zapisu, po czym wywołujemy metodę Write, by zapisać w nim zmodyfikowaną wartość strContents:

objFile.Write strContents

Teraz wywołujemy metodę Close, by zamknąć plik, na czym kończymy działanie skryptu. Ostateczny wynik? Na końcu każdego wiersza znajduje się teraz tag <br> (ponownie używamy gwiazdki na oznaczenie niewidocznego znaku powrotu karetki):

This is line 1.<br>*

This is line 2.<br>*

This is line 3.<br>*
 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne