Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 6
1

Не удаляются повторно встречающиеся слова в строке или удаляются не те

25.01.2012, 07:46. Показов 1232. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть программа

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Slova()
Dim text As String
text = InputBox("Vvedite stroky")
a = Split(text)
ReDim b(0)
b(0) = ""
For i = 0 To UBound(a)
For j = 0 To UBound(b)
If a(i) = b(j) Then bl = True: Exit For
Next
If Not bl Then ReDim Preserve b(0 To UBound(b) + 1): bl = False: b(UBound(b)) = a(i)
Next
MsgBox Join(b)
End Sub
Тут проблема в том, что она работает только с одним пробелом между словами, и иногда удаляет не повторяющиеся слова.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2012, 07:46
Ответы с готовыми решениями:

Почему неправильно удаляются слова?
Добрый вечер/день всем. Есть такая задача - "Удалить из строки все повторяющиеся слова". Решаю её...

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

Удаляются пробелы в переданной в функцию строке
Здравствуйте:) Передаю в функцию, к примеру, "h e llo" а получаю результат "hello", почему так...

Удаляются данные если обновляешь до 1709 или 1803 версии Windows?
Я волнуюсь что при обновление Fall Creator Update или же Spring Creator Update удаляются все данные?

8
Заблокирован
25.01.2012, 08:13 2
Может так? -
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit '!!!!!
 
Sub Slova()
Dim text As String, U As Integer
Dim a() As String, b() As String, I As Integer, J As Integer
text = Trim(InputBox("Vvedite stroky", , "  123  234   123    234  123"))
While InStr(1, text, "  ")
  text = Replace(text, "  ", " ")
Wend
a = Split(text)
For I = 0 To UBound(a)
  For J = 0 To U - 1 'UBound(b)
    If a(I) = b(J) Then Exit For
  Next J
  If J = U Then ReDim Preserve b(U): b(U) = a(I): U = U + 1
Next I
MsgBox Join(b)
End Sub
1
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 6
25.01.2012, 10:20  [ТС] 3
Работает, спасибо)
0
1702 / 189 / 19
Регистрация: 20.11.2011
Сообщений: 281
25.01.2012, 11:48 4
Вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Slova2()
    Dim a$(), i&
    a = Split(Application.Trim(InputBox("Vvedite stroky", , "  123  234   123    234  123")))
    With CreateObject("scripting.dictionary")
        For i = 0 To UBound(a)
            If Not .exists(a(i)) Then .Item(a(i)) = vbNullString
        Next
        MsgBox Join(.keys)
    End With
End Sub
Но можно и так:
Visual Basic
1
a = Split(InputBox("Vvedite stroky", , "  123  234   123    234  123"))
1
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
27.01.2012, 16:58 5
Можно удалить лишние пробелы и так:
Visual Basic
1
Text = Application.WorksheetFunction.Trim(Text)
0
1702 / 189 / 19
Регистрация: 20.11.2011
Сообщений: 281
27.01.2012, 17:12 6
Да. Если у Вас побуквенная оплата:-) Это то же самое, что и Application.Trim, см. пост выше.
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
27.01.2012, 17:40 7
Ликбез:
Функция Trim() удаляет начальные и конечные пробелы.
Проверь значение равны ли Text1 и Text2:
Visual Basic
1
2
3
4
5
Sub werw()
    Text = " hwfks ,mnbckj   sdbckb khfkjhfhf ljh'  dljpjpjdp    jdpqjd    pqwjd  poq "
    Text1 = Trim(Text)
    Text2 = Application.WorksheetFunction.Trim(Text)
End Sub
2
1702 / 189 / 19
Регистрация: 20.11.2011
Сообщений: 281
27.01.2012, 17:52 8
Спасибо большое за ликбез. В качестве алаверды встречный ликбез:-)
Visual Basic
1
2
3
4
5
6
Sub werw()
    Text = " hwfks ,mnbckj   sdbckb khfkjhfhf ljh'  dljpjpjdp    jdpqjd    pqwjd  poq "
    Text2 = Application.WorksheetFunction.Trim(Text)
    Text3 = Application.Trim(Text)
    MsgBox Text2 = Text3
End Sub
2
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
29.01.2012, 03:36 9
может, кому будет интересно... вариант на регулярных выражениях
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Sub c()
    ss = InputBox("Vvedite stroky", , "  The quick brown fox jumps over the lazy dog. dog lazy the over jumps fox brown quick The")
    Set re = CreateObject("vbscript.regexp")
    Do
        re.Pattern = "\b(\w+)\b.*\b\1\b"
        Set mtchs = re.Execute(ss)
    If mtchs.Count = 0 Then Exit Do
        re.Pattern = mtchs(0).SubMatches(0)
        ss = re.Replace(ss, "")
    Loop
    MsgBox ss
End Sub
1
29.01.2012, 03:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2012, 03:36
Помогаю со студенческими работами здесь

Новые реквизиты или стоковое решение? + Не удаляются заказы поставщику УТ11.2 КиЗ ГИСМ
Друзья, тема одна, вопроса два. Очень нужна Ваша помощь. 1) Не удаляются заказы поставщику.Причина...

Локальные переменные удаляются при выходе из области видимости или просто становятся невидимыми в новом контексте?
Локальные переменные удаляются при выходе из области видимости или просто становятся невидимыми в...

Выбрать самые встречающиеся слова в строке
Надо считать текст из Rich TextBox в строку, разбить её на слова,выбрать самые встречающиеся и...

Не удаляются \n
Здравствуйте уважаемые форумчане, появилась небольшая проблема... немогу удалить символы \n из...

Не удаляются пробелы!
Хочу удалить пробелы со строки .Не получилось .Что я делаю не так??? public static void Main()...

Не удаляются файлы
Уважаемые форумчане! Прошу помочь решить такую проблему:не могу удалить два файла появившиеся...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru