• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

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

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

Guest

#1
имеется строка 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:)

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

hosm

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

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

Guest

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

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

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

Guest

#6
Так со сплитом разобрался спасибо) мой косяк, в документе с пробелами намутил)
 
08.07.2010
20
0
#7
На основании твоего вопроса и предоставленных тобой данных нацарапал такой код ). Я так понял, что у тебя данные хранятся в текстовом файле, то как ты выдернешь от туда строки ты не спрашиваешь, значит разобрался как из них создать массив строк ).
Код:
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) - не чего путнего не сделает!!!!!