Centrum Skryptów - Systemy operacyjne

Jak zaznaczyć tekst w aplikacji HTA, a następnie dodać ten tekst do 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.

Jak zaznaczyć tekst w aplikacji HTA, a następnie dodać ten tekst do pliku?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! W tym artykule opisujecie aplikację HTA, która odczytuje i wyświetla wszystkie pliki znajdujące się w folderze. Taka funkcja jest przydatna, ale chcę czegoś więcej. Mianowicie móc kopiować niektóre części tego dziennika i zapisywać je w oddzielnym pliku tekstowym. Czy jest jakiś sposób na wyodrębnienie tekstu w aplikacji HTA i dodanie go do innego pliku?

-- KF

Cześć Skrypciarze! Pytanie

Cześć, KF. Jak wszyscy już zapewne wiedzą, Zimowa Olimpiada Skrypciarska zbliża się wielkimi krokami. Jednakże, tak sobie ostatnio pomyślałem, że może niekoniecznie wszyscy są nią tak zaabsorbowani, jak my tutaj. (Ludzie są w końcu różni). Dlatego też pomyślałem, że może opowiem Wam dla odmiany o czymś innym.

Zobaczmy, o czym mógłbym Wam opowiedzieć. Obecnie dużo się dzieje w polityce, zresztą nie tylko w USA. Ale firma Microsoft nie chce, żebyśmy mieszali się do polityki. (Inna sprawa, że nie chce, żebyśmy się mieszali w cokolwiek). Polityka odpada. O czym jeszcze? Religia? Nie - o religii też nie wolno nam dyskutować.

Sport? Cóż, żadna z moich ulubionych drużyn nie odnosi ostatnio sukcesów, więc o tym osobiście wolałbym nie rozmawiać, żeby się niepotrzebnie nie denerwować. Może o pogodzie? Pogoda zdecydowanie się nie nadaje, wystarczy spojrzeć za okno. Po co sobie dodatkowo psuć humor, opowiadając o tym, co widać.

Najlepszym wyjściem z sytuacji będzie przedstawienie skryptu umożliwiającego aplikacji HTA zaznaczenie tekstu w obszarze tekstu i dodanie tego tekstu do pliku tekstowego:

<SCRIPT Language="VBScript">

    Sub Window_Onload

        strComputer = "."



        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")



        Set colFiles = objWMIService.ExecQuery _

            ("ASSOCIATORS OF {Win32_Directory.Name='C:\Scripts'} Where " _

                & "ResultClass = CIM_DataFile")



        For Each objFile In colFiles

            Set objOption = Document.createElement("OPTION")

            objOption.Text = objFile.FileName

            objOption.Value = objFile.Name

            LogFiles.Add(objOption)

        Next

    End Sub



    Sub ReadFile

        Set objFSO = CreateObject("Scripting.FileSystemObject")

        Set objFile = objFSO.OpenTextFile(LogFiles.Value)



        strContents = objFile.ReadAll



        objFile.Close



        BasicTextArea.Value = strContents

    End Sub

    

    Sub SaveSelection

        Set objSelection = Document.Selection.CreateRange()



        Set objFSO = CreateObject("Scripting.FileSystemObject")

        Set objFile = objFSO.OpenTextFile(FileNameBox.Value, 8)



        objFile.WriteLine

        objFile.WriteLine (LogFiles.Value)

        objFile.WriteLine objSelection.Text

        objFile.Close

    End Sub

</SCRIPT>



<body>

    <table width="100%">

        <tr>

            <td width="25%" valign="top">

               <select size="35" name="LogFiles" onChange="ReadFile" style="width:150px">    

                </select>

            </td>

           <td width="75%" valign="top">

               <textarea name="BasicTextArea" rows="35" cols="100"></textarea>

           </td>

        </tr>

        <tr>

            <td width="25%" valign="top">

               File name: <input type="text" size="25" name="FileNameBox" value="C:\Scripts\Test.txt"> 

            </td>

           <td width="75%" valign="top">

               <br><input type="button" value="Append Data" onClick="SaveSelection">

           </td>

        </tr>

    </table>

</body>

To dopiero jest temat do dyskusji. Spory kod, nawet jak na rubrykę Cześć, Skrypciarze!. Nie martwcie się jednak, nie będę go omawiał w sposób bardzo szczegółowy. Odniosę się natomiast do naszego poprzedniego artykułu, który wyjaśnia, jak aplikacja HTA odczytuje wszystkie pliki znajdujące się w folderze, umieszcza je w polu listy, a następnie wyświetla zawartość dowolnego pliku wybranego z tej listy. Wyjaśnię dzisiaj tylko kod dodany do oryginalnej aplikacji HTA, który umożliwia zaznaczenie tekstu w obszarze testu aplikacji HTA i dodanie go do oddzielnego pliku tekstowego.

Mając to na uwadze, zaczynamy od przyjrzenia się nowemu drugiemu wierszowi w naszej tabeli. (Pierwszy wiersz w tabeli zawiera pole listy i obszar tekstu). Oto znakowanie HTML dla drugiego wiersza w tabeli:

<tr>

    <td width="25%" valign="top">

        File name: <input type="text" size="25" name="FileNameBox" value="C:\Scripts\Test.txt"> 

    </td>

    <td width="75%" valign="top">

        <br><input type="button" value="Append Data" onClick="SaveSelection">

    </td>

</tr>

W pierwszej komórce tabeli dodajemy pole tekstowe o nazwie FileNameBox i ustawiamy domyślną wartość value tego pola tekstowego jako C:\Scripts\Test.txt. Do tego służy nam ten oto kod HTML:

<input type="text" size="25" name="FileNameBox" value="C:\Scripts\Test.txt">

Dlaczego dodaliśmy tutaj pole tekstowe? Dzięki temu mamy miejsce, w którym możemy wpisać ścieżkę pliku, do którego chcemy dodać zaznaczony tekst. Jako domyślną wartość ustawiamy C:\Scripts\Test.txt, ponieważ zakładamy, że to jest plik, do którego zazwyczaj dodajemy informacje. W bardzo prosty sposób można skierować te dane do innego pliku. Wystarczy wpisać w polu tekstowym inną ścieżkę pliku.

W drugiej komórce wiersza używamy następującego znakowania HTML w celu dodania przycisku oznaczonego Append Data:

<input type="button" value="Append Data" onClick="SaveSelection">

Jak widać, po każdym naciśnięciu przycisku skrypt uruchamia podprocedurę o nazwie SaveSelection. Spróbujcie teraz zgadnąć, co się stanie po uruchomieniu podprocedury SaveSelection?

No tak, zgadza się: zapiszemy zaznaczony tekst w pliku tekstowym. Myślałem, że Was tym pytaniem zaskoczę. Jak widać, myliłem się.

Skoro już wiecie, co się dzieje po uruchomieniu podprocedury SaveSelection, zastanówmy się, jak to się dzieje. Wewnątrz podprocedury najpierw tworzymy nowy obiekt TextRange; robimy to za pomocą metody CreateRange(), która jest częścią obiektu Document.Selection:

Set objSelection = Document.Selection.CreateRange()

Po utworzeniu obiektu TextRange (który automatycznie obejmuje cały zaznaczony tekst w aplikacji HTA) stosujemy poniższe dwa wiersze kodu w celu utworzenia wystąpienia obiektu Scripting.FileSystemObject i otwieramy plik tekstowy, aby dodać informacje (do tego służy drugi parametr: 8):

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.OpenTextFile(FileNameBox.Value, 8)

Nie wiecie, który plik otwieramy? Nie wierzę. Otwieramy plik, którego ścieżka znajduje się w polu tekstowym FileNameBox. Jak można się było spodziewać, składnia FileNameBox.Value przekazuje nam tekst znajdujący się w polu tekstowym FileNameBox.

Co robimy po otwarciu pliku? Cóż, na początek używamy poniższego wiersza kodu w celu dodania pustego wiersza na końcu pliku:

objFile.WriteLine

Po wykonaniu tej czynności używamy następującego fragmentu kodu w celu wpisania nazwy pliku z którego pochodzi tekst (pobierając ścieżkę pliku z pola listy), z następującym po niej zaznaczonym tekstem. Możemy to zrobić, odnosząc się do właściwości Text obiektu TextRange:

objFile.WriteLine (LogFiles.Value)

objFile.WriteLine objSelection.Text

Teraz zamykamy plik i czekamy, aż użytkownik zaznaczy inny tekst i kliknie przycisk Append Data. Więcej nic nie musimy robić.

Mam nadzieję, że odpowiedź na Twoje pytanie, KF, jest wyczerpująca.

Wiemy już, że poza Olimpiadą Skrypciarską naprawdę nie ma o czym rozmawiać. Nie chcę nikogo zanudzać, więc przypomnę tylko, że Olimpiada rozpoczyna się 15 lutego i trwa do 3 marca 2008. Mam nadzieję, że zapoznacie się z pełnym harmonogramem olimpiady; możecie także wydrukować sobie specjalny kalendarz.

Pamiętajcie o tym, że jest to niepowtarzalna możliwość wygrania świetnych nagród.

 Do początku strony Do początku strony

Centrum Skryptów - Systemy operacyjne