vb6, почему не работает функция?!

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Ответить
green8666
Сообщения: 6
Зарегистрирован: 16 ноя 2008, 20:55

16 ноя 2008, 21:06

Привет всем! подскажите почему не работает эта функция?





Public Function myReplace(A As String, B As String, C As String) As String

Dim myA As String
Dim myB As String
Dim Number As Integer
Dim Stroka As String
myA = A
myB = B


Do
Number = InStr(1, LCase(myA), LCase(myB))
If Number = 0 Then
Exit Do
End If
Stroka = Left(A, Number - 1) + C + Right(A, Len(A) - Number)

Loop
myReplace = Stroka

End Function
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

17 ноя 2008, 09:06

Во-первых, команда

Stroka = Left(A, Number - 1) + C + Right(A, Len(A) - Number)

не производит замену B, на С, а только вставляет С перед найденой подстокой В.
Вы бы написали, что таки Вам надо сделать, какой ожидается результат? А то сиди, гадай тут... Если нужна замена, то длина правого "хвостика" от А должна быть Len(A)-Number-Len(B)+1

Во-вторых, на следующей итерации цикла Вы теряете результат предыдущей. Сделайте хотя бы A=... а не Stroka=...

Т.е. если должна выполняться замена всех вхождений В на С, то эта функция не работает, потому что и не должнаработать ;)
green8666
Сообщения: 6
Зарегистрирован: 16 ноя 2008, 20:55

18 ноя 2008, 01:23

Naeel Maqsudov писал(а):Во-первых, команда

Stroka = Left(A, Number - 1) + C + Right(A, Len(A) - Number)

Вообще да нужна замена символов еще фишка в том что с циклом do vb6 виснет, а вот, если делать тоже самое с циклом for, то все нормально, спасибо за подсказку с правым хвостиком! :rolleyes:
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

18 ноя 2008, 12:05

Естественно виснет!
Я же говорю, что каждый раз у Вас берется переменная А с все тем же исходным значением!
Соответственно каждый раз находися все то же самое первое вхождение в исходной строке A и заменяется. Результат кладется в Stroka. И так по кругу.

Сделайте не Stroka=... а A=... (Ну и результат будет возвращаться myReplace=A)
green8666
Сообщения: 6
Зарегистрирован: 16 ноя 2008, 20:55

20 ноя 2008, 02:51

Naeel Maqsudov писал(а):Естественно виснет!

Сделайте не Stroka=... а A=... (Ну и результат будет возвращаться myReplace=A)

Вот что у меня получилось


Public Function myReplace(A As String, B As String, C As String) As String

Dim myA As String
Dim myB As String
Dim Number As Integer

myA = A
myB = B


Do
Number = InStr(1, LCase(myA), LCase(myB))
If Number = 0 Then
Exit Do
End If

A = Left(A, Number - 1) + C + Right(A, Len(A) - Number - Len(C))
myA = A
Loop
myReplace = A

End Function




Сапасибо за помощь, вроде работает!!!
Вообще я верстальщик, верстаю в InDesign cs3
там есть функция помещать текст с тегами. вот пример


<ASCII-WIN>
<vsn:2.000000><fset:InDesign-Roman><ctable:=<Black:COLOR:CMYK:Process:0.000000,0.000000,0.000000,1.000000>>
<dps:TV-Kanal=<Nextstyle:TV-Kanal>>
<dps:TV-Day=<Nextstyle:TV-Day>>
<dps:TV-Text=<Nextstyle:TV-Text>>
<pstyle:TV-Day><0x041F><0x043E><0x043D><0x0435><0x0434><0x0435><0x043B><0x044C><0x043D><0x0438><0x043A>, 24 <0x043D><0x043E><0x044F><0x0431><0x0440><0x044F>


в примере написано "Понедельник, 24 ноября"

Что это за кодировка и как с ней бороться, я единственное понял что это "0x041F" есть буква "П" ну и тд. Как конвертировать текст в эту кодировку, может быть есть по этому поводу какая то литература, подскажите пожалуйста.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

29 ноя 2008, 22:34

Это UNICODE.
Как Ваш второй вопрос связан с первым? Эсли это разные темы, давайте я их разделю по соответствующим тематике разделам.
green8666
Сообщения: 6
Зарегистрирован: 16 ноя 2008, 20:55

01 дек 2008, 22:16

Я только за!
Разделите эти темы.
И спасибо за ответ теперь знаю в каком ключе искать, если сам найду, на пишу сюда обязательно.
Ответить