Тема: AHK: Поиск недостающей кавычки
И снова приветствую почтенное форумное сообщество!
Автоматизация редактуры текста идет полным ходом. Задумал написать скрипт, который вместо меня будет внимательно следить за популяцией кавычек в каждом конкретном тексте. Получился вот такой кусочек кода (наверняка кривоват, но работает):
F1::
{
clipboard =
SendInput ^a
SendInput ^c
ClipWait
RegExReplace(Clipboard, "«", "«", var1Count)
RegExReplace(Clipboard, "»", "»", var2Count)
diff1 := (var1Count-var2Count)
if diff1 < 0
{
MsgBox Пропущена «
}
if diff1 > 0
{
MsgBox Пропущена »
}
if diff1 = 0
{
MsgBox Кавычки в порядке
}
return
}
Недостаток его в том, что отсутствующую кавычку приходится искать вручную по всему тексту, то есть, к примеру, если пропущена закрывающая, приходится отсматривать все подряд открывающие. Это, конечно, долго.
Думал-думал, что можно учудить здесь, и пришла в голову вроде бы светлая мысль разбить текст, находящийся в буфере обмена, на куски (абзацы, `n) и производить поиск, обозначенный выше, именно в каждом куске по отдельности, а потом абзац, в котором количество открывающих и закрывающих кавычек не будет совпадать, вывести в сообщении. Но вот как это реализовать... Додумался до вот такого варианта:
F1::
{
clipboard =
SendInput ^a
SendInput ^c
ClipWait
for index, Paragraph in StrSplit(Clipboard, "`n")
if RegExReplace(Paragraph, "«", "«", var1Count) <> RegExReplace(Paragraph, "»", "»", var2Count) ; типа если количество открывающих кавычек не равно количеству закрывающих и наоборот
{
MsgBox, % "Элемент " Paragraph " искомый "
}
else
{
MsgBox, Ошибка
}
}
На тестовом тексте вида
«Один абзац
«Второй абзац»
Третий абзац»
Четвертый абзац
данный код выдает "Ошибка" пять раз подряд (даром что абзацев четыре).
Пробовал подобное же организовать с помощью InStr:
F1::
{
clipboard =
SendInput ^a
SendInput ^c
ClipWait
for index, Paragraph in StrSplit(Clipboard, "`n")
if InStr(Paragraph, "«") != InStr(Paragraph, "»")
{
MsgBox, % "Элемент " Paragraph " искомый "
}
else
{
MsgBox, Ошибка
}
}
– выдает сначала три абзаца в качестве искомых, то есть включая тот, где кавычки в полном порядке, и еще два окна с "Ошибка".
Пробовал через Loop, parse сделать, но тут тем более не понял, как обратиться к элементу массива, через A_LoopField не получается почему-то.
Помогите, пожалуйста, довести до ума скрипт, желательно как можно проще, чтобы я смог понять. Заранее спасибо, конечно!