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

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

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

superkatya



Катька - смутьянка
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поиск лекарств ведётся исключительно в разделе «Варезник».
TextPipe Pro
Текущая версия: 12.0 (06.06.2022)

Официальный сайт

 
Поддерживаемые ОС: Windows 10, 8, 7, Vista, 2019/2016/2012/2008/2003, x86 и x64
 
Скачать пробную версию в ZIP / в виде EXE-setup (27.5 МБ) / Список изменений
 
TextPipe Pro - утилита для пакетной обработки текстовой информации. Программа служит для форматирования и конвертирования текстовых файлов, замены в них текста, выполнения сложных преобразований, конвертирования текста из одного формата в другой.
Некоторые возможности TextPipe Pro:
• Пepepaбoтaнный пoиcк и зaмeнa в cooтвeтcтвии с заданной cxeмой. Причём можно задать как абсолютно идентичные cooтвeтcтвия, так и c нeчёткoй лoгикoй coпocтaвлeния (для иcпpaвлeния oбщeизвecтныx oшибoк нaбopa).
• Сортировка текста по алфавиту, рандомизация строк, подсчёт и удаление дублирующихся строк.
• Добавление и(или) извлечение определённых слов, строк или частей текста, как введённых вручную, так и содержащихся в любом другом текстовом файле.
• VBScript или JScript (или PerlScript, PythonScript, REXXscript и т.д.) фильтpы мoгyт быть oпиcaны c нacтpoйкoй для oбpaбoтки кaждoгo пoля.
• Пpeoбpaзoвaниe cимвoлoв кoнцa cтpoки мeждy фopмaтaми Unix, Mainframe, DOS и Macintosh.
• Преобразование текста в список слов.
• Иcпpaвлeниe зaглaвнocти бyкв (нaпpимep, sImon -> Simon), несколько видов смены регистра текста.
• Удaлeниe пpoбeлoв в нaчaлe, в кoнцe cтpoк, и yдaлeниe мнoжественных пробелов.
• Удaлeниe тэгoв HTML и XML или только их атрибутов.
• Дoбaвлeниe нyмepaции cтpoк, лeвoгo и пpaвoгo пoлeй, зaгoлoвкoв и cнocoк.
• Дoбaвлeниe или yдaлeниe cтoлбцoв тeкcтa, дoпoлнитeльныx cтpoк.
• Дoпoлнeниe или yceчeниe дaнныx пoлeй дo определённой шиpины.
• Извлeчeниe aдpecoв элeктpoннoй пoчты и URL и мнoгoе мнoгoe дpyгoe...


Полезные обучающие статьи по программе:
  • тут

    Программы аналогичного назначения:
  • PowerGrep

  • Всего записей: 3232 | Зарегистр. 01-06-2001 | Отправлено: 12:58 23-06-2004 | Исправлено: vasevase, 04:43 06-04-2023
    AntikillerPM

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

    Цитата:
    Вы папку с файлами добавили в настройках?
    Foss всё добавлено. Говорю же проводил мелкие, простые операции. все работает. но вот тут затык. не отрабатывает. версия отсюда 9.7.3.  
    ps мне уже не смешно. попробовал добавить фильтр удаления строк нижнего кода. Всё этот фильтр отработал. Почему регулярка не работает понять не могу.  

    Всего записей: 303 | Зарегистр. 01-05-2009 | Отправлено: 04:43 02-03-2017
    Foss

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Теперь идеологически вы должны понять принцип удаления. Вам нужно найти самую короткую уникальную в файле строку спереди и сзади куска для удаления. Нет необходимости регэкспить всю строку.
    Так проще потом ее отлаживать.
    Вот смотрите, у вас перед куском для удаления строка
     
    <P class=MsoNormal style="TEXT-ALIGN: left; mso-layout-grid-align: none"  
          align=center></P></TD></TR></TBODY></TABLE>
     
    а после
     
    <P class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN lang=RU  
    style="FONT-FAMILY: Arial">
     
    Если в тексте больше нет такой последовательности (не важно, что внутри этой последовательности), то вы можете легко составить регэксп по схеме
     
    (первая строка).*(вторая строка)
     
     заменить это на
     
    $1$2
     
    скобки означают выражение, которое может использоваться как переменная при замене. Нумеруются в той последовательности как идут. То есть $1$2 это тоже самое, что (первая строка)(вторая строка)
     
    Я не видел всей страницы, а потому не могу вам абсолютно точно сказать, как лучше всего составить регэксп в вашем случае. Но уверен, что оптимальный вариант будет очень коротким.
    Возможно даже таким или еще короче
     
    (align=center></P></TD></TR></TBODY></TABLE>).*(<P class=MsoNormal><B style="mso-bidi-font-weight[:] normal"><SPAN lang=RU)
     
    заменить на
     
    $1$2

    Всего записей: 1316 | Зарегистр. 15-04-2003 | Отправлено: 04:48 02-03-2017 | Исправлено: Foss, 04:58 02-03-2017
    AntikillerPM

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Foss можно в личку ссылку на пример файла скину? может быть я вовсе неправильно код определил поэтому и регулярка не работает.  

    Всего записей: 303 | Зарегистр. 01-05-2009 | Отправлено: 05:19 02-03-2017
    Foss

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

    Всего записей: 1316 | Зарегистр. 15-04-2003 | Отправлено: 05:26 02-03-2017
    AntikillerPM

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81 файлы оказались в формате utf-16 поэтому и не получалось, Foss подсказал, в PowerGREP дал регулярки и файлы обработались. Предположить не мог, что из-за кодировки такое возможно. Спасибо за помощь!!
     

    Всего записей: 303 | Зарегистр. 01-05-2009 | Отправлено: 09:14 02-03-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AntikillerPM
    ОК. Вот и замечательно, что всё решилось))
    Такие программы с наскока не просто освоить - нюансов может быть много, самого различного характера.
     
    А благодарить нужно Foss за проявленное терпение. Это то, что мне иногда не хватает, каюсь..

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 10:56 02-03-2017
    PaulAr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Пользуюсь программой для разных задач, но как правило для "очищения" текста от лишних знаков, строк, слов.
    Возникла задача к которой не знаю как подступится и поэтому прошу помощи у сообщества.
     
    Есть строки билинга вида:
    2017-06-09 13:33:35;205      ;1  ;1  ;10 ;479954      ;4928534238  ;89056476386              ;479954                   ;479954      ;4928534238  ;4799;4799;    ;     ;1477 ;
    2017-06-09 13:33:38;15       ;1  ;9  ;10 ;477697      ;9187750809  ;477697                   ;9187750809               ;477697      ;9187750809  ;    ;    ;defa;1476 ;     ;
     
    Если считать полями информацию между символами ";", то интересуют поля 6 7 8 9. Т.е. в первой строке это "479954" "4928534238" "89056476386" "479954".
    Как выделить их в отдельные пременные я знаю. Дальше мне нужно их сравнить. Если мы представим наши 4 числа соответственно слева направо как переменные  
    $1 $2 $3 $4, то сравнить нужно $1 с $3  и  $2 c $4. Если значения в парах одинаковые, то оставляем все как есть, если есть различие в любой паре, то нужно добавить к строке в которой есть это различие точно такую же строку (всю целиком), но только в полях 8 и 9 должны быть значения 6 и 7 соответственно. Длина строки должна оставаться одна и таже. Исходя из моего примера результат должен быть таким:
     
    2017-06-09 13:33:35;205      ;1  ;1  ;10 ;479954      ;4928534238  ;89056476386              ;479954                   ;479954      ;4928534238  ;4799;4799;    ;     ;1477 ;
    2017-06-09 13:33:35;205      ;1  ;1  ;10 ;479954      ;4928534238  ;479954                   ;4928534238               ;479954      ;4928534238  ;4799;4799;    ;     ;1477 ;
    2017-06-09 13:33:38;15       ;1  ;9  ;10 ;477697      ;9187750809  ;477697                   ;9187750809               ;477697      ;9187750809  ;    ;    ;defa;1476 ;     ;
     
    Представляется, что это делается с помощью скрипта, но никак не пойму как сравнивать значения и как добавлять строку.
    Спасибо за вашу помощь.

    Всего записей: 6 | Зарегистр. 09-11-2008 | Отправлено: 13:17 29-06-2017 | Исправлено: PaulAr, 14:10 29-06-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PaulAr
    Всегда приятно видеть чётко сформулированный вопрос. Всегда бы так.
    По теме. Сделать можно разными способами, и не обязательно в сабже.
    Если знакомы с EXCEL, то можно сделать в несколько шагов только формулами.
    Также, в EXCEL-е можно сделать макросом VBA.
    В сабже тоже можно, благо в нём тоже есть поддержка VBA.
    Главное, что у вас есть чёткий разделитель - точка с запятой и всю структуру можно представить как двухмерный массив (строки и колонки). Вся логика, которую Вы описали - итерация по элементам этого массива с действиями по простым условиям if else.
     
    Если Вам этого достаточно, чтоб понять, в какую строну копать, то на этом советы можно и закончить. Если нет опыта написания скриптов, то спросите по конкретной реализации на каком-нибудь форуме по EXCEL.

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 16:16 29-06-2017
    PaulAr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, Romul81, за ответ.
    Дело в том, что изначальная строка намного более замусореная лишними данными и к томуже не имеет строго определенной длины полей и общей строки. К тому виду который представлен в примере я привожу ее довольно объемным фильтром. К тому же этот фильтр запускается автоматически через каждые 20 секунд в фоновом режиме. Запускать еще и Excel, это перебор.
    По этому мне важно дополнить мой фильтр скриптом. Visual Basic я знаю на довольно низком уровне, но думаю с командой "if then else" справлюсь. Проблемма в тонкостях:
    Как передать полученные в фильтре переменные (4 шт.) в скрипт? И какой командой создать и добавить видоизмененную строку?
     
    И спасибо за вашу помощь.

    Всего записей: 6 | Зарегистр. 09-11-2008 | Отправлено: 16:48 29-06-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PaulAr
     
    У меня сейчас установленного TP нет под рукой. Поэтому по памяти.
    Предположим, предыдущим фильтром вы привели строку к виду, который приведён выше.
    Далее вы подключаете VBS-фильтр (смотрите правильную инициализации во встроенных примерах). В фильтр-скрипт подаётся поток в построчном режиме (each line in turn или что-то типа того). Внутри скрипта Вы режете строку в массив функцией split (см. документацию VBS). Сравниваете элементы массива и выводите результат в новую переменную. Тип данных может быть хоть массив, хоть текстовая конкатенация. Если массив, то потом преобразуете в стринг. Эта переменная может содержать и разрыв строки (вам же надо продублировать строку при наличии условий). Скрипт выдаёт на выход эту переменную, приведённую к строке. Всё.
     
    Ключевой момент здесь - это сравнение элементов массива и изменение данных согласно условиям.
     
    Добавлено:
    З.Ы. Для split в качестве разделителя - точка с запятой, что, впрочем, очевидно.
     
    Добавлено:
    З.З.Ы. Для того, чтоб было просто дебажить, используйте пару-тройку строк для примера, поместите в EXCEL и напишите функцию/sub в нём, чтоб убедиться, что скрипт написан верно в плане логики. Если всё ОК, переносите в TP (не забывая добавить обязательные функции типа job_start и т.п.)

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 17:12 29-06-2017
    PaulAr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
     
    Спасибо. Пойду курить VBS.  ВУЗовского курса Basic явно не достаточно.

    Всего записей: 6 | Зарегистр. 09-11-2008 | Отправлено: 17:25 29-06-2017 | Исправлено: PaulAr, 17:25 29-06-2017
    SFC



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

    Цитата:
    явно не достаточно

    да тут обычного Excel хватит. Импорт правильно сделайте и вперед.
    Хотя Для добавления строки на тот же лист действительно нужен VB.
     
    НО, если вам это только разово. то работы на 5 мин.
    1. вы для начала пометьте все строки по вашему критерию, после которой надо вставить такую строку.
    2. потом с учетом помеченных, правильно пронумеруйте имеющиеся, предварительно пропустив номера для будущих новых строк.
    3. потом на новом листе создайте ВЕСЬ массив номеров. И заполните имеющимися строками известные через ВПР/ИНДЕКС как удобнее.
    А на новые номера = пустые строки уже вставляйте по алгоритму то что вы хотите.
     
    Если конечно не поняли то тогда VB или тоже можно подумать как на TP сделать через массивы как тут сказано и скрипты

    ----------
    [ offline ]

    Всего записей: 1669 | Зарегистр. 21-01-2003 | Отправлено: 18:43 29-06-2017 | Исправлено: SFC, 18:46 29-06-2017
    PaulAr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SFC
     Спасибо за совет.
    К сожалению эта процедура не одноразовая и должна производиться в фоновом режиме один раз в 20 секунд. По этому выгружать в excel, преобразовывать там нет возможности. Я писал об этом выше.
    На самом деле в папке А каждые 20 сек. появляется файл или несколько с кучей ненужных полей и в зависимости от ситуации (это биллинговые файлы) эти поля разной длины. Я в фильтре привожу все к виду как на примере в первом моем посте. Все поля в разных строках одной длинны соответственно. Далее в папке А файл источник удаляется а результат записывается в виде файла в папку В. Еще на этом ПК запущена программа которая итоговый файл обрабатывает (и удаляет) из папки В и иногда в этой программе нужно делать отчеты. По этому запуск excel каждые 20 секунд не возможен.
     
    Буду благодарен если кто-нибудь подскажет командочки для скрипта.
    Я пока вникаю в VBS в Excel, пробую отладить в нем чтобы перенести потом в TextPipe как посоветовал мне Romul81.

    Всего записей: 6 | Зарегистр. 09-11-2008 | Отправлено: 21:44 29-06-2017 | Исправлено: PaulAr, 21:45 29-06-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PaulAr
     
    Держите: http://rgho.st/8XP8MYSfS
    Там могли присутствовать некоторые подводные камни, так что если опыт в VB минимальный, то могли бы долго ходить по граблям.
    Подайте на этот фильтр свой подготовленный стринг.
     
    З.ы. и да, после Excel пришлось немного адаптировать код.
     
    З.З.Ы. На всякий случай VB-код оставлю здесь:
     
    Подробнее...

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 00:13 30-06-2017 | Исправлено: Romul81, 00:23 30-06-2017
    PaulAr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
     
    СПАСИБО огромное за скрипт.
    Просто вставил его в конце своего фильтра и он выдал 100% необходимый результат!!!!
    Я просто поражен, что без дополнительного шаманства скрипт (который я еще не до конца понял как работает, но обязательно разберусь) работает как надо.  
    Romul81 я готов ваш труд (я бы потратил не меньше недели) задонатить.
    Приятно иметь дело со специалистом.  
    Спасибо.

    Всего записей: 6 | Зарегистр. 09-11-2008 | Отправлено: 09:50 30-06-2017
    Romul81



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

    Код:
     Function processLine(line, EOL)  
       
        Dim inputLn  
        Dim inputLnArr  
        Dim lb  
        Dim toDuplicate  
        Dim outputStr  
       
        toDuplicate = False ' Boolean значение, обозначающее нужно или нет копировать линию
        inputLn = line ' входящая линия текста
        inputLnArr = Split(inputLn, ";") ' конвертируем её в массив, используя в качестве разделителя точку с запятой
         
        lb = LBound(inputLnArr) ' нижняя граница массива
            ' по стандарту = 0, но может быть и 1
            ' дабы избежать возможных проблем предусмотрим оба варианта
         
        For i = lb To UBound(inputLnArr) ' итерация по массиву в цикле
            If i = lb + 8 Then ' находим последний элемент, который нужно проанализировать
                If Trim(inputLnArr(lb + 5)) <> Trim(inputLnArr(lb + 7)) Or _  
                        Trim(inputLnArr(lb + 6)) <> Trim(inputLnArr(i)) Then ' производим логическое сравнение элементов массива
                        ' используем Trim, чтоб сравнивать именно значения, без учёта пробелов
                    toDuplicate = True ' при выполнении условия отмечаем линию для копирования
                    inputLnArr(lb + 7) = Left(Trim(inputLnArr(lb + 5)) & Space(Len(inputLnArr(lb + 7)) - Len(Trim(inputLnArr(lb + 5)))), _  
                            Len(inputLnArr(lb + 7))) ' заменяем значения в элементах массива, попутно вычисляя необходимую длину символов элемента,
                            ' добавляя необходимое кол-во пробелов справа, чтоб соблюсти длину линии
                    inputLnArr(i) = Left(Trim(inputLnArr(lb + 6)) & Space(Len(inputLnArr(i)) - Len(Trim(inputLnArr(lb + 6)))), _  
                            Len(inputLnArr(i)))  ' то же самое для другой пары элементов
                End If  
            End If  
        Next  
         
        If toDuplicate Then ' если линия помечена для копирования
            outputStr = inputLn & EOL & Join(inputLnArr, ";") & EOL ' добавляем к оригинальной линии перевод строки и приводим наш модифицированный массив к стрингу с разделителем в виде точки с запятой
        Else  ' иначе
            outputStr = TextPipe.subFilterEntireText(line & EOL) ' результат равен входящей линии + перевод строки
        End If  
        processLine = outputStr  ' возвращаемый функцией результат
     
     End Function

     
    Добавлено:
    З.Ы. Хотя, на самом деле цикл здесь и не нужен. Можно сразу приступить к анализу и изменению массива, без необходимости его итерировать.
     
    Добавлено:
    З.З.Ы. Было бы также неплохо проверить верхнюю границу массива, дабы убедиться, что элементы, которые мы собрались анализировать существуют. Иначе была бы ошибка. Но цикл как раз и решает эту проблему.
     
    Т.е. другими словами. Или оставить цикл, или проверять UBound.

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 10:16 30-06-2017 | Исправлено: Romul81, 10:16 30-06-2017
    PaulAr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
     
    Я в данный момент ищу толковое объяснение команд чтобы понять какие значения принимают переменные (в частности lb) и тут вы показываете фокус под названием "чтение мыслей на расстоянии". Это чудо и по другому назвать сложно (метот дедукции не предлагать).
     
    Надеюсь эти знания позволят мне сократить мой фильтр с 282 строк (с коментариями) до 2-х 3-х десятков строк или меньше
    СПАСИБО!!!!

    Всего записей: 6 | Зарегистр. 09-11-2008 | Отправлено: 10:38 30-06-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В порядке полезной информации для расширения функциональности TP и, в частности, скриптинг-фильтра. Вкратце ситуация следующая. Фильтр может задействовать любой скриптовой язык, доступный через интерфейс WSH. Более развёрнутая информация в английской вики.
    Проблема заключается в том, что при использовании любых из следующих Script Language:

    • JScript
    • JavaScript
    • ECMAScript

    задействуется встроенный JScript в версии 5.8 (по крайней мере в Win 8.1). Эта версия реализации MS соответствует ECMAScript 3 (ECMA-262 3rd edition / JavaScript 1.5), разработанная в лохматом 2000-м году. Да, даже в этой версии производительность несколько выше, чем у другого встроенного скриптового языка - VBScript. Но, если в системе есть IE 9+ и, соответственно, новый интерпретатор Chakra, то зачем платить больше? Новый движок на порядки быстрее и полностью поддерживает ES5 (ECMA-262 5th edition / JavaScript 1.8.1) плюс частично ES6. Не то, чтобы эти стандарты были так уж очень нужны, но, как уже было сказано, новый движок гораздо быстрее и плюс к тому, появляется поддержка таких удобных методов как forEach, indexOf, reduce и др. для массивов и такая базовая вещь как trim для String.
     
    OK, понятно, Chakra лучше. Но как задействовать?
     
    1. Применить твик реестра из этого поста. Правда, в моём случае на двух машинах с Win 8.1 для первых двух ключей (ProgID) значения пришлось вносить вручную, предварительно пошаманив с правами на запись. Вкратце - сначала нужно добавить себя в Auditing, затем стать владельцем и задать полный доступ. После изменения вернуть всё взад (хотя, наверное, можно и не возвращать).
     
    2. В TP в графе Script Language вместо JScript указать Chakra. В поле для кода поместить тестовый скрипт Проверить - нажать кнопку "Check Script". Если ОК - Chakra подключилась.
     
    Бинго! Теперь можно писать код обработки, совместимый с ES5.
     
    Добавлено:
    З.Ы. Есть ещё такая мулька как node-chakracore - форк Node.js на движке chakra с открытым исходным кодом (вместо V8). Полная поддержка ES6. Но по WSH недоступен. Подключается с помощью JSRT API, но так и не разобрался, как прикрутить. Инфа здесь.

     
    EDIT
     
    Практика, как известно, является критерием истины. И после тестирования методов ES5 в TP на практике выяснилось, что даже в случае использования движка Chakra эти самые методы не поддерживаются. Почему - непонятно.
    Немного теории. Все "родные" dll-ки, относящиеся к WSH в моей системе имеют версию 5.8.9600.16384. jscript.dll - библиотека, отвечающая за одноимённый скриптовый язык, той же версии, и соответствует, как говорилось выше ECMAScript-262 3rd edition / JavaScript 1.5.
    Путём вышеописанных манипуляций с реестром мы смогли задействовать более новый движок Chakra, завязанный на установленную в систему библиотеку jscript9.dll, которая не смотря на цифру 9 в своём названии имеет версию 11.00.9600.18347, которая в свою очередь, соответствует установленной версии Internet Explorer. Известно, что этот браузер начиная с 9-й версии поддерживает ES5. По крайней мере для 11-й это даже не обсуждается. При этом, по какой-то причине, при вызове по WSH новые методы не работают. Также, специально оговорюсь, что нет сомнений в том, что подключилась именно Chakra, т.к. выводил результат функций ScriptEngineMajorVersion() + ScriptEngineMajorVersion() + ScriptEngineBuildVersion() - всё верно, отрабатывает именно 11-я версия. Тем не менее не выходит каменный цветок ((
     
    Но в виду наличия здравой (в основном) настырности и нежелания "проигрывать", пришлось-таки найти выход.
    По мотивам этого поста (ахтунг! - японский) и с использованием кода из JScriptExtender в скрипт для TP был имплантирован ES5-shim, добавляющий те самые искомые методы. При этом JSON и "some additional functions" добавлять не стал за ненадобностью.
     
    Дополнительным бонусом такого решения является то, что шим можно использовать и со старой версией JScript, если кому в лом возиться с подключением Chakra - новые методы будут работать. Но, всё-таки Chakra лучше хотя бы потому, что быстрее в два раза.
     
    Запостил на pastebin код, чтоб не потерялось.
    Вычлененный ES5 Methods shim (src)
    Он же в сжатом виде (min).
    Код для подключения в TP с целью тестирования. В скрипте тестируются новые методы с выводом результата в alert.
     
    TextPipe JScript ES5 filter - скрипт шаблон, готовый для написания вашего кода обработки. Можно назначить по умолчанию для текущего скриптового языка, нажав кнопку "Set default". Повторюсь, использование Chakra факультативно.
     
    Еще, наверное, нужно отметить, что патчинг методов происходит только при первом запуске скрипта в рамках одной обработки ("job"). Т.е. не нужно переживать, что шим будет запускаться на каждой строке обрабатываемого текста.

     
    EDIT 2
     
    Нашёл гораздо более компактный и, по всей видимости, более быстрый шим - augment.js. Для наших целей - то, что нужно.
    Новый шаблон для TP - TextPipe JScript ES5-augment filter

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 12:41 06-07-2017 | Исправлено: Romul81, 02:11 08-07-2017
    SFC



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Спс
     
    а возможно ли без скриптов, в синтаксисе TP решить такую задачу:
     
    Один фильтр:  
    первое встреченное в строке слово TAB заменить на знак табуляции. последующие слова TAB в этой строке игнорировать.
     
    Второй фильтр:
    если в строке нет слова TAB то заменить на знак табуляции первое встреченное  
     в этой строке слово NOTAB. последующие слова NOTAB в этой строке игнорировать.

    ----------
    [ offline ]

    Всего записей: 1669 | Зарегистр. 21-01-2003 | Отправлено: 08:10 07-07-2017 | Исправлено: SFC, 08:10 07-07-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SFC
     
    Если я правильно понял задачу, то можно.  
    Фильтр
    Предполагается, что слова TAB и NOTAB отдельностоящие, т.е. находятся по \b(?:NO)?TAB\b.

    Всего записей: 1329 | Зарегистр. 03-03-2008 | Отправлено: 10:13 07-07-2017 | Исправлено: Romul81, 10:14 07-07-2017
    Открыть новую тему     Написать ответ в эту тему

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

    Компьютерный форум Ru.Board » Компьютеры » Программы » TextPipe


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru