Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 10:46   #1
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию Как разделить textbox1.text (с разделителями ;) по частям?

В textbox есть такой запись (с разделителями ';'):
textbox1.text="111; asddf; we12341s; rty456"
Как получить последный (именно 4-й) часть этого текста?
Aqil_f вне форума Ответить с цитированием
Старый 17.09.2010, 10:55   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Например, так:
Код:
x = Split(textbox1, ";")(3)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.09.2010, 13:00   #3
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

SAS888, cпасибо!
Aqil_f вне форума Ответить с цитированием
Старый 13.12.2017, 11:12   #4
DZAZ
 
Регистрация: 09.11.2017
Сообщений: 7
По умолчанию

Ребят и мне помогите определить вытаскивание нужного текста из полученной строковой переменной посредством VBA.
С com порта получаю буфер и вписываю в переменную.
Итого переменная с полученными данными всегда однотипно выглядит, а именно вот так как в скобках (самих скобок конечно там нет):
( 6 2.42kg ).
Мне нужно получить в textbox именно 2.42 , но по логике я понимаю, что значение цифровое может быть и 2 и 3 и 4 цифры до запятой, то есть значение нужно слева от kg и до первого пробела.

Заранее спасибо!
DZAZ вне форума Ответить с цитированием
Старый 13.12.2017, 11:57   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Function GetMyValue(s As String)
    GetMyValue = StrReverse(Mid(Trim(StrReverse(s)), 3, InStr(Trim(StrReverse(s)), " ") - 3))
End Function
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 13.12.2017, 12:09   #6
DZAZ
 
Регистрация: 09.11.2017
Сообщений: 7
По умолчанию

Александр, спасибо, что откликнулись!

Я даже не любитель в VBA, поэтому костыли мои решения)).
Я вставил Ваш код , но результат получил 2.42kg, то есть с единицей измерения.
А как убрать kg ?

Private Sub Button1_Click()

Dim v As String
Dim vr As String


MSComm1.InputLen = 0
On Error Resume Next
MSComm1.PortOpen = True
Label1.Caption = "Ïîðò îòêðûò"

If Err Then
MsgBox "Com" & MSComm1.CommPort & ": not available. Change CommPort property to another port."
Label1.Caption = "Ïîðò çàêðûò"
Exit Sub
End If

Do
Dummy = DoEvents()
Loop Until MSComm1.InBufferCount >= 8
v = MSComm1.Input
TextBox2.Text = StrReverse(Mid(Trim(StrReverse(v)), 3, InStr(Trim(StrReverse(v)), " ") - 3))
MSComm1.PortOpen = False
End Sub
DZAZ вне форума Ответить с цитированием
Старый 13.12.2017, 12:34   #7
DZAZ
 
Регистрация: 09.11.2017
Сообщений: 7
По умолчанию

Вообщем kg то я убрал, но похоже, что надо использовать указание переменной "v" как массива. Потом Split использовать для разбивки на группу строк. И выводить нужную строку.
Проблема заключается в том, что значение веса, как писал в самом начале, это переменная величина приходящая с com порта. Сейчас она 4.24 а другая коробка 18.67 и т.д., то есть считывание фиксированного количества цифр функцией обратного считывания строки возможно что не подходит.

А есть возможность поделиться знанием, как вынимать только цифровое значение, которое может иметь разное количество цифр с наличием десятичных или без них?
DZAZ вне форума Ответить с цитированием
Старый 13.12.2017, 12:46   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Тестировал функцию на данных с сообщения №1. Может вход не такой как написали?
Код:

Sub foo()
    Dim s As String
    s = "6 2.42kg"
    MsgBox s & vbNewLine & GetMyValue(s)
End Sub

Function GetMyValue(s As String)
    GetMyValue = StrReverse(Mid(Trim(StrReverse(s)), 3, InStr(Trim(StrReverse(s)), " ") - 3))
End Function
хотя могете и через сплит
Код:
Sub foo()
    Dim s As String
    Dim v
    s = "6 2.42kg"
    v = Split(s, " ")
    
    MsgBox s & vbNewLine & Replace(UCase(v(UBound(v))), "KG", "")
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 13.12.2017 в 12:49.
Aleksandr H. вне форума Ответить с цитированием
Старый 13.12.2017, 14:41   #9
DZAZ
 
Регистрация: 09.11.2017
Сообщений: 7
По умолчанию снимок экрана

суть в том, что если я ставлю :
Dim s As String
Dim v
s = MSComm1.Input
v = Split(s, " ")
TextBox3.Text = Replace(UCase(v(UBound(v))), "KG", "")

То если значение цифровое идет с одной цифрой до точки, типа 4.34 , то выдает почти нормально в textbox , но если вес следующей коробки будет , например 57.45, то не выдает уже ничего.
Какая строка может приходить в переменную "s":
например измеряю первую коробку
1 4.21kg+непечатный символ в конце kg
сохранил это измерение в ексель
измеряю новую коробку
2 17.56kg+непечатный символ в конце kg

1 и 2 это порядковый номер измерения и нам он не важен.
Но вот значения могут быть с одной цифрой после точки или с двумя цифрами после точки или три цифры до точки.
А сейчас когда одна цифра до точки, то значение вписывает, только непечатный символ в конце еще остается лишним (прикладываю скрин экрана).
Но если будет значение две цифры до точки, то ничего не вписывает совсем.
Изображения
Тип файла: jpg Без-имени-1.jpg (65.3 Кб, 129 просмотров)
DZAZ вне форума Ответить с цитированием
Старый 13.12.2017, 15:05   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Дайте хотя бы 20-30 примеров данных
Вложения
Тип файла: xls Thread113507.xls (36.0 Кб, 9 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры: Ввод(text)-Вычисление(string)-Вывод(text) FYBVFPFYBC Помощь студентам 2 06.05.2010 23:15
Проблема с textBox1 NoF[1]X Общие вопросы C/C++ 0 04.04.2010 16:09
Разрезать файл по частям KoBRaAndrey Общие вопросы Delphi 8 23.01.2010 19:03
интегрирование по частям bill Свободное общение 4 28.08.2007 17:59
PCHAR строка с разделителями #13#10. Как вычленить отдельные "подстроки" EdNovice Общие вопросы Delphi 1 17.04.2007 11:42