Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript

Модерирует : ShIvADeSt

ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

   

Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mityamitya
Вот такой скрипт выберет такие строки целиком. Причём это вариант дополнит уже существующий файл.  
Если надо выбирать из середины строки, дополните обработку функцией Mid(), место этих слов уже найдено InStr() - мне лениво символы считать, тем более, что это вряд ли нужно...

Код:
    ' FSO Constants
    t = timer
    Const ForReading   = 1
    Const ForAppending    = 8
    Const TristateUseDefault= -2
    
    ' Variables
    Dim objFSO, objTS, objOTS, objfile, templine
 
    ' Instantiate the object
    Set objFSO = CreateObject("Scripting.FileSystemObject")
 
    ' open the text file read only
    Set objTS = objFSO.OpenTextFile("C:\Temp\in.txt", ForReading, False, TristateUseDefault)
    ' We now open the file to write it out
    If objFSO.FileExists("c:\Temp\out@.txt") Then
        Set objOTS = objFSO.OpenTextFile("C:\Temp\out@.txt", ForAppending) 'открываем итоговый файл для добавления записей
    Else
        Set objfile = objFSO.CreateTextFile("C:\Temp\out@.txt")
        Set objfile = Nothing
        Set objOTS = objFSO.OpenTextFile("C:\Temp\out@.txt", ForAppending)
    End if
 
    Do While objTS.AtEndOfStream <> True
    templine = objTS.ReadLine()
    if InStr(templine,"<form action=") > 0 and InStr(templine,"</form>") > 0 then
        objOTS.Writeline templine
    end if
    
    Loop
    
    ' Close all files after we read it in.
    objTS.Close
    Set objTS = Nothing
    objOTS.Close
    Set objOTS = Nothing
    Set objFSO = Nothing
t=timer-t
msgbox "OK! Run in " & t

 
Посчитал, самому интересно стало
Если надо выбрать то, что между этими стрингами:

Код:
    if instr(templine,"<form action=") > 0 and instr(templine,"</form>") > 0 then
        objOTS.Writeline mid(templine, instr(templine,"<form action=")+14, instr(templine,"</form>")-instr(templine,"<form action=")-14)
'        objOTS.Writeline templine 'вот вместо этой строки строку выше надо использовать
    end if
 

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 12:02 18-04-2010 | Исправлено: Hugo121, 12:09 18-04-2010
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mityamitya

Код:
option explicit
 
dim logfile, outfile, fso, txtfile, txt
 
logfile = "c:\mylog.log"
outfile = "c:\mylog_out.log"
 
set fso = createobject("scripting.filesystemobject")
 
set txtfile = fso.opentextfile(logfile)
   txt = txtfile.readall
txtfile.close
 
set txtfile = fso.opentextfile(outfile, 2, true)
   txtfile.write formextract(txt)
txtfile.close
 
function formextract(text)
   dim txtext, pos, pos2
      do while instr(text, "<form action=") > 0
         pos = instr(text, "<form action=")
         pos2 = instr(text, "</form>")
         txtext = txtext & mid(text, pos, pos2 - pos + 7) & vbcrlf
         text = mid(text, pos2 + 7)
      loop
      formextract = left(txtext, len(txtext) - 2)
end function
 
 
 
Добавлено:
Если не нужны сами тэги, а только их содержимое, то переделываются выделенные строки:

Код:
option explicit
 
dim logfile, outfile, fso, txtfile, txt
 
logfile = "c:\mylog.log"
outfile = "c:\mylog_out.log"
 
set fso = createobject("scripting.filesystemobject")
 
set txtfile = fso.opentextfile(logfile)
   txt = txtfile.readall
txtfile.close
 
set txtfile = fso.opentextfile(outfile, 2, true)
   txtfile.write formextract(txt)
txtfile.close
 
function formextract(text)
   dim txtext, pos, pos2, pos1
      do while instr(text, "<form action=") > 0
         pos = instr(instr(text, "<form action="), text, ">") + 1
         pos2 = instr(pos, text, "</form>")
         txtext = txtext & mid(text, pos, pos2 - pos) & vbcrlf
         text = mid(text, pos2)

      loop
      formextract = left(txtext, len(txtext) - 2)
end function

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 12:10 18-04-2010 | Исправлено: Rush, 12:47 18-04-2010
mityamitya

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скрипт от Hugo121 не работает. Он ошыбок не выдал, но и ничего не нашел, хотя искомое там было.
       
     Спасибо большое за ответ Rush !!!!!!
Мне удалось запустить оба ваших скрипта. Странно, но рузультат от использования обеих скриптов был одинаковый. Тоесть они скопировали текст между ключевыми словами. А сами ключевые слова не скопировал ни первый, ни второй скрипт. А мне необходимо получить не только содержимое между ними, но и скопировать сами ключевые слова, с которых начинается поиск.  
      В полученом результате было много мусора  
 
Наверное я уточню запрос. Как и раньше нужные участки текста начинаются с <form action= и заканчиваются на </form>. Но в этих участках должно встречатся словосочетание name="beon[question]" . Если его нет в этом отрезке текста, то и копировать его не надо.

Всего записей: 34 | Зарегистр. 18-06-2007 | Отправлено: 16:01 18-04-2010 | Исправлено: mityamitya, 17:57 18-04-2010
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mityamitya

Цитата:
Тоесть они скопировали текст между ключевыми словами. А сами ключевые слова не скопировал ни первый, ни второй скрипт. А мне необходимо получить не только содержимое между ними, но и скопировать сами ключевые слова, с которых начинается поиск.  

Не представляю, как это могло быть.
Первый скрипт ОБЯЗАН скопировать вместе с тэгами. У меня такое впечатление, что ты оба раза запускал второй скрипт.

Код:
option explicit  
 
dim logfile, outfile, fso, txtfile, txt  
 
logfile = "c:\mylog.log"  
outfile = "c:\mylog_out.log"  
 
set fso = createobject("scripting.filesystemobject")  
 
set txtfile = fso.opentextfile(logfile)  
   txt = txtfile.readall  
txtfile.close  
 
set txtfile = fso.opentextfile(outfile, 2, true)  
   txtfile.write formextract(txt)  
txtfile.close  
 
function formextract(text)  
   dim txtext, pos, pos2  
      do while instr(text, "<form action=") > 0  
         pos = instr(text, "<form action=")  
         pos2 = instr(text, "</form>") + 7
         if instr(mid(text, pos, pos2 - pos), "name=""beon[question]""") then
            txtext = txtext & mid(text, pos, pos2 - pos) & vbcrlf  
         end if
         text = mid(text, pos2)  
      loop  
      formextract = txtext  
end function

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 23:26 18-04-2010 | Исправлено: Rush, 23:31 18-04-2010
mityamitya

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ураааа !!!! Все заработало !!!! Rush крутой програмист. Большой ему поклон и многая лета !

Всего записей: 34 | Зарегистр. 18-06-2007 | Отправлено: 23:53 18-04-2010
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я подумал, что эти теги будут в одной строке, на это мой скрипт и рассчитан. Но раз в Вашем тексте такого не встречается, то он ничего и не нашёл...

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 09:19 19-04-2010 | Исправлено: Hugo121, 09:21 19-04-2010
quakerock



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
to Alefandr
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Либо хотябы скрипт чтобы просто мог прочитать текстовый файл и выдавал сообщение с содержимым файла!!!  
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("C:\Log.txt") ' Путь к файлу и имя файла
Set TextStream = File.OpenAsTextStream(1)
MsgBox TextStream.ReadAll()
TextStream.Close

Всего записей: 29 | Зарегистр. 08-07-2009 | Отправлено: 16:30 19-04-2010
mityamitya

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странно как то работает скрипт от Rush.  
Он нашел из 30 значений только 8. То есть нашел первое, осталные пропустил, а затем обработал последние 7. Я вначале не мог понять почему так происходит. А затем поексперементировав обнаружил, что скрипт прекращает поиск если в документе натыкается на пустое место. Я имею ввиду не пробел. В текстовом редакторе Notepad++ v5.4.3 это место отображается как NULL. А в хекс редакторе стоят два нуля. Вот после этого "пустого места" скрипт прекращает поиск, хотя дальше может быть гора текста с искомыми значениями. Наверное он думает что документ закончился.
Как решить такую проблему ?

Всего записей: 34 | Зарегистр. 18-06-2007 | Отправлено: 23:22 21-04-2010
kapiton1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Компьютеры входят а AD организации, есть задача, с помощью VBS или WMI узнать, в какие локальные и доменные группы входит текущий пользователь на компе (нужно для подстановки в bginfo). Или хотя бы однозначно узнать, есть ли у текущего пользователя права администратора на машине (слышал, что с Вистами здесь есть проблема).  

Всего записей: 138 | Зарегистр. 20-07-2005 | Отправлено: 10:08 22-04-2010
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mityamitya

Цитата:
Странно как то работает скрипт от Rush.  

Это не скрипт странный, а просто у тебя файл не текстового формата (с нулевыми байтами).  
Поэтому FSO и не читает после них инфу - он предназначен для работы с текстом.
А телепатом я, к сожалению, не являюсь. Нужно или задачу полнее описывать, или пример файла, с которым надо работать, давать. Ферштейн?
Держи:

Код:
option explicit  
 
dim logfile, outfile, txt, stream  
 
logfile = "c:\mylog.log"  
outfile = "c:\mylog_out.log"  
 
set stream = createobject("adodb.stream")
stream.type = 2
stream.charset = "windows-1251"
 
stream.open()
   stream.loadfromfile(logfile)
   txt = stream.readtext
stream.close
 
stream.open()
   stream.writetext formextract(txt)
   stream.savetofile outfile, 2
stream.close  
 
function formextract(text)  
   dim txtext, pos, pos2  
      do while instr(text, "name=""beon[question]""") > 0  
         pos = instr(text, "<form action=")  
         pos2 = instr(text, "</form>") + 7
         if instr(mid(text, pos, pos2 - pos), "name=""beon[question]""") then
            txtext = txtext & mid(text, pos, pos2 - pos) & vbcrlf  
         end if
         text = mid(text, pos2)  
      loop
      if len(txtext) then txtext = left(txtext, len(txtext) - 2)
      formextract = txtext
end function
 
 

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 14:48 22-04-2010
mityamitya

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 Спасибо БОЛЬШОЕ за терпение ко мне -- Rush. Последний вариант скрипта работает без отказов и так, как мне надо.  
  Дело в том, что я впервые в жызни столкнулся с обработкой лог файла. Поэтому проблемы приходилось решать по мере их возникновения. Я даже не знал о таких тонкостях обработки лог файла. Сам был удивлен. Без вашей помощи я бы не смог решить такую задачу.
 Ну и последний вопросик, если можно. Как в текстовом файле превратить нулевые байты, например, в пробелы. Или вообще их удалить ? Это так, вопрос на будущее. Может когдато мне пригодится в хозяйстве.

Всего записей: 34 | Зарегистр. 18-06-2007 | Отправлено: 17:03 22-04-2010 | Исправлено: mityamitya, 17:05 22-04-2010
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mityamitya

Цитата:
Как в текстовом файле превратить нулевые байты, например, в пробелы.


Код:
txt = replace(txt, chr(0), chr(32))
 

Цитата:
Или вообще их удалить ?


Код:
txt = replace(txt, chr(0), "")

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 17:18 22-04-2010
dima99999

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста.
 
Задача:  
Вариант 1 - запустить приложение, найти название окна данного приложения и переименовать в произвольный вид.
Вариант 2 - просто переименовать заранее заданное название окна (в скрипте) в произвольный вид
 
 
Возможно ли это выполнить средствами vbs (или иными средствами встроенными в windows)
 
Если не сложно напишите пожалуйста пример. (для варианта 1 и 2)
Заранее спасибо.

Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 21:48 23-04-2010 | Исправлено: dima99999, 21:53 23-04-2010
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AutoIt (Но в Вин правда не встроено, зато и первое, и второе):

Код:
Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE)
Sleep(500)
WinSetTitle("Безымянный", "", "My New Notepad")
 

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 13:43 24-04-2010 | Исправлено: Hugo121, 13:59 24-04-2010
dima99999

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
интересуют только встроенные средства начинающиеся от win XP SP2
Если это в принципе возможно встроенными средствами.

Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 14:00 24-04-2010
mityamitya

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я конечно извиняюсь, но я не понял что делать с этим кодом, написаным Rush на мой вопрос о замене нулевых байтов в текстовом файле. Его надо вписать в основной скрипт "dim logfile, outfile, txt, stream" ? Или его можно запустить отдельным файлом ? Я его запускал отдельным файлом, ничего не произошло. Я туда вписал только txt = replace(txt, chr(0), chr(32)). Может нужны дополнительные команды ?

Всего записей: 34 | Зарегистр. 18-06-2007 | Отправлено: 23:36 26-04-2010
Hugo121

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот сюда, между stream.close и stream.open()  
 

Код:
   txt = stream.readtext  
stream.close  
 
txt = replace(txt, chr(0), chr(32))  
 
stream.open()  
   stream.writetext formextract(txt)  
 

Всего записей: 128 | Зарегистр. 14-08-2007 | Отправлено: 10:14 27-04-2010
evsand

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужна помощь специалистов!!! Я в создании скриптов полный ноль. Директор дал задание: на определенных компьютерах делать поиск новых файлов (созданных например за 2-3 дня) и складывать их в папку. Как можно это сделать средствами VBS?

Всего записей: 4 | Зарегистр. 22-04-2010 | Отправлено: 11:30 27-04-2010
student24

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
niichavo

Цитата:
VBS2EXE - утилита для компиляции vbs и js скриптов в exe выдранная из пакета PrimalScript

 
Привет! Не знаешь где найти декомпилятор VBS2EXE? Очень нужен!!!

Всего записей: 18 | Зарегистр. 29-09-2008 | Отправлено: 12:56 29-04-2010
vlth

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
evsand

Код:
Option Explicit
Dim fso, objShell, objFolder, NotFirst, flag
 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Выбор начальной папки поиска", &H1, 17)
If Not objFolder Is Nothing Then
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objFolder = fso.GetFolder(objFolder.Self.path)
    On Error Resume Next
    fso.CreateFolder objFolder.path & "\" & Date
    On Error GoTo 0
    SearchAndMoveFiles objFolder, objFolder.path & "\" & Date
Else: wsh.Quit
End If
 
If flag Then
    MsgBox "Новые файлы перемещены в '" & objFolder.path & "\" & Date & "\" & "'"
Else
    MsgBox "Новые файлы не найдены"
End If
 
Set fso = Nothing
Set objFolder = Nothing
Set objShell = Nothing
 
Function SearchAndMoveFiles(fld, T_path)
Dim objSubFolder, objFile, DaysQ
 
If Not NotFirst Then
    DaysQ = InputBox("Для поиска файлов введите кол-во дней," & vbCrLf _
        & "предшествующих сегодняшнему.", , 3)
    If DaysQ = "" Then wsh.Quit                                     ' Завершение без сообщения
    If Not IsNumeric(DaysQ) Or DaysQ = 0 Or DaysQ > 5 Then wsh.Quit ' Завершение без сообщения
End If
 
For Each objFile In fld.Files
    If (Now - objFile.DateLastModified) < DaysQ + 1 Then
        If T_path <> fld.path Then
            objFile.Move T_path & "\"
            flag = True
        End If
    End If
Next
NotFirst = True
For Each objSubFolder In fld.SubFolders
    SearchAndMoveFiles objSubFolder, T_path
Next
Set objSubFolder = Nothing
Set objFile = Nothing
End Function

Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 01:55 30-04-2010 | Исправлено: vlth, 02:16 30-04-2010
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript
ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru