Как выполнить условие?

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

Как выполнить условие?

Сообщение Elkatib » 08.06.2006 (Чт) 14:38

Имеем переменные:
d = "ABCDEFGHIJKLMNOP...ABCDEFGHIJKLMNOP"
s = "OPACHKI"
Надо:
Вырезать из строки (переменной d) символы, находящиеся между буквами "EFG" и буквой "M" и заменить их на переменную s (ну, по сути поменять на слово "OPACHKI"), причём в нашем слушаем эту операцию необходимо произвести столько раз, сколько встретять подобные интервалы (EFG и M)... в нашем случае оно встречается два раза.
Очень прошу помогите пожалуйста.
Заранее спасибо.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 08.06.2006 (Чт) 14:42

Нажать F2 и посмотреть на Replace...
А я все практикую лечение травами...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 08.06.2006 (Чт) 14:44

split, instr, mid, left, right и тд и тп


Код: Выделить всё
Dim arr() as string
dim i as integer

s="ABCDEFGHIJKLMNOP...ABCDEFGHIJKLMNOP"
arr=Split(s,"EFG")

for i=0 to ubound(arr)
Debug.Print arr(i)
next i
дальше сами все поймете :wink:

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 08.06.2006 (Чт) 14:50

Не понял, а не легче сначала найти подстроку (Instr) (в данном случае это "HIJKL"), а потом заменить ее Replace-ом?
А я все практикую лечение травами...

Elkatib
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 08.01.2006 (Вс) 17:52

Сообщение Elkatib » 08.06.2006 (Чт) 15:11

Konst_One писал(а):split, instr, mid, left, right и тд и тп


Код: Выделить всё
Dim arr() as string
dim i as integer

s="ABCDEFGHIJKLMNOP...ABCDEFGHIJKLMNOP"
arr=Split(s,"EFG")

for i=0 to ubound(arr)
Debug.Print arr(i)
next i
дальше сами все поймете :wink:

Видимо нет. :)
не канает... почему-то.

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 08.06.2006 (Чт) 15:29

dim s as string
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 08.06.2006 (Чт) 15:40

тогда продолжим :shock:


Код: Выделить всё

Public Function Replacer( _
    ByVal sInput As String, _
    Optional ByVal sReplaceFind As String = "OPACHKI", _
    Optional ByVal sFirstFind As String = "EFG", _
    Optional ByVal sNextFind As String = "M")

Dim arr() As String
Dim i As Integer
Dim s As String
Dim s1 As String
Dim j As Integer
Dim sResult As String

    sResult = ""
    arr = Split(sInput, sFirstFind)
   
    For i = 0 To UBound(arr)
        j = InStr(1, arr(i), sNextFind)
        If j > 0 Then
            s1 = sFirstFind & sReplaceFind & Mid$(arr(i), j)
        Else
            s1 = arr(i)
        End If
        sResult = sResult & s1
    Next i
   
    Replacer = sResult

End Function


Debug.Print Me.Replacer("ABCDEFGHIJKLMNOP...ABCDEFGHIJKLMNOP")

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 08.06.2006 (Чт) 15:42

Me можно убрать, просто у меня в форме это делалось

Elkatib
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 08.01.2006 (Вс) 17:52

Сообщение Elkatib » 08.06.2006 (Чт) 16:27

Огромное спасибо за помощь...

Блин, никогда бы не подумал, что я это сам смогу сделать...
Сам написал этот код...
Он конечно не такой изящный... ньюбовский, но работает вроде... ПОКА. :)

Код: Выделить всё
Dim d As String, q As String, x As Integer, bufer As String, virezat As String

Private Sub Form_Load()
d = "ABCDEFGHIJKL1MNOABCDEFGHIJKL2MNO"
x = 1
bufer = ""
virezat = ""
End Sub

Private Sub Command1_Click()
Do Until x = Len(d)
q = Mid$(d, x, 1)
MsgBox q
x = x + 1
If bufer = "EFG" Then
bufer = "EFG"
Else
bufer = bufer + q
End If
MsgBox "Буфер равен: " + bufer
If Len(bufer) = 3 And bufer <> "EFG" Then
bufer = Mid$(bufer, 2, 2)
End If
If bufer = "EFG" Then
virezat = virezat + q
If q = "M" Then
MsgBox Mid$(virezat, 2, Len(virezat) - 2)
bufer = Mid$(bufer, 2, 2)
virezat = ""
End If
End If
q = ""
Loop
End Sub

В vireazat оказывается нужный набор символов. :)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 08.06.2006 (Чт) 16:30

:)
вот так и надо сразу было - голова боится, а руки делают

Elkatib
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 08.01.2006 (Вс) 17:52

Сообщение Elkatib » 08.06.2006 (Чт) 22:48

Блин, ещё вопросик появился... как проверить, если в строке буква.
Например, d="546333333923645A564333333"
Имеем букву "A".
Как проверить состоит ли строка только из цифр или в ней по мимо цифр есть ещё что-то???

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 08.06.2006 (Чт) 23:20

Код: Выделить всё
Private Sub Form_Load()
   
    'Замена
    MsgBox Replace("123456", "123", "abc")
   
    'Проверка на допустимые символы
    If Check("1234567890s", "1234567890") Then
        MsgBox "В строке присутствует недопустимый символ"
    End If
End Sub

Function Check(String1 As String, String2 As String) As Boolean
    For N = 1 To Len(String1)
        If InStr(1, String2, Mid(String1, N, 1)) = 0 Then
            Check = True
            Exit Function
        End If
    Next
End Function


Я тут накалякал на ночь глядя. :roll: Мож подойдёт ?

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 09.06.2006 (Пт) 3:25

Код: Выделить всё
    s = "1234567890A0987654321B1234567890"
    For i = 1 To Len(s)
        If CVar(Mid$(s, i, 1)) >= 0 And CVar(Mid$(s, i, 1)) <= 9 Then
            Debug.Print "Число"
        Else
            Debug.Print "Символ " & Trim(i) & " " & Mid$(s, i, 1)
        End If
    Next i
Бороться и искать, найти и перепрятать!

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 09.06.2006 (Пт) 7:26

Instr() ?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 09.06.2006 (Пт) 9:55

Elkatib писал(а):Блин, ещё вопросик появился... как проверить, если в строке буква.
Например, d="546333333923645A564333333"
Имеем букву "A".
Как проверить состоит ли строка только из цифр или в ней по мимо цифр есть ещё что-то???

2 ALX_2002, MeMBus, kpblc :shock:
IsNumeric

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.06.2006 (Пт) 9:59

Nicky писал(а): IsNumeric

Правда?
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 09.06.2006 (Пт) 10:17

alibek писал(а):Правда?

Код: Выделить всё
MsgBox IsNumeric("546333333923645A564333333")
MsgBox IsNumeric("546333333923645564333333")

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.06.2006 (Пт) 10:21

IsNumeric("&h12A")
Lasciate ogni speranza, voi ch'entrate.

kpblc
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 05.05.2006 (Пт) 15:42
Откуда: С.-Петербург

Сообщение kpblc » 09.06.2006 (Пт) 10:22

А если задуматься об обратной задаче, найти цифру в строке символов?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 09.06.2006 (Пт) 10:31

kpblc писал(а):А если задуматься об обратной задаче, найти цифру в строке символов?

IsCharAlpha
2 alibek мне кажется, в _данном конкретном_ случае этого не надо

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.06.2006 (Пт) 10:37

Что именно не надо?
Выражение "&h12A" по мнению IsNumeric является числовым. И даже "&012" является числовым. Автор же писал "как проверить, если в строке буква". Каким образом ему пригодится IsNumeric?
Lasciate ogni speranza, voi ch'entrate.

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Сообщение neic » 09.06.2006 (Пт) 10:42

alibek писал(а):
Nicky писал(а): IsNumeric

Правда?

Ну если рассудить, что автору нужно проверить если в перменной цифры или нет(я так понял вопрос), то

Код: Выделить всё
If isNumeric(d) = true then
   Msgbox "В поле толькое числа"
else
  msgbox "В поле содержуться не допустимы символы"
ENd If


А то что по товему примеру(Elkatib) то:
Код: Выделить всё
d = "213213213213A31232A313"
q = InStr(d, "A")
If q <> 0 Then
MsgBox "Есть буква А"
Else
MsgBox "Нет буквы А"
End If

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.06.2006 (Пт) 10:44

neic, если ты не понял код, так и скажи.
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 09.06.2006 (Пт) 10:47

alibek писал(а):Что именно не надо?
Выражение "&h12A" по мнению IsNumeric является числовым. И даже "&012" является числовым. Автор же писал "как проверить, если в строке буква". Каким образом ему пригодится IsNumeric?

Обрати внимание на первый пост темы и на характер информации.
В своем посте я руководствовался этим
Так я стал бывалым

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Сообщение neic » 09.06.2006 (Пт) 18:56

alibek писал(а):neic, если ты не понял код, так и скажи.

Ну так вопрос был таков : "Как проверить состоит ли строка только из цифр или в ней по мимо цифр есть ещё что-то???"
Я показал если IsNumeric(d) = True - значит строка состоит только из цифр, иначе содержиться ещё что-то.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 09.06.2006 (Пт) 19:00

neic
В окне Immediate введи
Код: Выделить всё
?IsNumeric ("&h12A")

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

Сообщение GSerg » 10.06.2006 (Сб) 3:45

Даже не так.
Для усиления эффекта можно вообще убрать цифры.

Код: Выделить всё
? isnumeric(empty)
True
? isnumeric("&habcdef")
True
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 13

    TopList  
cron