• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

как вытащить данные из строки?

  • Автор темы Guest
  • Дата начала
G

Guest

имеется строка objtxt:
#Кольцевой шов 1 1 1 -1 1800 1800 false -1 0 0 0 40
#Кольцевой шов 2 2 1 1 2000 3800 false -1 0 0 0 40
#Люк 3 3 2 -1 1200 1200 true -2 -35 55 240 28
#Штуцер 4 4 -2 2000 16000 true -2 0 90 110 24

Необходимо считать 2е,5е,6е,9,10 и 11е цифры после слов. Вот такое решил написать:

Код:
Dim element as variant
Dim typ as integer


For Each element In Split(objtxt, "#") 
Dim mas() As String 
mas() = Split(element) 
Typ = CInt(mas(2)) 
call proc
Next

Ругается Subscript out of range(error 9) и указывает на typ.

Как я понял про индекс ругается, сделал вот так:
Код:
For Each element In Split(objtxt, "#") 
Dim mas() As String 
mas() = Split(element) 
Redim mas(11)
Typ = CInt(mas(2)) 
call proc
Next

Тогда тычет туда же, но говорит type mismatch:)

Что делать?) где ошибка?? подскажите пожалуйста.
 
H

hosm

скорее всего, 1й элемент - пустая строка или символы перевода строки...
т.е. можно проверять, что кол-во элементов массива (т.е. Ubound(mas)) не меньше какого-то нужного вам количества и только те значения обрабатывать...
2й вариант с ReDim - это просто "костыли", так лучше не делать (но если сильно хотите, то во 2м варианте надо использовать ReDim Preserve mas(11)).

Добавлено: кстати, получается, что слова перед цифрами у вас непонятно где заканчиваются - могут быть из 1-2 слов, не фиксировано...
 
H

hosm

попробуйте также использовать IsNumeric(mas(2)) -
 
G

Guest

Про 1-2 слова спасибо не заметил:)

IsNumeric(mas(2)) попробовал и в общем false) Как я понял
Код:
mas() = Split(element)
плохо работает

Выводил в textbox и в общем mas(0) правильно получается-"Люк" а mas(1)-это всё остальное в elemente. То есть как такового mas(2) вообще нет) При наличии redim preserve такое возникает..Почему так может быть??
 
G

Guest

Так со сплитом разобрался спасибо) мой косяк, в документе с пробелами намутил)
 
A

andrey24

На основании твоего вопроса и предоставленных тобой данных нацарапал такой код ). Я так понял, что у тебя данные хранятся в текстовом файле, то как ты выдернешь от туда строки ты не спрашиваешь, значит разобрался как из них создать массив строк ).
Код:
Dim a() As String
Dim b As String
b = "#Кольцевой шов 2 2 1 1 2000 3800 false -1 0 0 0 40 " 'наша строка
a = Split(b)											  'разбиваем её на массив
If Val(a(1)) <> False Then								 'Провернем является ли массив
c1 = a(2)											 'с индексом 1 числом
c2 = a(5)
c3 = a(6)
c4 = a(10)
c5 = a(11)
c6 = a(12)
Else													  ' если это слово
c1 = a(3)
c2 = a(6)
c3 = a(7)
c4 = a(11)
c5 = a(12)
c6 = a(13)
End If

этот код работает только под 11 цифр, обрати внимание, что в последней строке у тебя 10 цифр, но я уверен на 100%, что можно найти закономерность благодаря которой можно написать ту процедуру, которую тебе надо!!!

и еще
Код:
mas() = Split(element) 
Redim mas(11)
Typ = CInt(mas(2))
Redim в каком бы ты его виде не писал, нах тут не нужен!!! Во 1, просто Redim mas(11) - обнулит весь полученный тобой раннее массив, а redim preserve (11) - не чего путнего не сделает!!!!!
 
Мы в соцсетях:

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