Появилась задача - как заменить кавычки на ёлочки, для более красивого отображения текста? Для начала определим алгоритм по которому будем заменять. Я выбрал достаточно простой: ищем кавычку, заменяем ее на левую ёлочку("«"), далее ищем следующую кавычку и закрываем ёлочки "»". Самый легкий способ это написать цикл, пробегаться по символам и искать кавычки. Но я решил написать иначе, без цикла. Нет, не через регулярные выражения. Но алгоритм будет работать по моему мнению не хуже. Я буду использовать конструкцию "GoTo". Да-да, то что многие ненавидят и обсуждают как плохой тон программирования. Я считаю - зря, иногда можно использовать.
Сам алгорим поиска и замены кавычек:
-
Определяем метку - на какую кавычку будет заменять(открывающую или закрывающую)
-
Ищем есть ли вхождение кавычки(через "InStr")
-
Если есть, заменяем найденную кавычку на елочку, в зависимости от метки
-
Меняем метку и возвращаемся обратно к поиску кавычки
-
Возвращаем замененный текст
Public Function Replace_Quotes(m As String) As String
Dim lqout As Boolean = True
Dim s As Integer = 0
1:
s = InStr(m, """")
If s > 0 Then
If lqout = True Then
m = Mid(m, 1, s - 1) & "«" & Mid(m, s + 1, m.Length)
lqout = False
GoTo 1
Else
m = Mid(m, 1, s - 1) & "»" & Mid(m, s + 1, m.Length)
lqout = True
GoTo 1
End If
End If
Return m
End Function
'Использование
text=Replace_Quotes(text)
В данном случае замену производил посредством сцепления строк до кавычки, сами ёлочки и текста после кавычки. Если необходимо заменять кавычки на сайте, то можно символы заменять на "«" и "»".
Если вы не намерены использовать "GoTo", то используете "Do while", код функции ниже.
Public Function Replace_Quotes(m As String) As String
Dim lqout As Boolean = True
Dim s As Integer = 0
s = InStr(m, """")
Do While s > 0
s = InStr(m, """")
If s > 0 Then
If lqout = True Then
m = Mid(m, 1, s - 1) & "«" & Mid(m, s + 1, m.Length)
lqout = False
Else
m = Mid(m, 1, s - 1) & "»" & Mid(m, s + 1, m.Length)
lqout = True
End If
End If
Loop
Return m
End Function
'Использование
text=Replace_Quotes(text)
Второй способ замены кавычек
Есть более простой способ заменить, всего лишь в одну строку
Public Function Replace_Quotes(m As String) As String
m = m.Replace(" """, " «").Replace("""", "»")
Return m
End Function
Алгоритм через Replace, минус его только в том, что если исходный текст будет например таким:
«text text ("text")», то код сработает не так как нужно.