PDA

Просмотр полной версии : vb6, почему не работает функция?!



green8666
16.11.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
17.11.2008, 09:06
Во-первых, команда

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

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

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

Т.е. если должна выполняться замена всех вхождений В на С, то эта функция не работает, потому что и не должнаработать ;)

green8666
18.11.2008, 01:23
Во-первых, команда

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


Вообще да нужна замена символов еще фишка в том что с циклом do vb6 виснет, а вот, если делать тоже самое с циклом for, то все нормально, спасибо за подсказку с правым хвостиком!:rolleyes:

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

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

green8666
20.11.2008, 02:51
Естественно виснет!

Сделайте не 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.00000 0,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
29.11.2008, 22:34
Это UNICODE.
Как Ваш второй вопрос связан с первым? Эсли это разные темы, давайте я их разделю по соответствующим тематике разделам.

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