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

Тема в разделе "Visual Basic", создана пользователем -, 11 фев 2011.

Наш партнер Genesis Hackspace
  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е цифры после слов. Вот такое решил написать:

    Код (Text):
    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.

    Как я понял про индекс ругается, сделал вот так:
    Код (Text):
    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:)

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

    hosm * so what *

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

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.445
    Симпатии:
    8
    попробуйте также использовать IsNumeric(mas(2)) - IsNumeric
     
  4. Гость

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

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

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

    Если Redim не ставить тогда ругается
     
  6. Гость

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

    andrey24 Member

    Регистрация:
    8 июл 2010
    Сообщения:
    20
    Симпатии:
    0
    На основании твоего вопроса и предоставленных тобой данных нацарапал такой код ). Я так понял, что у тебя данные хранятся в текстовом файле, то как ты выдернешь от туда строки ты не спрашиваешь, значит разобрался как из них создать массив строк ).
    Код (Text):
    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%, что можно найти закономерность благодаря которой можно написать ту процедуру, которую тебе надо!!!

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

Поделиться этой страницей