Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Преобразование строки символов  [new]
drafty
Member

Откуда: Москва
Сообщений: 719
Здравствуйте уважаемые форумчане-профи "акса"!
Меня всегда интересовал один вопрос,но его разрешение я всегда оставлял на потом,потому что удавалось справляться посредством применения функций Left,Right,Mid.
Допустим есть строка в каком-либо поле,но ее длина может принимать разное значение.
Но всегда,в начале этой строки присутствует определенный "закономерный" набор символов,например: "_1111-222_ghjghgjgjgjgjhgyhhg" или "_1111-222_1111-222_4589ололлддгроролро" или "_1111-222_3333-444_5555-666_999qwerty"
Теперь вопрос,как можно удалить все символы ПРЕДШЕСТВУЮЩИЕ последнему символу "_" и включая его самого,т.е. чтобы после удаления осталась только строка,которая не имеет в своем составе комбинации "НИЖНИЙ ПРОЧЕРК & ЦИФРА & ЦИФРА & ЦИФРА & ЦИФРА & ДЕФИС & ЦИФРА & ЦИФРА & ЦИФРА & НИЖНИЙ ПРОЧЕРК" ну или хотя бы удалить все,что до нижнего прочерка(включая его самого)?
19 фев 21, 10:40    [22283298]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
court
Member

Откуда:
Сообщений: 2271
drafty
Теперь вопрос,как можно удалить все символы ПРЕДШЕСТВУЮЩИЕ последнему символу "_" и включая его самого

s = "_1111-222_ghjghgjgjgjgjhgyhhg": ?Right(s,Len(s)-InStrRev(s,"_"))
ghjghgjgjgjgjhgyhhg
19 фев 21, 11:20    [22283327]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
drafty
Member

Откуда: Москва
Сообщений: 719
court,
понял,не дурак...THNK! :)

Сообщение было отредактировано: 19 фев 21, 11:29
19 фев 21, 11:34    [22283336]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 779
+ другой путь
Private sub test()
dim s as string, arstr() as string, simvs, txt as string
simvs=array("_","1","2")
s= "_1111-222_1111-222_4589ололлддгроролро" или "_1111-222_3333-444_5555-666_999qwerty"

for i=0 to ubound(simvs)
arstr=split(txt,simvs(i))
txt=arstr(ubound(arstr))
erase arstr
next

debug.print txt
end sub
19 фев 21, 11:53    [22283353]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
drafty
Member

Откуда: Москва
Сообщений: 719
alecko
+ другой путь
Private sub test()
dim s as string, arstr() as string, simvs, txt as string
simvs=array("_","1","2")
s= "_1111-222_1111-222_4589ололлддгроролро" или "_1111-222_3333-444_5555-666_999qwerty"

for i=0 to ubound(simvs)
arstr=split(txt,simvs(i))
txt=arstr(ubound(arstr))
erase arstr
next

debug.print txt
end sub

"громоздкий",первый более "изящнее"
19 фев 21, 12:37    [22283398]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 613
Еще вариант:
v = Split("_1111-222_ghjghgjgjgjgjhgyhhg","_"): ?v(Ubound(v))
ghjghgjgjgjgjhgyhhg
Но мой и court варианты предполагают, что символ "_" в самом тексте отсутствует. Иначе лучше копать в сторону регулярных выражений.
19 фев 21, 14:04    [22283498]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21056
drafty
чтобы после удаления осталась только строка, которая не имеет в своем составе комбинации "НИЖНИЙ ПРОЧЕРК & ЦИФРА & ЦИФРА & ЦИФРА & ЦИФРА & ДЕФИС & ЦИФРА & ЦИФРА & ЦИФРА & НИЖНИЙ ПРОЧЕРК"
При таком подходе "_1111-222_ghjghgjgjgjgjhgyhhg" преобразуется, например, в "1111-222_ghjghgjgjgjgjhgyhhg". Будьте аккуратнее в формулировках...

PS.
s = "_1111-222_ghjghgjgjgjgjhgyhhg": ? StrReverse(Split(StrReverse(s), "_")(0))
ghjghgjgjgjgjhgyhhg


Сообщение было отредактировано: 19 фев 21, 14:45
19 фев 21, 14:42    [22283519]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
drafty
Member

Откуда: Москва
Сообщений: 719
Кривцов Анатолий
Еще вариант:
v = Split("_1111-222_ghjghgjgjgjgjhgyhhg","_"): ?v(Ubound(v))
ghjghgjgjgjgjhgyhhg
Но мой и court варианты предполагают, что символ "_" в самом тексте отсутствует. Иначе лучше копать в сторону регулярных выражений.

можно пояснить что под этим подразумевается?

Сообщение было отредактировано: 20 фев 21, 09:05
20 фев 21, 09:10    [22283917]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
drafty
Member

Откуда: Москва
Сообщений: 719
Akina
drafty
чтобы после удаления осталась только строка, которая не имеет в своем составе комбинации "НИЖНИЙ ПРОЧЕРК & ЦИФРА & ЦИФРА & ЦИФРА & ЦИФРА & ДЕФИС & ЦИФРА & ЦИФРА & ЦИФРА & НИЖНИЙ ПРОЧЕРК"
При таком подходе "_1111-222_ghjghgjgjgjgjhgyhhg" преобразуется, например, в "1111-222_ghjghgjgjgjgjhgyhhg". Будьте аккуратнее в формулировках...

PS.
s = "_1111-222_ghjghgjgjgjgjhgyhhg": ? StrReverse(Split(StrReverse(s), "_")(0))
ghjghgjgjgjgjhgyhhg

уважаемый,не могу понять, что это за аргумент (ноль в скобках),"флаг" двоичного сравнения?
Пытался понять механизм этой "матрешки" функций - не смог,запутался в скобках.Например в дебагере набираю
Split ("172.1.0.16", ".", 1)
выдается Run Time Error 13 ошибка Type Mismatch...
так StrReverse(Split(StrReverse(Me.Primechanie), "_")(0)) работает как вы и говорили, а по отдельности - не могу воспроизвести...скобки сбивают со смысла :)

Сообщение было отредактировано: 20 фев 21, 10:16
20 фев 21, 10:20    [22283938]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
drafty
Member

Откуда: Москва
Сообщений: 719
Akina
drafty
чтобы после удаления осталась только строка, которая не имеет в своем составе комбинации "НИЖНИЙ ПРОЧЕРК & ЦИФРА & ЦИФРА & ЦИФРА & ЦИФРА & ДЕФИС & ЦИФРА & ЦИФРА & ЦИФРА & НИЖНИЙ ПРОЧЕРК"
При таком подходе "_1111-222_ghjghgjgjgjgjhgyhhg" преобразуется, например, в "1111-222_ghjghgjgjgjgjhgyhhg". Будьте аккуратнее в формулировках...

PS.
s = "_1111-222_ghjghgjgjgjgjhgyhhg": ? StrReverse(Split(StrReverse(s), "_")(0))
ghjghgjgjgjgjhgyhhg

Не могу понять:
Private Sub Primechanie_Enter()
Dim varstr
varstr = Split("_1111-222_ghjghgjgjgjgjhgyhhg", "_")
End Sub

Так срабатывает нормально,а когда в дебагере проверяю значение ?varstr - выдается вышеоговоренная ошибка
Вопрос - почему?

Сообщение было отредактировано: 20 фев 21, 10:26
20 фев 21, 10:32    [22283948]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование строки символов  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5181
drafty
уважаемый,не могу понять, что это за аргумент (ноль в скобках),"флаг" двоичного сравнения?
Пытался понять механизм этой "матрешки" функций - не смог,запутался в скобках.Например в дебагере набираю
Split ("172.1.0.16", ".", 1)
Функция Split
Читай про массивы. Например, https://codernotes.ru/articles/vba/massivy-v-vba.html

Сообщение было отредактировано: 20 фев 21, 11:23
20 фев 21, 11:27    [22283982]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить