Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Количество символов Добавлено: 16.03.07 14:31  

Автор вопроса:  WinstoUn
Господа, всем здрасте!
Нужна Ваша помощь, ибо прочитал книжку по VB, несколько статей и ничего не понял. А очень хочется.
Есть у меня одна проблемка (Вам она может показаться смешной). Нужно написать программку, которая бы считала количество заданных символов в строке. Например символов "п" или "а" в слове "папараци". Я знаю как посчитать общее количество символов, а вот отдельные...

За помощь буду благодарен и даже больше!

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #1
Добавлено: 16.03.07 15:26
____ Надо использовать функцию mid(str,i,1) в цикле сравнения и подсчёта символов.

Ответить

Номер ответа: 2
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #2 Добавлено: 16.03.07 18:43
а можно и так:
Private Sub Command1_Click()
     MsgBox UBound(Split(Text1.Text, "п";))
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 WinstoUn



Вопросов: 1
Ответов: 3
 Профиль | | #3 Добавлено: 16.03.07 20:19
А можно поподробней пожалуйста. Я же чайник ).
Попробовал, не получилось. Как все это прописать и где?

Ответить

Номер ответа: 4
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #4 Добавлено: 16.03.07 20:31
А можно поподробней пожалуйста.

На здоровье:
На форме распологаешь кнопку Command1.
в код кнопки вписываешь:
MsgBox UBound(Split("Твой текст", "т";))

"Твой текст" - это твой текст :)
"т" - буква, которую надо считать.

Ответить

Номер ответа: 5
Автор ответа:
 WinstoUn



Вопросов: 1
Ответов: 3
 Профиль | | #5 Добавлено: 16.03.07 20:39
Это понятно. Но "Мой текст" должен вводиться в TextBox на форме, и буква которую надо считать, тоже там. Что бы менять можно было.

MsgBox UBound - эта команда VBA? А то у меня VB 6.0.

Ответить

Номер ответа: 6
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #6 Добавлено: 16.03.07 20:59
Хорошо, подробней:
MsgBox - команда, которая выводит диалоговое окно.
Ubound(массив) - Возвращает нижнюю границу массива
Split(текст,знак) - возвращает одномерный массив, где каждый элемент массива представляет собой кусок строки, отрезанный от "знака" и до "знака", т.е. команда
MsgBox UBound(Split("Попытка подсчета", "п";))
вудаст сообщение "1", т.к. регистр букв также имеет значение.

в твоем случае:
кидаешь на форму 2 текстбокса: Text1 и Text2
кнопку Command1
в код кнопки запкидываешь:
MsgBox UBound(Split(Text1.Text, Text2.Text))

Результат: Из строки введенной в Text1 вырезаются куски отрезанные символом(и), введенными в Text2.
Уф-ф-ф... Ни хрена из меня учителя не будет...

Все это в VB6.

Ответить

Номер ответа: 7
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #7
Добавлено: 16.03.07 21:00
MsgBox UBound(Split("Твой текст", "т";))
Заместь "т" ставиш text2.text
Создаеш на форме text2,text1
Записиваеш в text1.text свой текст
в text2.text букву
і нажимаеш на comannd1
MsgBox UBound(Split(text1.text), text2.text))


Вроби так не проверял но должно роботать

Ответить

Номер ответа: 8
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #8
Добавлено: 16.03.07 21:02
Опередили.Уменя одна ошибка
MsgBox UBound(Split(text1.text), text2.text))

Нада
MsgBox UBound(Split(text1.text, text2.text))

Ответить

Номер ответа: 9
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #9
Добавлено: 16.03.07 23:03
Ubound(массив) - Возвращает нижнюю границу массива

____ Думаю, что UBound() возвращает верхний индекс массива, а не границу. Поэтому результат будет зависеть от номера первого индекса (0 или 1).

____ Прикольно с функцией Split. Может быть ещё и LCase() использовать внутри?

Ответить

Номер ответа: 10
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #10 Добавлено: 17.03.07 00:04
Думаю, что UBound() возвращает верхний индекс массива, а не границу

А какая хрен разница.... Число элементов массива он тебе выведет.
2. Можно и LCase/UCase пользовать, все пашет:
    
MsgBox UBound(Split(UCase(Text1.Text), UCase(Text2.Text)))

Ответить

Номер ответа: 11
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #11
Добавлено: 17.03.07 11:14
А какая хрен разница.... /Arseny/
____ Полагаю, что только если задан "Base 1" ответ будет точным. В противном случае — на единицу меньше.

____ Просто тут такие вопросы задают, что не лишним будет напоминание об этой разнице. :)

Ответить

Номер ответа: 12
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #12 Добавлено: 17.03.07 12:37
У меня по умолчанию все считает.

Ответить

Номер ответа: 13
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #13
Добавлено: 17.03.07 13:16
... по умолчанию ...
____ Меня это сильно заинтересовало. Провёл исследование. Выяснилось, что на функцию Split() оператор Option Base 1 не действует — независимо от него формируется массив с первым индексом равным нулю(!).
____ Ну, а поскольку массив получается на единицу больше, чем количество разделителей, то верхний индекс массива численно равен количеству разделителей.

____ А решение красивое — возьму на заметку. Спасибо.

Ответить

Номер ответа: 14
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #14 Добавлено: 17.03.07 14:50
UBOUND - только верхняя граница
LBOUND - только нижняя

Dim i&;(-18 to 50)
UBound(i) даст 50, а LBound(i) — -18

Чтобы узнать размер массива надо сделать так
Size = UBound(array) - LBound(array) + 1

Ответить

Номер ответа: 15
Автор ответа:
 WinstoUn



Вопросов: 1
Ответов: 3
 Профиль | | #15 Добавлено: 17.03.07 15:20
Спасибо огромное всем! Помогли.
Чесно говоря, узнал много нового )
Спасибо!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам