Считать часть строки до символа

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

Считать часть строки до символа

Сообщение netfrog » 19.05.2003 (Пн) 12:22

Сорри, клинит после гулянок в выходне :oops: , как определенное число символов считать - помню, а вот как читать строку до того как попадется нужное сочетание символов - не помню. Хелп, что ли...
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 19.05.2003 (Пн) 12:41

Код: Выделить всё
result = mid(myst,1,instr(1,mystr,mysymbol,vbtextcompare))




mysymbol - нудный символ до которого ты будешь читать строку ;)

netfrog
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 27.06.2002 (Чт) 17:23
Откуда: Russia

Сообщение netfrog » 19.05.2003 (Пн) 12:46

спасибо тебе хороший человек :)
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 19.05.2003 (Пн) 14:50

я гоняю этот mid только с тремя "данными" :roll:
типа mid(stroka,nachalo,kol-vosimv)... этого хватает :lol:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

netfrog
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 27.06.2002 (Чт) 17:23
Откуда: Russia

Сообщение netfrog » 19.05.2003 (Пн) 14:57

2Fireshtorm не прокатит для первой порции данных. В моем, например, случае известно, что нужно взять строку, заканчивающуюся на ",". Сколько символов - неизвестно. Дальше да. Пример строки? "236005 Калининград, лялялялялял лялял ляля". Вот этот "Калининград" может замениться на "Тула" и песец :(
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

netfrog
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 27.06.2002 (Чт) 17:23
Откуда: Russia

Сообщение netfrog » 19.05.2003 (Пн) 14:59

сорри, нечаянно ник переврал :roll:
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 19.05.2003 (Пн) 16:27

ну может, но мне не приходилось этим пользоваться :wink:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

LsD85
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 118
Зарегистрирован: 04.06.2002 (Вт) 12:48
Откуда: Russia

ТАК-!

Сообщение LsD85 » 20.05.2003 (Вт) 6:47

Если тебе надо взять фрагмент в строке до определенного символа то нужно это сделать через цикл, под рукой VB нет, так что я на память попробую:

dim Stroka 'Там у тебя строчка с которой и производятся действия
for i = 0 to len(Stroka) - 1 'Тут мы как бы начинаем катать mid по строке, проверяя, где есть ","
if mid(Stroka, i, 1) = "," then ' Первый параметр у mid, оперируемая строка, втророй номер проверяемого символа, третий это обозначение, что проверяется один символ.
' Тут твои действия
' если обнаружена запятая
end if
next i

Вот так вот, если тебе надо вырезать то что находится до символа, то в действиях, напиши типа:
MyPerem = mid(Stroka, 0, i), и программа поместит содержимое до запятой в переменную MyPerem.

Ну вот вроде бы все детальнейшим образом обьяснил, вроде должно работать, если не будет, то попробуй искать от 1-го символа, а " - 1", после len убери.
OO
-=-

netfrog
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 27.06.2002 (Чт) 17:23
Откуда: Russia

Сообщение netfrog » 20.05.2003 (Вт) 10:18

тоже вкусный вариант, особенно удобно. если надо несколько частей (>3) тянуть из строки. :) Код получается проще и удобочитаемым :)
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

waresok
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 15.06.2008 (Вс) 9:17

Re: Считать часть строки до символа

Сообщение waresok » 22.12.2008 (Пн) 17:49

Помогите разобраться:

например есть Text1.Text = "123,000"

Как содержимое до запятой, то есть "123", вырезать в отдельную переменную...

исходя из вешеописанного примера переделал так:

strA = Text1.Text
For I = 1 To Len(strA) - 1
If Mid(strA, I, 1) = "," Then
MyPerem = Mid(strA, 1, I)
Text2.Text = MyPerem
End If
Next I

возвращает "123," то есть зяпятая остается, а мне нужен только текст до зяпятой!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Считать часть строки до символа

Сообщение tyomitch » 22.12.2008 (Пн) 20:19

Очевидно, вместо I используй I-1
А вместо цикла лучше InStr
Изображение

waresok
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 15.06.2008 (Вс) 9:17

Re: Считать часть строки до символа

Сообщение waresok » 22.12.2008 (Пн) 20:57

Спасибо! Все работает!

А еще не подскажите, как аналогично забрать символы после запятой?

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Re: Считать часть строки до символа

Сообщение Demonx » 22.12.2008 (Пн) 21:17

result = Mid("123,00", 1, InStr(1, "123,00", ",", vbTextCompare) - 1)
MsgBox result
Изображение

waresok
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 15.06.2008 (Вс) 9:17

Re: Считать часть строки до символа

Сообщение waresok » 22.12.2008 (Пн) 21:32

Demonx, так также выводит до запятой, а как вывести текст после запятой? то есть 00 в данном примере

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Считать часть строки до символа

Сообщение iGrok » 22.12.2008 (Пн) 22:55

waresok писал(а):Demonx, так также выводит до запятой, а как вывести текст после запятой? то есть 00 в данном примере

Почитать справку по Mid$, и подумать.
result = Mid("123,00", InStr(1, "123,00", ",", vbTextCompare) - 1)
label:
cli
jmp label

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Re: Считать часть строки до символа

Сообщение Demonx » 23.12.2008 (Вт) 0:53

iGrok писал(а):
waresok писал(а):Demonx, так также выводит до запятой, а как вывести текст после запятой? то есть 00 в данном примере

Почитать справку по Mid$, и подумать.
result = Mid("123,00", InStr(1, "123,00", ",", vbTextCompare) - 1)

result = Mid("123,00", InStr(1, "123,00", ",", vbTextCompare) + 1)
Изображение

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Считать часть строки до символа

Сообщение iGrok » 23.12.2008 (Вт) 2:22

Demonx писал(а):result = Mid("123,00", InStr(1, "123,00", ",", vbTextCompare) + 1)

Тьфу ты. Точно. Не посмотрел на смещение. ) Но уж об этом он и сам мог бы догадаться, посмотрев на три поста выше. =)
label:
cli
jmp label

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Считать часть строки до символа

Сообщение HandKot » 23.12.2008 (Вт) 8:15

Код: Выделить всё
split("123,00", ",")(1)
?
I Have Nine Lives You Have One Only
THINK!

Бяка
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 219
Зарегистрирован: 21.09.2005 (Ср) 21:28

Re: Считать часть строки до символа

Сообщение Бяка » 23.12.2008 (Вт) 17:44

HandKot писал(а):
Код: Выделить всё
split("123,00", ",")(1)
?

наконецто ктото вспомнил о split :D

Код: Выделить всё
Dim Tmp$, Signature$,  TP, i As Integer
Signature=","
Tmp = "123,00,666"
TP = Split(Tmp, Signature)

If Not IsArray(TP ) Then
   msgbox "нету тутт такого символя"
  exit sub
end if
For i = 0 To UBound(TP)
    msgbox TP(i)
Next

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Считать часть строки до символа

Сообщение Alec » 23.12.2008 (Вт) 20:23

netfrog писал(а):как читать строку до того как попадется нужное сочетание символов

А чем Left$(St,instr(.....)) не устраивает?
Иногда лучше вовремя остановиться...
И начать заново!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Считать часть строки до символа

Сообщение iGrok » 23.12.2008 (Вт) 20:26

Alec писал(а):
netfrog писал(а):как читать строку до того как попадется нужное сочетание символов

А чем Left$(St,instr(.....)) не устраивает?
Всем устраивает. А чем это кардинально отличается от Mid$(St, 1, Instr(...)) ?
label:
cli
jmp label

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Считать часть строки до символа

Сообщение Alec » 23.12.2008 (Вт) 21:30

iGrok писал(а): А чем это кардинально отличается от Mid$?

Кардинально - ничем (возможно, не вникая в тоноксти). Но как-то эстетичнее и логичнее, на мой ИМХО, выглядит...
Иногда лучше вовремя остановиться...
И начать заново!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Считать часть строки до символа

Сообщение HandKot » 24.12.2008 (Ср) 8:09

Пример строки? "236005 Калининград, лялялялялял лялял ляля".
Вот этот "Калининград" может замениться на "Тула" и ...

А чем Left$(St,instr(.....)) не устраивает?

в данном случае не совсем удобен
лучше Mid или Split("236005 Калининград, лялялялялял лялял ляля", " ")(1)
I Have Nine Lives You Have One Only
THINK!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Считать часть строки до символа

Сообщение Viper » 24.12.2008 (Ср) 8:35

Ну и зачем использовать Split в данном случае? Это не есть правильный способ, правильный способ - получени позиции разделителя и возвращение нужной части строки при помощи Left$, Right$ или Mid$.
Весь мир матрица, а мы в нем потоки байтов!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Считать часть строки до символа

Сообщение HandKot » 24.12.2008 (Ср) 13:48

Viper писал(а):Ну и зачем использовать Split в данном случае?

могу и ошибаться, но, мне кажется, это наиболее удобный способ, в данном случае.


Код: Выделить всё
s = "236005 Калининград, лялялялялял лялял ляля"
s = replace(s, split(s, " ")(1), "Тула")


возможно это не самый быстрый способ, но не нужно использовать ни циклы ни рекурсию
I Have Nine Lives You Have One Only
THINK!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Считать часть строки до символа

Сообщение Viper » 24.12.2008 (Ср) 14:11

HandKot писал(а):
Viper писал(а):Ну и зачем использовать Split в данном случае?

могу и ошибаться, но, мне кажется, это наиболее удобный способ, в данном случае.


Код: Выделить всё
s = "236005 Калининград, лялялялялял лялял ляля"
s = replace(s, split(s, " ")(1), "Тула")


возможно это не самый быстрый способ, но не нужно использовать ни циклы ни рекурсию
Split имеет смысл использовать, когда получить массив строк из строки с разделителем. А в данной ситуации, когда надо получить текст до разделителя и после разделителя лучше пользовться именно InStr, Left, Right и Mid.
З.Ы. Кстати и для целей получения массива быстрее работает способ через InStr, Left, Right и Mid, но Split конечно удобнее.
Весь мир матрица, а мы в нем потоки байтов!


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

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

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

    TopList