[CDR X4 и ранее] Замена кавычек " на «»

Юрий-2017-07

Участник
Топикстартер
Сообщения
5
Реакции
0
Прошу прощения, если вдруг в N-й раз задал этот вопрос. Но пролистал форум, ответа не нашел.
Задача следующая. В файле Corel Draw нужно заменить все прямые кавычки " (034) на типографские «» (171 и 187).
Нашел тут на форуме макрос, всё в нем мне понятно:

Sub textConvertKavichky()
Dim s As Shape, r As New ShapeRange
Set r = ActiveSelectionRange
For Each s In r
If s.Type = cdrTextShape Then
s.Text.Replace Chr(32) & Chr(34), Chr(32) & Chr(171), True, ReplaceAll:=True
s.Text.Replace vbCr & Chr(34), vbCr & Chr(171), True, ReplaceAll:=True
s.Text.Replace Chr(34) & Chr(32), Chr(187) & Chr(32), True, ReplaceAll:=True
s.Text.Replace Chr(34) & vbCr, Chr(187) & vbCr, True, ReplaceAll:=True
End If
Next s
End Sub

НО! Если кавычка стоит первым либо последним символом, она не меняется - что и понятно,
потому что замена идет по парам символов ПРОБЕЛ-КАВЫЧКА и КАВЫЧКА-ПРОБЕЛ.
Решение вижу в двух вариантах:

1) Если первый символ 034, меняем на 171
Если последний символ 032, меняем на 187
обрабатываем циклом

2) добавляем пробел в начале и конце
обрабатываем циклом
удалем пробелы TRIM

А теперь самое главное - и смешное: как это записать?! Visual Basic никогда не изучал, а интуитивно синтаксис не понял. Убил полдня.
 

Юрий-2017-07

Участник
Топикстартер
Сообщения
5
Реакции
0
опечатался - Если последний символ 034, меняем на 187
 

Gadalka

R.I.P.
Сообщения
2 530
Реакции
868
В настройках ставим использовать ёлочки в качестве кавычек и меняем 034 на 034
Потом для очистки совести меняем открывающую кавычку на 034 и закрывающую тоже на неё.

По крайней мере, в обычном поиске это когда-то работало, может и сейчас сработает.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А что мешает обычной заменой открывающие кавычки на двойные открывающие, закрывающие на двойные закрывающие поменять?
upload_2017-7-3_16-44-41.png
 

Юрий-2017-07

Участник
Топикстартер
Сообщения
5
Реакции
0
И открывающие, и закрывающие - один и тот же символ " (код 034). Т.е. есть "вот так", а нужно сделать «вот так»
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
upload_2017-7-3_16-45-33.png
 

Gadalka

R.I.P.
Сообщения
2 530
Реакции
868

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Проверил - таки не работает *(
 

Юрий-2017-07

Участник
Топикстартер
Сообщения
5
Реакции
0
Блин, можно, конечно, руками править, но там объем такой, что обязательно пропустишь
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Попробовать после строки
If s.Type = cdrTextShape Then
добавить строку
s.Text=chr(32) & s.Text & chr(32)
'hmmm'
 

carry

15 лет на форуме
Сообщения
2 632
Реакции
1 012
А такой трюк вот можно запрограммировать - все кавычки 034 заменить на 0171. А вторым проходом заменить каждые вторые на 0187?
 

lev

Модератор
20 лет на форуме
Сообщения
2 143
Реакции
2 066
Примерно так:
Код:
Sub textConvertKavichky()
  Dim s As Shape, r As New ShapeRange, st As String
  ActiveDocument.BeginCommandGroup "quotes"
  Set r = ActiveSelectionRange
  Set re = CreateObject("VBScript.RegExp")
  re.Global = True
  For Each s In r.Shapes.FindShapes(, cdrTextShape)
    st = s.Text.Story
    re.Pattern = "(\S)" & Chr(34)
    If re.Test(st) Then
      st = re.Replace(st, "$1" & Chr(187))
    End If
    re.Pattern = Chr(34) & "(\S)"
    If re.Test(st) Then
      st = re.Replace(st, Chr(171) & "$1")
    End If
    s.Text.Story = st
  Next s
  ActiveDocument.EndCommandGroup
End Sub
 
Последнее редактирование:
  • Спасибо
Реакции: Gadalka

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

Gadalka

R.I.P.
Сообщения
2 530
Реакции
868
Огромное спасибо!!!
Для этого в форуме специальная кнопка есть.

И учтите, что одиноко стоящую кавычку код @lev не цепляет. Поэтому после поищите оставшиеся кавычки. Просто на всякий случай.