Author Topic: Редактировать последнюю строку, если она есть!  (Read 1664 times)

0 Members and 1 Guest are viewing this topic.

SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Пример:
Молоко
Сахар
Сметана
Творог (1)

Если не найдена строчка творог, то создается новая строчка в тексте и пишется слово Творог (1). Если данная строчка найдена, то Творог (1) заменяется на Творог (2). Затем Творог (3) и далее на одно число больше.

Есть нюансы. Творог не всегда на 4 строчке и может находиться хоть на 20-й, но всегда в последней.

Все, что я умею сделать.
Code: (clickermann) [Select]
KEYDOWN (#CTRL)
WAITMS (50)
KEYPRESS (#C)
KEYUP (#CTRL)
$a = FROMCLIP()
WAITMS(50)
#DEFINE EOL: CHAR(13), CHAR(10)
$b = STRCONCAT($a, EOL, "Творог (1)")
WAITMS(50)
TOCLIP($b)
KEYDOWN (#CTRL)
WAITMS (50)
KEYPRESS (#V)
KEYUP (#CTRL)

Но этот скрипт создает всегда последнюю строчку Творог (1), даже если такая строчка уже есть. Это не устраивает.
Молоко
Сахар
Сметана
Творог (1)
Творог (1)
Творог (1)
Творог (1)
Творог (1)

Должно быть так:
Молоко
Сахар
Сметана
Творог (5)

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Вариант:
Для теста копируем в буфер текст (без творога):
Молоко
Сахар
Сметана


Запускаем скрипт и смотрим в логе, как меняется буфер.

Code: (clickermann) [Select]
$substr = "Творог" // что ищем
#DEFINE EOL: CHAR(13), CHAR(10)
$a = FROMCLIP()
//--------------------------------
IF(STRPOS($a, STRCONCAT(EOL, $substr)) = 0)
   TOCLIP(STRCONCAT($a, EOL, STRCONCAT($substr, " (1)")))
ELSE
   $count = INT(STRFILTER(STRCUT2($a, STRPOS($a, STRCONCAT(EOL, $substr)) + 2, STRLEN($a)), "1234567890", 1)) + 1
   TOCLIP(STRCONCAT(STRCUT2($a, 1, STRPOS($a, STRCONCAT(EOL, $substr)) - 1), EOL, $substr, " (", $count, ")"))
END_IF
//--------------------------------
LOGCLEAR
LOGWRITE (FROMCLIP())
WAIT(1)