Page 20 of 24

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

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

Posted: Tue May 17, 2016 1:32 am
by xneo
Доброго времени суток.
Есть ли возможность в скрипте брать данные из одного места в документе (после определенной комбинации символов) и подставлять в другое?
Вот для примера документ:
adasda=213
лотлдот=35
sss=
тексттексттекст
тексттексттексттексттекст
pppp=999
-------------------------Конец документа---------------------------

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

Posted: Tue May 17, 2016 11:44 am
by opk44
xneo
Этот скрипт уже написан и называется "SearchReplace.js". Аналог вашего случая описан и решён тут

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

Как-то так.

Posted: Wed May 18, 2016 1:56 am
by xneo
Спасибо. Но задача немного иная. У меня есть уже скрипт который в файле заменяет часть строк, но помимо замены нужно сделать перемещение данных как описано выше.
Может быть "SearchReplace.js" можно вызывать из моего скрипта с параметрами что и чем нужно заменить без создания диалоговых окон?
Диалоговые окна не нужны. предполагается пакетная обработка файлов.

Posted: Wed May 18, 2016 5:08 am
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);
  }
}

Posted: Wed May 18, 2016 8:44 am
by xneo
Thank You!

Posted: Wed May 18, 2016 6:27 pm
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);

Posted: Sun Jul 10, 2016 8:57 pm
by Lenchik
Запрос на скрипт.

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

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

Posted: Mon Jul 11, 2016 6:40 am
by Skif_off
Lenchik
EML New?

Posted: Tue Jul 12, 2016 5:15 pm
by Lenchik
Skif_off
Спасибо, наверное подойдёт, в следующий раз опробую.

Posted: Thu Jul 14, 2016 4:23 am
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 раз лучше и проще.

Posted: Thu Jul 14, 2016 9:05 pm
by Skif_off
Kley
Где же здесь автоматизация? :) AkelPad.InputBox() не сильно отличается от всё той же ручной модификации: смотрите сюда, вводите туда :) Вот взять выделенную строку

Code: Select all

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

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

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

Posted: Fri Jul 15, 2016 8:34 am
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
Простите пожалуйста. Просто хотел помочь, чем мог. Ждем профи?

Posted: Fri Jul 15, 2016 11:49 am
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 забрал, спасибо.

Posted: Fri Jul 15, 2016 3:16 pm
by Kley
Skif_off
Рефери? Секундантов?
Программеров :)