[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Модератор форума: Andrey_A, simup, ХарВик, chip642  
ScriptTemplate.vbs - Скрипт шаблон
Andrey_AДата: Четверг, 28.11.2013, 02:19 | Сообщение № 1
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Скрипт шаблон, помогающий пользователю настроить текстовые преобразования
Используется скрипт Functions.vbs - Скрипт с различными Функциями, которые можно использовать в других скриптах

Доступно только для пользователей


 
Andrey_AДата: Воскресенье, 26.07.2015, 22:59 | Сообщение № 31
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата
вызывать та её как?

Там где это необходимо в скрипте пишите:
Код
Text = Transliterate2(Text, 1)
или
Text = Transliterate2(Text, 2)
или
Text = Transliterate2(Text, 3)
...

что означает, что вы отправляете переменную Text в функцию для преобразования, с заданным параметром

.


 
InFiveДата: Воскресенье, 26.07.2015, 23:14 | Сообщение № 32
Майор

На сайте с: 26.11.2013
Город: Майкоп
Сообщений: 93
Награды: 2
Репутация: 0
Теоретические получается, что данный второй код мне не подходит... мне нужно, чтобы работал ваш первый код
Код
Case 5
      TEG1 = "<span class=""rus"">" ' начало тега
      TEG2 = "</span>" ' окончание тега
      aT = RegExpSearchPlus(Text, TEG1 & "[^""><]+" & TEG2, 1, 0, 1, 2) ' получение массива всех "rus" тегов в тексте
      If IsArray(aT) Then ' проверка - является ли массивом
        ' в цикле обрабатываем все теги
        For i = 0 To Ubound(aT) - 1
          Teg = Replace(aT(i), TEG1, "") ' удаляем из элемента начало тега
          Teg = Replace(Teg, TEG2, "") ' удаляем из элемента конец тега
          Teg = Transliterate(Teg, 1) ' заменяем английские на русские
          Text = Replace(Text, aT(i), TEG1 & Teg & TEG2) ' заменяем полученные отрезки на изменённые
        Next
      End If


Поэтому я и спросил, если я создам функцию со своими Case, как её использовать с вашим первым кодом?
вместо eg = Transliterate(Teg, 1) я пропишу свою функцию Teg = Transliterate2(Teg, 1) но а как тогда выбирать здесь Case?
 
Andrey_AДата: Воскресенье, 26.07.2015, 23:31 | Сообщение № 33
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Код
но а как тогда выбирать здесь Case?

не понял вопроса...
Case в основном скрипте и Case в функции - это разные вещи - и они не пересекаются...

Код
Cnt = WScript.Arguments.Count ' количество параметров переданных в скрипт
Param1 = WScript.Arguments(0)
If Cnt > 1 Then Param2 = WScript.Arguments(1)

Select Case Param1
   Case 1
      
   Case 2
      
   Case 3
     Text = NameFun(Text, Param2)
End Select

...

Function NameFun(X, Y)
   Select Case Y
     Case 1
        
     Case 2
        
     Case 3
        
   End Select
   NameFun = ...
End Function


 
InFiveДата: Воскресенье, 26.07.2015, 23:43 | Сообщение № 34
Майор

На сайте с: 26.11.2013
Город: Майкоп
Сообщений: 93
Награды: 2
Репутация: 0
Оставлю вопрос только один - если я создам функцию со своими набором Case, как её использовать с вашим первым кодом?
Или если я пропишу в коде Teg = Transliterate2(Teg, 1) то моя функция Transliterate2 будет автоматом выполняться со всеми прописанными в функции Case?
 
Andrey_AДата: Понедельник, 27.07.2015, 01:33 | Сообщение № 35
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Код
AkelPad.Include("Functions.vbs") ' подключение скрипта-библиотеки
Param = WScript.Arguments(0) ' значение 1-го параметра

Text = AkelPad.GetSelText() ' получение выделенного текста

If Len(Text) = 0 Then ' если ничего не выделенно, то
    Text = AkelPad.GetTextRange(0, -1) '  берётся весь текст
    Call AkelPad.SetSel(0, -1) ' выделяется весь текст
End If

Select Case Param
    Case 1
        
       ' ... '
        
    Case 5
       TEG1 = "<span class=""rus"">" ' начало тега
       TEG2 = "</span>" ' окончание тега
       aT = RegExpSearchPlus(Text, TEG1 & "[^""><]+" & TEG2, 1, 0, 1, 2) ' получение массива всех "rus" тегов в тексте
       If IsArray(aT) Then ' проверка - является ли массивом
         ' в цикле обрабатываем все теги
         For i = 0 To Ubound(aT) - 1
           Teg = Replace(aT(i), TEG1, "") ' удаляем из элемента начало тега
           Teg = Replace(Teg, TEG2, "") ' удаляем из элемента конец тега
           Teg = Transliterate2(Teg, 1) ' заменяем английские на русские
           Text = Replace(Text, aT(i), TEG1 & Teg & TEG2) ' заменяем полученные отрезки на изменённые
         Next
End Select

Call AkelPad.ReplaceSel(Text) ' замена выделенного преобразованным текстом

' tranText - текст для преобразования
' Param - номер языка
Function Transliterate2(tranText, PR)
    If Len(tranText) = 0 Then Exit Function
    Select Case PR
      Case 1 ' китайский   
        Source = Array("а", "б")
        Target = Array("a", "b")
      Case 2 ' украинский
        Source = Array("а", "б")
        Target = Array("a", "b")
      Case 3 ' финский   
        Source = Array("а", "б")
        Target = Array("a", "b")
    End Select
    For t = 0 To Ubound(Source)
      trText = RegExpReplace(tranText, Source(t), Target(t), 0, 1, 1)
    Next
    Transliterate2 = tranText
End Function


 
InFiveДата: Понедельник, 27.07.2015, 20:14 | Сообщение № 36
Майор

На сайте с: 26.11.2013
Город: Майкоп
Сообщений: 93
Награды: 2
Репутация: 0
Андрей, к сожалению, но не работает...


после нажатия на кнопку "Изменить" курсор в AP становится на выделенную строку, под номером 139947

Забыл предупредить, я работаю в AP Image 28.28

Добавлено (27.07.2015, 20:14)
---------------------------------------------
Всё, разобрался надо было добавить пропущенное End If чтобы было в конце

Next
End If

но к сожалению, сделав внутри функции Case для пробы

Source = Array("all", "alla")
Target = Array("алл", "алла")

замена не совершается в тексте для пробы

<span class="rus">alla</span> <span class="rus">all</span>

Прикрепления: 2965080.jpg (81.5 Kb)


Сообщение отредактировал InFive - Понедельник, 27.07.2015, 18:30
 
Andrey_AДата: Понедельник, 27.07.2015, 22:29 | Сообщение № 37
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
1. Ошибки бывают...

Код
    For t = 0 To Ubound(Source)
       tranText = RegExpReplace(tranText, Source(t), Target(t), 0, 1, 1)
     Next
     Transliterate2 = tranText
End Function


2. При словесных заменах лучше в начале использовать длинные имена, потом короткие

Код
Source = Array("alla", "all")
Target = Array("алла", "алл")


 
InFiveДата: Понедельник, 27.07.2015, 22:48 | Сообщение № 38
Майор

На сайте с: 26.11.2013
Город: Майкоп
Сообщений: 93
Награды: 2
Репутация: 0
Мне пришла мысль, что эта функция мне нужна будет и для других целей, для работ в пределах разных тегов... так, так, так, это очень даже хорошо... единственно что, нужно будет чтобы после выполнения функции, в некоторых случаях нужно будет чтобы теги начальные и конечные, внутри которых совершается работа, удалялись... простой ход есть для этого в пределах функции?
 
Andrey_AДата: Понедельник, 27.07.2015, 22:56 | Сообщение № 39
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Код
...
Text = Replace(Text, aT(i), Teg) ' заменяем полученные отрезки на изменённые без начальных и конечных тегов
...


 
InFiveДата: Вторник, 28.07.2015, 10:14 | Сообщение № 40
Майор

На сайте с: 26.11.2013
Город: Майкоп
Сообщений: 93
Награды: 2
Репутация: 0
Андрей

Этот скрипт у меня сильно разрастается, подумываю о том, чтобы его поделить на части и по темам. В связи с этим вопрос - название скрипта нигде жёстко не прописано, проблем не будет с переименованием его?
 
Andrey_AДата: Вторник, 28.07.2015, 11:37 | Сообщение № 41
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7187
Награды: 143
Репутация: 125
Аверин Андрей
Цитата
название скрипта нигде жёстко не прописано, проблем не будет с переименованием его

нет конечно... ScriptTemplate.vbs - это всего лишь пример создания своего собственного

Цитата
скрипт у меня сильно разрастается, подумываю о том, чтобы его поделить на части и по темам

если есть (будут отдельные функции), как Transliterate2() , то их можно вынести в другой скрипт "общих функций"
к примеру MyFunction.vbs и положить в папку ...\AkelFiles\Plugs\Scripts\Include\
и его (все эти функции) можно подключать с помощью команды:

Код
AkelPad.Include("MyFunction.vbs") ' подключение скрипта-библиотеки


так я сделал когда-то Functions.vbs , в котором была одна функция - теперь более 170-ти...


 
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

Интеллектуальные права и отказ от ответственности