Author Topic: Cyclical replacement rows  (Read 618 times)

Offline RusDS_1

  • Newbie
  • *
  • Posts: 4
  • Karma: +0/-0
    • View Profile
Cyclical replacement rows
« on: March 19, 2017, 03:53:51 am »
Please help me.
How to replace in the files, duplicates rows of every 15 (14 lines does not require replacement) and provided that the text in the line up before (or without replacement) has certain conditions.


Offline alex

  • Developer
  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2171
  • Karma: +37/-3
    • View Profile
    • HippoEDIT
Re: Cyclical replacement rows
« Reply #1 on: March 19, 2017, 04:22:12 pm »
Hi,

probably I would need an example of what you want to do, to understand your question better.

Do you want to replace it in files or in the opened document?

From what I got from your question, I feel it would be rather difficult to achieve this, using standard functionality, but maybe one can define a proper regular expression for that... Give an example and I would try to help.

Best regards,
Alex.
P.S.: And while you already writing in Russian branch, you may do it in Russian ;)

Offline RusDS_1

  • Newbie
  • *
  • Posts: 4
  • Karma: +0/-0
    • View Profile
Re: Cyclical replacement rows
« Reply #2 on: March 19, 2017, 07:53:41 pm »
Ok.
Здравствуйте.
Необходимо обрабатывать множество файлов.
Значения будут разные, но замена будет однотипная.
Ex.:
Code: [Select]
+1
F.
D12 Zdev
+1
+2
F.
+3
D12 Zdev
+4
+5
D12 Zdev
F.
+1
+2
D12 Zdev
+3
+4
+5
D12 Zdev
+1
+2
..
F.
Требуется заменять D12 Zdev на D12 в каждой 15 строке по счету, в которой есть D12 Zdev  (11-16-2050.. в зависимости от кода, цикличность разная)
При условии что в строке выше имеется значение +5 или меньше то замена не производится.
Последняя строка в коде со значением  D12 Zdev всегда меняется.
До сих пор все это делается  при помощи макросов. Во избежании ошибок, единично в каждом файле.
Программа позволяет работать в пакетном режиме.
НО при запуске на исполнение меняются все значения. Макрос не понимает конец файла и рекурсию для последнего значения.
Приходится подсчитывать количество замен и указывать в ручную число исполнений цикла.

Offline alex

  • Developer
  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2171
  • Karma: +37/-3
    • View Profile
    • HippoEDIT
Re: Cyclical replacement rows
« Reply #3 on: March 19, 2017, 10:28:36 pm »
Привет,

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

Я сомневаюсь, что это будет просто сделать и с макросом. Потому как обработать что в предыдущей строке стоит +n, где n > 5 макрос не сможет.
Так что сделать это правильно можно только скриптом. Я набросал основу, Вы же уже подправьте как надо:
Code: Javascript
  1. #include "he_utils.js"  // generic helper functions
  2.  
  3. // constants
  4. var OFN_ALLOWMULTISELECT     = 0x00000200;
  5.  
  6. var output = Application.Output();
  7. output.clear(); // clean output from old text
  8.  
  9. var sFind = Application.prompt("Enter value to search");
  10. var sReplace = Application.prompt("Enter new value");
  11. var files = ax2js(Application.SelectFiles(true, "", "", OFN_ALLOWMULTISELECT));
  12.  
  13. for (var i = 0; i < files.length; i++){
  14.         output.writeln("Processing " + files[i] + "...");
  15.         var doc = Application.OpenFile(files[i]);      
  16.         var matches = doc.FindAll("^" + sFind, eFindRegexp);
  17.         if ( matches ) {               
  18.                 for (var n = 1; n <= matches.Count; n++) {
  19.                         if ( (n % 15) == 0 || n == matches.Count) {
  20.                                 var sPrevLine = "";
  21.                                 if ( matches[n].Top) {
  22.                                         sPrevLine = doc.GetLine(matches[n].Top - 1);
  23.                                 }
  24.                                 if ( parseInt(sPrevLine.match(/\+\d+/)) > 5) {
  25.                                         doc.ReplaceText(matches[n], sReplace);
  26.                                 }              
  27.                         }
  28.                 }              
  29.         }
  30. }

Детали по Scripting API можно найти на wiki:
http://wiki.hippoedit.com/scripting/start

С уважением,
Алекс.

Offline RusDS_1

  • Newbie
  • *
  • Posts: 4
  • Karma: +0/-0
    • View Profile
Re: Cyclical replacement rows
« Reply #4 on: March 19, 2017, 10:49:59 pm »
Спасибо Уважаемый alex.
Скрипт пустим в работу.

А шел какой то под скрипты удобный есть?
Для одно кнопочной замены.
Значения И условия на замену разные бывают.
Необходим не сложный инструмент для персонала, по самостоятельной обработке файлов.

Offline alex

  • Developer
  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2171
  • Karma: +37/-3
    • View Profile
    • HippoEDIT
Re: Cyclical replacement rows
« Reply #5 on: March 19, 2017, 11:22:29 pm »
Шел для скипта - это HippoEDIT. Скрипт выполеяется самим редактором и использует его API.
При желании и без особых трудов, это все можно вызывать через кнопку на тулбаре и обернуть в плагин для простого распространения.

Если же надо что то без редактора, то можно делать для cscript (Windows Scripting Host) и использовать с его API. Что там есть по обработке файлов я не знаю. Можно наверное и PowerShell. Либо Auto It / Auto Hotkey, если можно что то ставить на машины.

Offline RusDS_1

  • Newbie
  • *
  • Posts: 4
  • Karma: +0/-0
    • View Profile
Re: Cyclical replacement rows
« Reply #6 on: March 20, 2017, 02:03:17 am »
Спасибо. Понято.
Это временная мера.
В работе два компилятора. Старая и новая версия.
Которые дают разные значения переменных на выходе. Их то и необходимо в дежурном режиме менять. Но не все, а часть.
На днях доделаем построцессы и все будет штатно на выходе, как задумано.
Программа Hippo понравилась.
Мощный и простой инструмент.


Offline alex

  • Developer
  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2171
  • Karma: +37/-3
    • View Profile
    • HippoEDIT
Re: Cyclical replacement rows
« Reply #7 on: March 20, 2017, 01:36:54 pm »
Пользуйтесь на здоровье ;)
Если будут вопросы пр скриптингу - помогу чем смогу.