Замена подстроки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Замена подстроки

Сообщение Taras2 » 29.08.2003 (Пт) 16:39

Нужно сделать замену построки, так как это делает оператор s/// в перле. Подскажите, может где есть уже наработанные коды?
ЗЫ. Не хочется изобретать велосипед.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 29.08.2003 (Пт) 16:42

1. А как это делает опреатор s/// в Перле? (Это же форум перловцев или где?)

2. Может Replace() тебе допоможет?

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 29.08.2003 (Пт) 16:43

replace где,что,на_что

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 29.08.2003 (Пт) 17:02

replace где,что,на_что

Спасибо всем!

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 29.08.2003 (Пт) 17:47

Taras2 писал(а):
replace где,что,на_что

Спасибо всем!

Прогнал. Replace не то. Оператор s/// в качестве строки поиска содержит шаблон. Например: s/\s./Непоследний пробел/g;
ищет любой пробельный символ (пробел, табуляция, перевод строки) и стоящий за ним любой символ, и заменяет их на "Непоследний пробел".

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.08.2003 (Пт) 17:49

А, это уже regular expressions
Не помню, как библа называется.
RayShade знает :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 29.08.2003 (Пт) 17:56

Вот её фамилие
Stinga Regular Expression Library

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 29.08.2003 (Пт) 18:42

skiperski писал(а):Вот её фамилие
Stinga Regular Expression Library

А где её найти?

moderator
Модератор
Модератор
 
Сообщения: 1896
Зарегистрирован: 10.12.2001 (Пн) 18:11
Откуда: Украина, Харьков

Сообщение moderator » 29.08.2003 (Пт) 22:51

Taras2 писал(а):
skiperski писал(а):Вот её фамилие
Stinga Regular Expression Library

А где её найти?


В Google?
Модератор
http://www.vbstreets.ru / moderator@vbstreets.ru

... Почетные награды: [*], [+], [!]. Все еще впереди...

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 31.08.2003 (Вс) 16:03

skiperski писал(а):Вот её фамилие
Stinga Regular Expression Library

В общем платные они :? А бывае нужно то всего ничего. Вот сделал на основе like, может кому пригодиться.
ЗЫ. Сам не тестировал!!!!

Begin Regular.bas:
Код: Выделить всё
Attribute VB_Name = "Regular"
Private Enum OptComp
Text
Binary
End Enum

Private Enum OptionRepl
One
Globale
End Enum

Public Function Find(ByVal InputString, RegExpr As String, OptionCompare As OptComp, Optional ByVal Start As Long = 1, Optional ByRef StartPosition As Long, Optional ByRef LengthStr As Long) As Boolean
Rem Поиск шаблона в строке
 
  If (OptionCompare = Binary) Then
    Option Compare Binary
  Else
    Option Compare Text
  End If
  Find = False
  StartPosition = 0
  LengthStr = 0
  If (InputString <> "" And RegExpr <> "") Then
    For i = Start To Len(InputString)
      For j = Len(InputString) - i + 1 To 1 Step -1
        If (Mid(InputString, i, j) Like RegExpr) Then
          Find = True
          StartPosition = i
          LengthStr = j
          Exit Function
        End If
      Next j
    Next i
  End If
End Function

Public Function S(ByVal InputString, RegExpr, Replace As String, OptionCompare As OptComp, Optional ByVal Start As Long = 1, Optional OptionReplace As OptionRepl = One, Optional ByRef OutputStr As String = "") As Variant
Rem Замена совпавшего с шаблоном
Rem OptionReplace = One, замена только одного совпадения, результат Boolean
Rem OptionReplace = Globale, замена всех совпадений, результат кол-во замен
 
  If (OptionReplace = Globale) Then
    S = 0
    Do While (Find(InputString, RegExpr, OptionCompare, Start, StartFind, LengthFind))
      S = S + 1
      OutputStr = Mid(InputString, 1, StartFind - 1) & Replace & Mid(InputString, StartFind + LengthFind)
      InputString = OutputStr
      Start = StartFind + 1
    Loop
  ElseIf (Find(InputString, RegExpr, OptionCompare, Start, StartFind, LengthFind)) Then
    S = True
    OutputStr = Mid(InputString, 1, StartFind - 1) & Replace & Mid(InputString, StartFind + LengthFind)
  Else
    S = False
  End If
End Function

End Regular.bas

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 31.08.2003 (Вс) 17:47

Красаветсс, ведь могут же когда надо) надо бы потестить)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 17

    TopList