Помогите написать скрипт

Russian main discussion
  • Author
  • Message
YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

FeyFre wrote:дык перенос и таб - печатные. Управляющие - да, но печатные :)
1. Всегда предпочитаю вместо критиканства, если, конечно, есть уверенность и знания, предложить конструктив.
2. Показан способ, а детали можно корректировать.
3. Не вижу уточняющих вопросов от задавшего вопрос.
4.
Печатные символы — элементы набора символов, имеющие графическое представление, например в виде значка на бумаге или определённого рисунка на экране. Примерами печатных символов являются буквы, цифры, знаки препинания и псевдографические символы.

Вообще говоря, печатный символ это такой символ, при получении которого головка АЦПУ должна изобразить нечто на бумаге, после чего передвинуться на одну позицию вправо. Печатные символы противопоставляются управляющим символам, на которые устройства вывода текста должны реагировать иначе.
Т.е. исторически печатные символы не включают в себя управляющие и если они противопоставляются, то...

Offline
Posts: 3
Joined: Mon May 16, 2016 9:59 am

Post by xneo »

Доброго времени суток.
Есть ли возможность в скрипте брать данные из одного места в документе (после определенной комбинации символов) и подставлять в другое?
Вот для примера документ:
adasda=213
лотлдот=35
sss=
тексттексттекст
тексттексттексттексттекст
pppp=999
-------------------------Конец документа---------------------------

Нужно взять данные (999) после pppp= и подставить их после sss= что бы получилось:
adasda=213
лотлдот=35
sss=999
тексттексттекст
тексттексттексттексттекст
pppp=
-------------------------Конец документа---------------------------

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

xneo
Этот скрипт уже написан и называется "SearchReplace.js". Аналог вашего случая описан и решён тут

What: (sss=)([\s\S]*?)(pppp=)(\d+)
With: $1$4$2$3
Select: Regular expressions

Как-то так.

Offline
Posts: 3
Joined: Mon May 16, 2016 9:59 am

Post by xneo »

Спасибо. Но задача немного иная. У меня есть уже скрипт который в файле заменяет часть строк, но помимо замены нужно сделать перемещение данных как описано выше.
Может быть "SearchReplace.js" можно вызывать из моего скрипта с параметрами что и чем нужно заменить без создания диалоговых окон?
Диалоговые окна не нужны. предполагается пакетная обработка файлов.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

xneo

Code: Select all

var sText;
if (AkelPad.TextFind(0, "(?<=^sss=).*?$", 0x00280001 /*FRF_BEGINNING|FRF_REGEXP|FRF_DOWN*/) >= 0)
{
  if (AkelPad.TextFind(0, "(?<=^pppp=).*?$", 0x00280001 /*FRF_BEGINNING|FRF_REGEXP|FRF_DOWN*/) >= 0)
  {
    sText = AkelPad.GetSelText();
    AkelPad.ReplaceSel("");
    AkelPad.TextFind(0, "(?<=^sss=).*?$", 0x00280001 /*FRF_BEGINNING|FRF_REGEXP|FRF_DOWN*/);
    AkelPad.ReplaceSel(sText);
  }
}

Offline
Posts: 3
Joined: Mon May 16, 2016 9:59 am

Post by xneo »

Thank You!

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

xneo
Another version (shorter and faster):

Code: Select all

if (AkelPad.TextFind(0, "(^sss=).*?$(.*?^pppp=)(.*?$)", 0x00280001 /*FRF_BEGINNING|FRF_REGEXP|FRF_DOWN*/) >= 0)
  AkelPad.TextReplace(0, "(^sss=).*?$(.*?^pppp=)(.*?$)", "\\1\\3\\2", 0x00480001 /*FRF_SELECTION|FRF_REGEXP|FRF_DOWN*/, 0);
else if (AkelPad.TextFind(0, "(^pppp=)(.*?$)(.*?^sss=).*?$", 0x00280001 /*FRF_BEGINNING|FRF_REGEXP|FRF_DOWN*/) >= 0)
  AkelPad.TextReplace(0, "(^pppp=)(.*?$)(.*?^sss=).*?$", "\\1\\3\\2", 0x00480001 /*FRF_SELECTION|FRF_REGEXP|FRF_DOWN*/, 0);

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Запрос на скрипт.

По выделенной в файле дате (в разных форматах Insertdate.js или по маске insertDateTemplateExample.js) устанавливать дату создания или изменения файла (в текущей вкладке).

Как возникла идея:
Понадобилось тут у eml файлов поустанавливать дату из его содержимого. Пока буду врукопашную, но вообще хотелось бы автоматизировать.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Lenchik
EML New?

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Skif_off
Спасибо, наверное подойдёт, в следующий раз опробую.

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

Lenchik
Если Вы пользуетесь Total Commander, то:
1.
Ctrl+Q - просмотреть файл, найти нужную дату;
Меню Файлы->Изменить атрибуты... - изменяете дату на нужную (там можно создать шаблон).
2. Может быть Вы, как и я таскаете с собой NirCmd.exe:
Ком. строка: nircmd.exe setfiletime "c:\temp\myfile.txt" "24-06-2003 17:57:11" "22-11-2005 10:21:56" (creation time and modified time);

В AkelPad (на скорую руку, без проверки существования NirCmd.exe):

Code: Select all

// Arguments:
// -NirCmdPath="NirCmd\Path\NirCmd.exe"

var pNirCmdPath = AkelPad.GetArgValue("NirCmdPath", "");
var pEditFile = AkelPad.GetEditFile(0);
var pDate;
if (pEditFile && pNirCmdPath)
{
  if (pDate = AkelPad.InputBox(AkelPad.GetMainWnd(), "Изменение даты\\время", "Формат:\n24-06-2003 17:57:11;\n24/06/2003 17:57:11\n24/06/2003", "24/06/2003 17:57:11"))
    AkelPad.Exec('"' + pNirCmdPath + '" setfiletime "' + pEditFile + '" "' + pDate + '" "' + pDate + '"');
}


В AkelPad (без NirCmd.exe):

Code: Select all

var pEditFile;
var pDate;
if (pEditFile = AkelPad.GetEditFile(0))
{
  if (pDate = AkelPad.InputBox(AkelPad.GetMainWnd(), "Изменение даты\\время", "Формат:\n24.06.2003 17:57:11;\n24/06/2003 17:57:11\n24.06.2003", "24/06/2003 17:57:11"))
  {
    var pFileDir = AkelPad.GetFilePath(pEditFile, 1 /*CPF_DIR*/);
    var pFileName = AkelPad.GetFilePath(pEditFile, 2 /*CPF_FILENAME*/);
    var oShell = new ActiveXObject("Shell.Application");
    var oFolder = oShell.NameSpace(pFileDir);
    var oFolderItem = oFolder.ParseName(pFileName);
    oFolderItem.ModifyDate = pDate;
  }
}


p.s. Плагин "EML New" не пробовал. Может быть, с ним все в 1000 раз лучше и проще.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Kley
Где же здесь автоматизация? :) AkelPad.InputBox() не сильно отличается от всё той же ручной модификации: смотрите сюда, вводите туда :) Вот взять выделенную строку

Code: Select all

Date: Thu, 03 Nov 2005 13:42:39 +0300
распарсить и обновить отметки дат файла... (Думается, есть смысл менять все три.)

Поэтому плагин + файловый менеджер типа ТС предпочтительнее: плагин будет вытягивать дату, а файловый менеджер пакетом обработает всю пачку (Файл/Изменить атрибуты... в ТС).

P.S. DC, кажется, этого не умеет или не нашёл :(, напишу в хотелки.

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

Skif_off
Буду отбиваться :)
Вот взять выделенную строку

Code: Select all

Date: Thu, 03 Nov 2005 13:42:39 +0300
распарсить
Такую строку - да, легко, и парсить не надо. А если:
Lenchik wrote:в разных форматах Insertdate.js или...
Как парсить январь, січень или ינואר (иврит)?
есть смысл менять все три
Lenchik wrote:устанавливать дату создания или изменения файла
плагин + файловый менеджер типа ТС предпочтительнее
Lenchik wrote:По выделенной в файле дате... (в текущей вкладке).
Kley wrote:Плагин "EML New" не пробовал. Может быть, с ним все в 1000 раз лучше и проще.
Lenchik
Простите пожалуйста. Просто хотел помочь, чем мог. Ждем профи?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Kley wrote:Буду отбиваться :)
От чего? :) Веду речь о пакетной обработке:
Lenchik wrote:Понадобилось тут у eml файлов поустанавливать дату из его содержимого. Пока буду врукопашную, но вообще хотелось бы автоматизировать.
Ещё варианты для иных форматов: Script Content Plugin (только х32), WinScript Advanced, PCREsearch
Kley wrote:Как парсить январь, січень или ינואר (иврит)?
Обычно стандартизировано, если речь о конкретном формате или пачке файлов. Для локальных вариантов - GetDateFormat?
Kley wrote:
есть смысл менять все три
Lenchik wrote:устанавливать дату создания или изменения файла
Обе даты используются для сортировки в файловых менеджерах, что странно, да? :) К тому же с NirCmd вы меняете и то и другое вместо или, только добавить ещё

Code: Select all

+ '" "' + pDate + '"'
Так красивее :)
Kley wrote:
плагин + файловый менеджер типа ТС предпочтительнее
Lenchik wrote:По выделенной в файле дате... (в текущей вкладке).
Тем не менее, веду речь о пакетной обработке вместо врукопашную.
Kley wrote:Ждем профи?
Рефери? :) Секундантов? :) Вариант с NirCmd забрал, спасибо.

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

Skif_off
Рефери? Секундантов?
Программеров :)
Post Reply