Page 12 of 29

Posted: Sat Feb 23, 2013 2:08 pm
by i0n0ff
продублировано из другого топика в QSearch плагине:

неужели нет в плагине возможности заменить найденное??

есть плейлисты, не стану вдаваться в подробности: формат m3u, не буду описывать, что внутри - все понятно и так по примеру:

Code: Select all

D:\!m\"artist name"\"year - album name"\"track number" - "title"."mp3/flac/..."
пример (предположим, тут разные трэки и альбомы и т.д.):
D:\!m\The XX\2009 - XX (CD 1)\01. Intro.flac
D:\!m\The XX\2009 - XX (CD 1)\01. Intro.flac
D:\!m\The XX\2009 - XX (CD 1)\01. Intro.flac
я как можно проще сформулирую, пропуская все остальное: мне нужно изменить в плейлисте:

Code: Select all

D:\!m\The XX\2009 - XX (CD 1)\01. Intro.flac
на
D:\!burned\some folder\01. Intro.flac
то есть все что остается, это только наименования файла, ну и локальный диск в данном случае (что не важно). меняются папки.
----
в этом плагине выделить то, что мне нужно легко:

Code: Select all

\!m\\The XX\\*\\
то есть таким образом, он выделяет "!m\The XX\2009 - XX (CD 1)\" и что важно для меня, не выходит в поиске за строчку, т.е. в случае

Code: Select all

D:\!m\The XX\01. Intro.flac
он бы пропустил, а не взял полторы строчки, как это делает например microsoft word (чего не удалось мне избежать)
---
так как мне теперь заменить выделенное на одно единственное значение??? эта же "функция" в обычном поиске/замене по неясной мне причине (это не значит, что причина не очевидна, я не разбираюсь совсем) не так работает со звездочкой, т.е. выделяет только:

Code: Select all

!m\The XX\
вместо
!m\The XX\2009 - XX (CD 1)\
Помогите мне пожалуйста справиться каким-нибудь образом, до этого я тратил прилично времени на тупую замену построчно

Re: please, help

Posted: Sat Feb 23, 2013 3:04 pm
by DV
i0n0ff,
пользуясь этим же плагином с использованием регулярных выражений, несложно подобрать регулярное выражение для поиска, которое в данном случае выглядит как

Code: Select all

d:\\!m\\.+\\.+\\
Далее вызываем диалог замены и используем в нём это регулярное выражение, не забыв установить соответствующую галочку.
По регулярным выражениям крайне рекомендую почитать в таком неожиданном месте, как Справка - Руководство.

Re: please, help

Posted: Sat Feb 23, 2013 3:11 pm
by i0n0ff
DV wrote:i0n0ff,
пользуясь этим же плагином с использованием регулярных выражений, несложно подобрать регулярное выражение для поиска, которое в данном случае выглядит как

Code: Select all

d:\\!m\\.+\\.+\\
Далее вызываем диалог замены и используем в нём это регулярное выражение, не забыв установить соответствующую галочку.
По регулярным выражениям крайне рекомендую почитать в таком неожиданном месте, как Справка - Руководство.
супер, спасибо большое. осталось пожелание - если возможность сделать проверку на конец строки??

Code: Select all

\\.+\\.+\\
чтоб не скакал по строчкам? в таком случае было бы просто идеально. сэкономоило бы тучу времени

Posted: Sat Feb 23, 2013 4:49 pm
by Instructor
i0n0ff wrote:я как можно проще сформулирую, пропуская все остальное: мне нужно изменить в плейлисте:

Code: Select all

D:\!m\The XX\2009 - XX (CD 1)\01. Intro.flac
на
D:\!burned\some folder\01. Intro.flac
Стандарный диалог замены:

Code: Select all

Что: ^.*([^\\]+)$
Чем: some folder\\\1

Posted: Sun Feb 24, 2013 3:56 pm
by i0n0ff
Instructor
upd: спасибо, я не понял код, но похоже работает хорошо

Posted: Sun Feb 24, 2013 4:27 pm
by KDJ
i0n0ff
Try this:

Code: Select all

What: ^([^\n]*\\)[^\n]+(\\[^\n\\]*)$
With: \1!burned\\some folder\2

Posted: Sun Feb 24, 2013 4:53 pm
by i0n0ff
KDJ
Instructor

эксперементировал, оба варианта работают идеально, спасибо Вам
во втором варианте есть еще привязка к локальному диску, в моем случае это конечно лишнее, хотя как правило б роли не играли. спасибо еще раз большое

Пакетная замена

Posted: Wed Mar 06, 2013 2:51 pm
by Fetser
Добрый день подскажите пожалуйста оптимальное решение пакетной замены текста в большом количестве файлов.
1 Обычная замена с регулярными выражениями работает на ура, но пар замены достаточно много и утомительно их менять.
2 Макросы оказывается не всегда работают на разных компьютерах и писать под каждый компьютер тоже утомительно.
3 Скрипт SearchReplace похоже имеет другой синтаксис и то что срабатывает в обычной замене не хочет работать в скрипте и опять же как сделать пакетную замену кусков текста я не нашёл.

Может кто подскажет в какую сторону копать?

Posted: Thu Mar 07, 2013 6:36 am
by Instructor
Fetser
Шаблон скрипта для множественной замены во всех открытых документах (MDI/PMDI):

Code: Select all

var hMainWnd=AkelPad.GetMainWnd();
var lpFrameInit;
var lpFrameCur;

//Initial MDI frame
lpFrameInit=AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
lpFrameCur=lpFrameInit;

for (;;)
{
  AkelPad.TextReplace(0, "FindIt1", "ReplaceWith1", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);
  AkelPad.TextReplace(0, "FindIt2", "ReplaceWith2", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);
  AkelPad.TextReplace(0, "FindIt3", "ReplaceWith3", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);

  //Next MDI frame
  lpFrameCur=AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
  if (!lpFrameCur || lpFrameCur == lpFrameInit)
    break;
}

Posted: Thu Mar 07, 2013 9:41 am
by Fetser
Instructor wrote:Fetser
Шаблон скрипта для множественной замены во всех открытых документах (MDI/PMDI):

Code: Select all

var hMainWnd=AkelPad.GetMainWnd();
var lpFrameInit;
var lpFrameCur;

//Initial MDI frame
lpFrameInit=AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
lpFrameCur=lpFrameInit;

for (;;)
{
  AkelPad.TextReplace(0, "FindIt1", "ReplaceWith1", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);
  AkelPad.TextReplace(0, "FindIt2", "ReplaceWith2", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);
  AkelPad.TextReplace(0, "FindIt3", "ReplaceWith3", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);

  //Next MDI frame
  lpFrameCur=AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
  if (!lpFrameCur || lpFrameCur == lpFrameInit)
    break;
}
Спасибо огромное - работает отлично

Нужен совет по замене содержимого

Posted: Sun Apr 21, 2013 10:58 am
by klopus
Всем привет.
Столкнулся с такой проблемой:

имею

<Тег>0.354</Тег>

необходимо сделать замену на:

<Тег>0.4</Тег>

Пытался сделать как то так:

Менял <Тег>0.35*</Тег> на <Тег>0.4</Тег> получил <Тег>0.35*

Подскажите можно ли реализовать такие замены? Если можно то как?

Posted: Sun Apr 21, 2013 12:05 pm
by KDJ
klopus
Replace dialog.

Simply, without regular expressions:
What: <Тег>0.354</Тег>
With: <Тег>0.4</Тег>

With regular expressions:
What: (?<=<Тег>0\.)\d\d(\d)(?=</Тег>)
With: \1

This last will replace
<Тег>0.xyz</Тег>
(where x,y,z any digit 0-9)
with
<Тег>0.z</Тег>

Posted: Mon Apr 22, 2013 6:16 am
by Fr0sT
Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
Если же надо именно округлять числа, то поможет скрипт SearchReplace, там можно ставить собственную JS-функцию в качестве замены.

Posted: Mon Apr 22, 2013 8:35 am
by klopus
а как на счет Vba? он с ним работает?

Posted: Mon Apr 22, 2013 9:44 am
by opk44
klopus wrote:а как на счет Vba? он с ним работает?
С VBA он точно не работает.
Если же Вы имели в виду VBS, то это что, киберспорт такой - писать на двух языках одновременно, а не поочередно?