1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

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

  1. Гость

    Репутация:
    0
    имеется строка 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:)

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

    hosm * so what *

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

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

    hosm * so what *

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

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

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

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

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

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

    andrey24 Member

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

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