• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Like

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
81
Вроде на простейших вещах, а иногда высаживает... ) ;)

Хочется определить, есть ли в строке одинарный слэш или нет. В строке могут быть и двойные и тройные, но определить надо наличие именно одинарного.
т.е. чтобы в такой строке вернуло True:
pStr = "dfff\s\dg\\fg\\\fsg\\fsh\sdfg\sdfg\\"
а в такой False:
pStr = "dfffsdg\\fg\\\fsg\\fshsdfgsdfg\\"

Думал, что алгоритм должен быть такой:
- найти слэш и посмотреть следующий символ, который может быть любым но ни слэшем;
- ну а лучше было бы взять слэш и посмотреть с обоих сторон, чтобы не было слэшей.

По первому варианту пробовал так:
pStr Like "*\[!\]*"
так:
pStr Like "*\[!\\]*"
и так:
pStr Like "*\[!-\]*"
и ещё, Бог знает, как )))
ничего не получается.
Вернее он определяет слэш вообще, а не одинарный..

Что подскажет сообщество? :)
 
A

Akupaka

эм, как на счет разбить строку на массив (split) и проверить на пустые элементы? :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
like наредкость глюкавый оператор...
LS2J и регулярки :)
 
D

Darker

Akupaka +1

Или вот еще идея,
Код:
temp=Replace("123//1243/123///12323////","//","^")
temp=replace(temp,"^/","")
isHaveSlash=(instr(temp,"/")>0)

или для параноиков))
Код:
isHaveSlash=(instr(Replace(Replace("123//1243/123///12323////","//","^"),"^/",""),"/")>0)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
81
Это да... Только не хочется из-за такой мелочи ещё и Яву тянуть.

Darker, хороший для логики вариант, сам когда-то такими вещами извращался, но уж многовато телодвижений.. :rolleyes:

Ребята, всем спасибо, возьму вариант:
...разбить строку на массив (split) и проверить на пустые элементы
 
H

hosm

лимиты варианта со split в 6ке(8ки ща нет под рукой) - Note Fixed-length strings, strings in variants, and random files will not work with strings greater than 64K in length because they have a two-byte header which contains the length of the string. Two bytes cannot represent more than 64K.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
(pStr Like "*[!\][\][!\]*") Or (pStr Like "[\][!\]*") Or (pStr Like "*[!\][\]")
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
81
возьму вариант:
...разбить строку на массив (split) и проверить на пустые элементы
гм.. пустые элементы будут и когда просто двойные и тройные и когда одинарные с двойными и тройными...


Грустно, потому накропал:
Код:
%REM
Function IsSlashContains
Description: проверка наличия одинарного слэша
%END REM
Function IsSlashContains(sSource As String) As Boolean
Const SMB_SLASH = "\"
lSource% = Len(sSource)

pSmb% = 1
Do
pSmb% = InStr(pSmb%, sSource, SMB_SLASH)
If pSmb% = 0 Then Exit Function

For nSlash% = 1 To lSource%
If pSmb% = lSource% Then
If nSlash% = 1 Then Exit Do Else Exit Function
End If

pSmb% = pSmb% + 1

If Mid$(sSource, pSmb%, 1) <> SMB_SLASH Then
If nSlash% = 1 Then Exit Do Else Exit For
End If
Next
Loop

IsSlashContains = True
End Function

Medevic
Подтверждаете, что слухи о глюкавости немного преувеличены, видимо надо просто уметь готовить ))

По теме: решение классное, но
(pStr Like "*[!\][\][!\]*") Or (pStr Like "[\][!\]*") Or (pStr Like "*[!\][\]")
все выражения для pStr = "\" вычисляются в False.
 
H

hosm

VladSh мы ща допилим костылей и для этого случая ;))))
(pStr ="\") or (pStr Like "*[!\][\][!\]*") Or (pStr Like "[\][!\]*") Or (pStr Like "*[!\][\]")
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
81
Medevic
Всё равно спасибо! Думаю, всем будет полезно для изучения Like ;)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
наскока помню like адекватен для Ascii (и то - тока для печатных символов)
а про привлечение java - не понимаю, что смущает?
скорость исполнения, сомневаюсь, что в выше перечисленных вариантах она "лучше" :)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
81
lmike
Я не тестировал, но мне почему-то кажется (возможно я и ошибаюсь), что на подключение (LS2J) тратится время.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
что на подключение (LS2J) тратится время.
как и на всякую процедуру инициализации :)
но если оформить в виде класса и инициализировать в библе - не вижу ничего "страшного"
а вот тормоза в реализации стринговых операций в LS - известный момент
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!