Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
7 / 7 / 2
Регистрация: 21.11.2008
Сообщений: 41
1

Считаю запятые

31.01.2011, 00:18. Просмотров 1770. Ответов 16
Метки нет (Все метки)


Как рассматривать каждый символ в строке отдельно?
PureBasic
1
2
3
4
5
6
7
8
9
Dim TestString As String
TestString = "1-3,5-7,10-20"
t = 1
n = Len(TestString)
For i = 0 To n - 1
 If TestString(i) = "," Then
  t = t + 1
 End If
Next i
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2011, 00:18
Ответы с готовыми решениями:

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

Ограничение ввода в TextBox: только цифры, точки и запятые
В TextBox нужно чтобы вводились только цифры, точки и запятые. И чтобы если ввели неправильно можно...

Как рядом стоящие запятые и тире поменять местами
Добрый день. Помогите пожалуйста написать программу на VBA от excel Если в последовательности...

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

__________________
Помогаю в написании студенческих работ здесь.
16
11193 / 3566 / 632
Регистрация: 13.02.2009
Сообщений: 10,658
31.01.2011, 00:28 2
Можно так
Visual Basic
1
2
3
4
5
6
7
8
9
10
Option Explicit
 
Private Sub Комманда1_Click()
Dim TestString  As String
Dim M() As String
Dim T
TestString = "1-3,5-7,10-20"
M = Split(TestString, ",")
T = UBound(M)
End Sub
1
7 / 7 / 2
Регистрация: 21.11.2008
Сообщений: 41
31.01.2011, 00:56  [ТС] 3
Спасибо!
со строками в вба только через split можно работать? или как-то можно рассматривать строку как масив?
0
11193 / 3566 / 632
Регистрация: 13.02.2009
Сообщений: 10,658
31.01.2011, 00:59 4
Есть ещё Mid
0
Заблокирован
31.01.2011, 11:11 5
Ещё вариант:
Visual Basic
1
2
3
4
5
6
7
Sub Макрос1()
Dim TestString As String
Dim Количество As Long
TestString = "1-3,5-7,10-20"
Количество = Len(TestString) - Len(Replace(TestString, ",", ""))
MsgBox Количество
End Sub
1
1900 / 777 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
01.02.2011, 03:05 6
Цитата Сообщение от molnia Посмотреть сообщение
Считаю запятые
вот, имхо, лучший способ подсчета символов в строке. впрервые, кажется, предложен gaw (и немного расширен мной)
https://www.cyberforum.ru/visu... page2.html

только заметил. Alex77755, уже это предлагал...
0
1900 / 777 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
01.02.2011, 03:27 7
а вот строка в виде массива Массив букв из слова
1
Заблокирован
01.02.2011, 09:17 8
ironegg,
а чем плох код в #5?
0
11193 / 3566 / 632
Регистрация: 13.02.2009
Сообщений: 10,658
01.02.2011, 09:19 9
Busine2009,
не твой
0
Заблокирован
01.02.2011, 09:27 10
Цитата Сообщение от ironegg Посмотреть сообщение
вот, имхо, лучший способ подсчета символов в строке
я считаю, что лучший способ в данном конкретном случае для подсчёта буквы в тексте является код в #5.
0
11193 / 3566 / 632
Регистрация: 13.02.2009
Сообщений: 10,658
01.02.2011, 09:38 11
Каждый кулик своё болото хвалит
Народная мудрость
0
Заблокирован
01.02.2011, 09:44 12
Alex77755,
я считаю преимущество кода #5 - простота, что очевидно.
Хочу узнать, чем лучше др. предложенные способы.
0
11193 / 3566 / 632
Регистрация: 13.02.2009
Сообщений: 10,658
01.02.2011, 09:49 13
А мне проще так:
Visual Basic
1
2
M = Split(TestString, ",")
T = UBound(M)
Я тоже кулик
0
Заблокирован
01.02.2011, 09:51 14
Alex77755,
у вас массив создаётся - что уже не является простотой.
0
5542 / 1347 / 148
Регистрация: 08.02.2009
Сообщений: 4,080
Записей в блоге: 30
01.02.2011, 13:45 15
Цитата Сообщение от Busine2009 Посмотреть сообщение
я считаю, что лучший способ в данном конкретном случае для подсчёта буквы в тексте является код в #5
Это же без разницы. Лишь бы верно считало!

Языки программирования всяко проще устройства мозгов! И любой код примитивен.
0
Заблокирован
01.02.2011, 13:47 16
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Это же без разницы.
чем проще код - тем лучше.
0
1900 / 777 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
02.02.2011, 11:53 17
Цитата Сообщение от Busine2009 Посмотреть сообщение
чем проще код - тем лучше.
конечно нет. вот смотри, код в конце столь сложен, что вряд ли кто то захочет разбирать как он работает. однако он работает в десятки (сотни?) раз быстрее чем простой код прямого перебора и, следовательно, лучше.
кроме того, код с использованием Split выглядит более лаконично и выразительно (имхо). и следовательно этот прием будет лучше смотреться в составе более сложного кода (чтобы не заострять внимание на мелочах)
чтобы завершить спор, нужно всего-навсего провести эксперимент
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub СократМнеДругНоИстинаДороже()
 
Dim a() As Byte
Dim I As Long
Dim j As Long
Dim TestString  As String
Dim T
TestString = "1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,1-3,5-7,10-20,"
'TestString = ","
 
tmr = Timer
For I = 0 To 10000
    T = Len(TestString) - Len(Replace(TestString, 44, ""))
Next I
Debug.Print Timer - tmr & " c.   " & T
 
T = 0
tmr = Timer
For I = 0 To 10000
    T = UBound(Split(TestString, 44))
Next I
Debug.Print Timer - tmr & " c.   " & T
 
tmr = Timer
a() = TestString
For I = 0 To 10000
T = 0
For j = 0 To UBound(a) Step LenB("ы")
     If a(j) = 44 Then T = T + 1
Next j
Next I
Debug.Print Timer - tmr & " c.   " & T
 
End Sub
дает такой вывод на длинных строках
0,671875 c. 51
0,6015625 c. 51
0,4375 c. 51
и такой на коротких (если раскомментировать строку ['TestString = ","])
8,984375E-02 c. 1
7,421875E-02 c. 1
3,90625E-03 c. 1
как видно, по скорости выполнения на коротких строках лучший код - последний
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2011, 11:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как сделать чтобы в textbox вводились только положительные цифры, запятые, точки?
Как сделать чтобы в textbox вводились только положительные цифры, запятые, точки и чтобы запятые и...

Если в последовательности символов имеются рядом стоящие запятые и тире, то везде поменять их местами
Если в последовательности символов имеются рядом стоящие запятые и тире, то везде поменять их...

Заменить все пробелы на запятые, а запятые на точки. Посчитать количество запятых во введенной строке
Во введенной строке заменить все пробелы на запятые, а запятые на точки. Посчитать количество...

Считаю символы в строке
Захотелось написать функцию которая считает символы в строке (знаю, что есть strlen, но это не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.