поиск и замена

Russian main discussion
  • Author
  • Message
Offline
Posts: 4
Joined: Sat Feb 23, 2013 1:23 pm

Post 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)\
Помогите мне пожалуйста справиться каким-нибудь образом, до этого я тратил прилично времени на тупую замену построчно

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Re: please, help

Post by DV »

i0n0ff,
пользуясь этим же плагином с использованием регулярных выражений, несложно подобрать регулярное выражение для поиска, которое в данном случае выглядит как

Code: Select all

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

Offline
Posts: 4
Joined: Sat Feb 23, 2013 1:23 pm

Re: please, help

Post by i0n0ff »

DV wrote:i0n0ff,
пользуясь этим же плагином с использованием регулярных выражений, несложно подобрать регулярное выражение для поиска, которое в данном случае выглядит как

Code: Select all

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

Code: Select all

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

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post 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

Offline
Posts: 4
Joined: Sat Feb 23, 2013 1:23 pm

Post by i0n0ff »

Instructor
upd: спасибо, я не понял код, но похоже работает хорошо

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

Post by KDJ »

i0n0ff
Try this:

Code: Select all

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

Offline
Posts: 4
Joined: Sat Feb 23, 2013 1:23 pm

Post by i0n0ff »

KDJ
Instructor

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

Offline
Posts: 9
Joined: Fri Nov 13, 2009 11:44 am

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

Post by Fetser »

Добрый день подскажите пожалуйста оптимальное решение пакетной замены текста в большом количестве файлов.
1 Обычная замена с регулярными выражениями работает на ура, но пар замены достаточно много и утомительно их менять.
2 Макросы оказывается не всегда работают на разных компьютерах и писать под каждый компьютер тоже утомительно.
3 Скрипт SearchReplace похоже имеет другой синтаксис и то что срабатывает в обычной замене не хочет работать в скрипте и опять же как сделать пакетную замену кусков текста я не нашёл.

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

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post 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;
}

Offline
Posts: 9
Joined: Fri Nov 13, 2009 11:44 am

Post 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;
}
Спасибо огромное - работает отлично

Offline
Posts: 5
Joined: Sun Apr 21, 2013 10:52 am

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

Post by klopus »

Всем привет.
Столкнулся с такой проблемой:

имею

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

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

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

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

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

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

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

Post 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</Тег>

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

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

Offline
Posts: 5
Joined: Sun Apr 21, 2013 10:52 am

Post by klopus »

а как на счет Vba? он с ним работает?

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

Post by opk44 »

klopus wrote:а как на счет Vba? он с ним работает?
С VBA он точно не работает.
Если же Вы имели в виду VBS, то это что, киберспорт такой - писать на двух языках одновременно, а не поочередно?
Post Reply