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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
на вбс скрипе все мона. алгоритм примерно такой - цикл до конца файла, считываешь строку  проверяеш EOF, записываешь ее во временную переменную, если конец файла то выходишь из цикла, а в во временной переменной предпоследний результат.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:10 13-09-2009
kolyas



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
форумчане подскажите, плиз,
писал себе удобство для подправки всех php файликов - вставка функции в тело всех функций по такому правилу

Код:
XXX.Pattern = "function ([^(].+){"

 
дак вместо того чтобы находить в тексте
 

Код:
function test_fn ($var1,$var2){ delaem1(1);delaem2(2); тут любой текст { тут любой текст  

 
нужное:

Код:
function test_fn ($var1,$var2){  

 
включает весь текст до второй "{"
 

Код:
function test_fn ($var1,$var2){ delaem1(1);delaem2(2); тут любой текст {

 
Кто, что может сказать?

Всего записей: 137 | Зарегистр. 19-03-2007 | Отправлено: 10:32 16-09-2009
Gavigor



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

 
 
Добавлено:

Цитата:
Вот блин, развели на несколько страниц разговоров вокруг простых вещей...  
 
Скрипт будет искать на всех дисках и копировать в папку со скриптом. Если будут с одинаковыми именами, то спросит.  
 
Код:  
on error resume next  
set fso = createobject("scripting.filesystemobject")  
filename = inputbox("Введите имя файла:", "Копирование файла")  
for each i in fso.drives  
   if i.isready then subdirs(i.rootfolder)  
next  
sub subdirs(dir)  
   for each subdir in dir.subfolders  
      if err.number <> 0 then  
         err.clear  
      else  
         subdirs(subdir)  
      end if  
      on error resume next    
   next  
   enumfiles(dir)  
end sub  
sub enumfiles(dir)  
   for each file in dir.files  
      if filename = file.name then  
         if fso.fileexists(fso.getparentfoldername(wscript.scriptfullname) & "\" & filename) then  
            renfile = inputbox("Файл с таким именем уже существует." & vbcrlf & _  
                     "Переименовать этот файл?", "Переименование файла", filename)  
         end if  
         if renfile <> "" then fname = renfile else fname = filename  
         fso.copyfile file, fso.getparentfoldername(wscript.scriptfullname) & "\" & fname  
      end if  
   next  
end sub        
wscript.echo "конец!"

 
-как изменить для поиска конкретного файла и автоматического переименовывания.
-пробывал сюда: filename = МОЙ ФАЙЛ.Файл("Введите имя файла:", "Копирование файла") - что то ищет (по диспетчеру). потом пишет конец......но ничего не копирует. что то я не туда вписывал?

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 12:42 16-09-2009
alroy

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kolyas
Я думаю что тебе нужно смотреть в эту сторону  

Код:
Объект RegExp
Создание объекта
Пример:  
 
Set objRegExp = CreateObject("VBScript.RegExp")
 
 
Возможности регулярных выражений:  
 
1. Сравнить текст с заданным шаблоном. Например, введённый пользователем телефонный номер должен соответствовать шаблону "8(***)***-***-**", где * - любая цифра, но не буква.
2. Заменить или удалить из введённой пользователем строки текст, соответствующий заданному шаблону.
3. Извлечь из введённой пользователем строки текст, соответствующий заданному шаблону.
Регулярное выражение - это образец текста, который состоит из обычных символов и/или специальных метасимволов.
 
 
© 2004 http://small.h12.ru  
 

Всего записей: 60 | Зарегистр. 15-06-2005 | Отправлено: 13:36 16-09-2009
kolyas



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
alroy
Вообщето XXX.Pattern это шаблон от  
 

Код:
Set objRegExp = CreateObject("VBScript.RegExp")  
objRegExp.Pattern= ...

Всего записей: 137 | Зарегистр. 19-03-2007 | Отправлено: 13:50 16-09-2009
bomzzz



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

Цитата:
 
MyFile = "c:\Temp\MyDir\MyFile.txt"
 

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:11 16-09-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
 
искать на всех дисках!
 
т.е. путь файла неизвестен (в смысле на каком диске

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 18:20 16-09-2009
bomzzz



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

Цитата:
 
MyFile = "MyFile.txt"
 

 for each i in fso.drives  
   if i.isready then subdirs(i.rootfolder)  
next  
вот эти строки наверно по существующим дискам ищут - не знаю не пользовался сам такой конструкцией еще.
я могу только здесь поискать - но сейчас другие вещи в голове

Цитата:
 
http://narod.ru/disk/12530906000/Automation.chm.html
 
Руководство разработчика на WSH 2.0
Руководство разработчика на WSH 2.0
 
WinDjView-1.0.3-Setup
 

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:00 16-09-2009 | Исправлено: bomzzz, 20:03 16-09-2009
Gavigor



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

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 21:35 16-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 я на MASM подсел.  
вот последнее что родил на вбс - чистильщик кеша иконок трея.
IconTrayCacheCleaner.RUS10,8 КБ (11 146 байт)
ccleaner можно сказать кеш не чистит, виндовская утилита - и весит 650 кб и не такая удобная и не учитывает случай когда кеш уже очищен и чиститься второй раз.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 21:50 16-09-2009 | Исправлено: bomzzz, 21:51 16-09-2009
kolyas



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
.. ну кто-нить по шаблонам то подскажет?? ... очень надо ..  
 
Добавлено:
одна интересная особенность:
если текст идет одной строкой

Код:
function test(a=1, a=2, d$=[2,4]){ test(2.3){

 
то находиться по выражению function\s+([^\(].+\(.*\))\s*{

Код:
function test(a=1, a=2, d$=[2,4]){ test(2.3){
с подзначением
test(a=1, a=2, d$=[2,4]){ test(2.3)
 

НО стоит только перенести последнюю скобку { на новую строку, минимум с одним символом и вуаля функция работает правильно .. такое ощущение что регулярные выражения считаются справа-налево
... 3 часа ночи .. второй день не могу понять как считать по первой скобке {

Всего записей: 137 | Зарегистр. 19-03-2007 | Отправлено: 21:59 16-09-2009
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kolyas
Попробуй так (не проверял):

Код:
XXX.Pattern = "function ([^(].+?){"  
 
Дело в том, что если использовать "?" сразу за любым квантификатором, то шаблон становится нежадным и соответствует, насколько это возможно, минимальной части строки.  
А без него шаблон жадный - соответствует максимально возможной части строки.

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 13:52 17-09-2009
kolyas



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Rush
преогромнейшее спасибище.. недочитал описание
"Определяет ни одного или один символ, стоящий перед ним. Эквивалентно {0,1}. Если этот метасимвол идёт непосредственно за конструкциями (*, +, ?, {n}, {n,}, {n,m}), это приводит к некоторому изменению алгоритма поиска по заданному шаблону"
вот еще бы понять к какому такому - некоторому

Всего записей: 137 | Зарегистр. 19-03-2007 | Отправлено: 18:31 17-09-2009
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kolyas
Цитата:
еще бы понять к какому такому - некоторому

VBScript: Регулярные выражения
CHM-Help [46КБ]
Великолепный перевод соответствующих глав из MSDN выполнил
Александр Асябрик aka Shura.
 
Лучше чем там написано я вряд ли объясню...

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 20:39 17-09-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, помогите пожалуйста!
Есть скрипт (ищет файл):
 

Код:
 
Option Explicit
 
 
Dim objFSO
Dim objDrive
Dim strFileNameForFind
Dim i
ReDim arrPaths(0)                                                    ' Динамический массив для найденных путей
 
 
strFileNameForFind = "111.txt"                                      ' Имя файла для поиска.
 
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
arrPaths(LBound(arrPaths)) = False                                   ' Первый элемент массива - флаг результата поиска.
 
For Each objDrive In objFSO.Drives                                   ' Перебираем все существующие тома.
    If objDrive.DriveType = 2 Then                                   ' Том фиксированный?
        If objDrive.IsReady Then                                     ' Том готов?
            'WScript.Echo "Find on drive " & objDrive.DriveLetter & ":..."
             
            FindInSubFolders objDrive.RootFolder, strFileNameForFind ' Вызываем процедуру поиска
                                                                     ' для корневой папки этого тома.
                                                                     ' Обработка вложенных папок будет
                                                                     ' вестись рекурсивно.
        End If
    End If
next  
 
 
Sub FindInSubFolders(objFolder, strFileName)
    Dim objSubFolder
    Dim strFullFileName
     
     'WScript.Echo objFolder.Path                                      ' Выводим путь обрабатываемой папки (для
                                                                     ' отладки; имеет смысл закомментировать).
     
    strFullFileName = objFSO.BuildPath(objFolder, strFileName)       ' Строим полный путь файла.
     
    If objFSO.FileExists(strFullFileName) Then                       ' Файл существует?
        ReDim Preserve arrPaths(Ubound(arrPaths) + 1)                ' Увеличиваем размер массива.
        arrPaths(LBound(arrPaths)) = True                            ' Устанавливаем флаг результата поиска.
        arrPaths(UBound(arrPaths)) = strFullFileName                 ' Запоминаем путь.
         
        WScript.Echo "Found file [" & strFileName & "] in folder [" & objFolder.Path & "]."
    End If
         
    On Error Resume Next                                             ' Обрабатываем ошибки, возможные в случае,
                                                                     ' когда нет доступа к содержимому папки
                                                                     ' (пример - «System Volume Information».
    For Each objSubFolder In objFolder.SubFolders
        If Err.Number = 0 Then                                       ' Удалось получить доступ к содержимому папки?
            FindInSubFolders objSubFolder, strFileName               ' Вызываем процедуру поиска для каждой из подпапок.
        Else                                                         ' Если не удалось —
            Err.Clear                                                ' сбрасываем состояние ошибки и движемся дальше.
            'WScript.Echo "Can't enumerate subfolders for folder [" & objFolder.Path & "]."
        End If
    Next
    On Error Goto 0                                                  ' Восстанавливаем стандартную обработку ошибок
End Sub
 

 
-нужно чтобы Копировался найденный файл в папку со скриптом и, если возможно, переименовывал при совпадении имен.
 
у меня мозгов не хватает....

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 09:18 18-09-2009 | Исправлено: Gavigor, 09:23 18-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
гавигорка! приветик!
у тебя скрипт уже километровый.
вот так копировать
Set myFile = fso.GetFile(FolderPath & "\" & MyFile)
myFile.Copy "MyFile", True  
а чтоб имя менялось - наверно нужно сделать проверку на существование файла и если он существует то переименовать

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 09:34 18-09-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzzz
 
привет!
щас попробую...
 
 
Добавлено:

Код:
 
Option Explicit
 
 
Dim objFSO
Dim objDrive
Dim strFileNameForFind
Dim i
ReDim arrPaths(0)                                                    ' Динамический массив для найденных путей
 
 
strFileNameForFind = "111.txt"                                      ' Имя файла для поиска.
 
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
arrPaths(LBound(arrPaths)) = False                                   ' Первый элемент массива - флаг результата поиска.
 
For Each objDrive In objFSO.Drives                                   ' Перебираем все существующие тома.
    If objDrive.DriveType = 2 Then                                   ' Том фиксированный?
        If objDrive.IsReady Then                                     ' Том готов?
            'WScript.Echo "Find on drive " & objDrive.DriveLetter & ":..."
             
            FindInSubFolders objDrive.RootFolder, strFileNameForFind ' Вызываем процедуру поиска
                                                                     ' для корневой папки этого тома.
                                                                     ' Обработка вложенных папок будет
                                                                     ' вестись рекурсивно.
        End If
    End If
next  
 
 
Sub FindInSubFolders(objFolder, strFileName)
    Dim objSubFolder
    Dim strFullFileName
     
     'WScript.Echo objFolder.Path                                      ' Выводим путь обрабатываемой папки (для
                                                                     ' отладки; имеет смысл закомментировать).
     
    strFullFileName = objFSO.BuildPath(objFolder, strFileName)       ' Строим полный путь файла.
     
    If objFSO.FileExists(strFullFileName) Then                       ' Файл существует?
        ReDim Preserve arrPaths(Ubound(arrPaths) + 1)                ' Увеличиваем размер массива.
        arrPaths(LBound(arrPaths)) = True                            ' Устанавливаем флаг результата поиска.
        arrPaths(UBound(arrPaths)) = strFullFileName                 ' Запоминаем путь.
 
 
  ' ============================================================
 
 
     вставлять сюда? пробывал - не работает....мож не туда...  
 
 
 
 
  ' ============================================================
 
         
        WScript.Echo "Found file [" & strFileName & "] in folder [" & objFolder.Path & "]."
    End If
         
    On Error Resume Next                                             ' Обрабатываем ошибки, возможные в случае,
                                                                     ' когда нет доступа к содержимому папки
                                                                     ' (пример - «System Volume Information».
    For Each objSubFolder In objFolder.SubFolders
        If Err.Number = 0 Then                                       ' Удалось получить доступ к содержимому папки?
            FindInSubFolders objSubFolder, strFileName               ' Вызываем процедуру поиска для каждой из подпапок.
        Else                                                         ' Если не удалось —
            Err.Clear                                                ' сбрасываем состояние ошибки и движемся дальше.
            'WScript.Echo "Can't enumerate subfolders for folder [" & objFolder.Path & "]."
        End If
    Next
    On Error Goto 0                                                  ' Восстанавливаем стандартную обработку ошибок
End Sub
 

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 09:44 18-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у тебя уже так много понаписано. подпрограммы нужны и процедры.
 
IF УСЛОВИЕ THEN
ЕСЛИ УСЛОВИЕ ИСТИННО ВЫПОЛНЯЮТСЯ ЭТИ ОПЕРАТОРЫ
ELSE
ЕСЛИ УСЛОВИЕ ЛОЖНО ВЫПОЛНЯЮТСЯ ЭТИ ОПЕРАТОРЫ
END IF - КОНЕЦ БЛОКА IF
 
блок ELSE можно опустить

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:04 18-09-2009 | Исправлено: bomzzz, 10:06 18-09-2009
Gavigor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а нельзя так:
 
copy strFileNameForFind в место со скриптом?
 
........

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 10:11 18-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хм.  
 
Set myFile = fso.GetFile(strFullFileName)
myFile.Copy WScript.Path & "MyFile", True

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:14 18-09-2009 | Исправлено: bomzzz, 10:18 18-09-2009
   

Страницы: 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