Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,288

Проход по всем словам, находящимся в переменной

08.03.2013, 10:03. Показов 2788. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, в переменную s текст попадает по коду:
Visual Basic
1
2
3
Dim s As String
    'обрабатываемый текст в переменную
    s = Selection.Text
обрабатываю слова, находящиеся в переменной так:
Visual Basic
1
2
3
4
5
6
7
8
  Dim Обрабатываемый_текст As Range
    'создать объект согласно обрабатываемому тексту в документе
    Set Обрабатываемый_текст = ActiveDocument.Range(Start:=Начало_обрабатываемого_текста_в_документе, End:=Конец_обрабатываемого_текста_в_документе)
 
    Dim Количество_обрабатываемых_слов_в_документе As Long
    Количество_обрабатываемых_слов_в_документе = Обрабатываемый_текст.Words.Count
  For u = 1 To Количество_обрабатываемых_слов_в_документе
......
Знаю, что
Visual Basic
1
2
3
 'последовательный проход по коллекции итератором быстрее, чем обращение к произвольному элементу по индексу
        'For x In — переменная x называется итератором, объектом, в котором содержится ссылка на очередной элемент коллекции/массива
        'For x = — переменная x называется индексом, порядковым номером произволного элемента коллекции/массива
1. Это так?
2. Как пройтись в данном случае по словам переменной? через For Each u In каков код?
Спасибо
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2013, 10:03
Ответы с готовыми решениями:

MS Outlook 2007: Как применить форматирование ко всем фотографиям, находящимся в теле письма
Доброго всем времени суток! Вопрос заключается в следующем: возможно ли применить форматирование фотографий каким-либо образом ко всем...

Проход по всем TextBox
Мне нужно перевести слледующее в С# (Спасибо) For Each xTextBox In Me.Controls If TypeName(xTextBox) = "TextBox"...

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

6
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
08.03.2013, 11:06
Если слова разделены пробелами, то:

Visual Basic
1
      Words_arr=Split(Text$," ")
а потом:

Visual Basic
1
2
3
       for i%=0 to Ubound(Words_arr,1)
            wd$=Words_arr(i%) ' очередное слово
       Next i%
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,288
08.03.2013, 11:14  [ТС]
этот способ быстрее моего? назовём его способ 2
спасибо, а строго так: For x In можно, назовём его способ 3, и какой из трёх самый быстрый?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
08.03.2013, 11:23
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
и какой из трёх самый быстрый?
- надо проверить. Но есть ли смысл? Слов-то сколько? Если в переменную s загружаешь "Войну и мир", тогда смысл есть.
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,288
08.03.2013, 13:50  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Но есть ли смысл? Слов-то сколько? Если в переменную s загружаешь "Войну и мир", тогда смысл есть
да, вроде Войны и мира, что проверить можно практически это я знаю, а что говорит теория??

Добавлено через 1 час 12 минут
есть смутные сомнения, что
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
For u = 1 To Количество_обрабатываемых_слов_в_докумен те
и
Цитата Сообщение от Catstail Посмотреть сообщение
for i%=0 to Ubound(Words_arr,1)
одно и тоже, то есть от ... и до ...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
11.03.2013, 03:08
Думаю, for each будет медленнее. Все же переменная там подставляется исключительно типа Variant.

Visual Basic
1
2
3
4
Dim i
for each i in Split(Text$)
    Stop
Next i
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
11.03.2013, 03:31
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dragokas Посмотреть сообщение
Думаю, for each будет медленнее.
Точно, но очень незначительно. Код тестирования:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub test()
    Dim pc As New clPerformanceCounter
    Dim i%, wrd, wd$, Words_arr
    Words_arr = Split(ActiveDocument.Range.Text, " ")
    pc.Run "Перебор циклом For Each"
    For Each wrd In Words_arr
        wd$ = wrd ' очередное слово
    Next wrd
    pc.StopCounter
    pc.Run "Перебор циклом For i"
    For i% = 0 To UBound(Words_arr, 1)
        wd$ = Words_arr(i%) ' очередное слово
    Next i%
    pc.StopCounter
    Debug.Print "Слов: " & UBound(Words_arr)
End Sub
Результаты:
Code
1
2
3
4
5
Имя процедуры: Перебор циклом For Each
Длительность: 0,0044394106 секунд.
Имя процедуры: Перебор циклом For i
Длительность: 0,0030159523 секунд.
Слов: 6839
Класс для замера производительности
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Option Explicit
'апи функция для получения значения счетчика
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
'апи функция для получения значения частоты
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
'апи функция для копирования области памяти
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'структура для хранения 64-разрядного числа
Private Type LARGE_INTEGER
    LowPart As Long
    HighPart As Long
End Type
Dim T As Long, _
    liFrequency As LARGE_INTEGER, _
    liStart As LARGE_INTEGER, _
    liStop As LARGE_INTEGER
    
Dim cuFrequency As Currency, cuStart As Currency, cuStop As Currency
'Имя процедуры, вызвавшей счётчик
Private m_ProcName As String
'Состояние счётчика производительности
Private m_CounterEnabled As Boolean
 
Public Property Get Enabled() As Boolean
    Enabled = m_CounterEnabled
End Property
 
'Запуск счётчика производительности
Public Sub Run(Optional ByVal ProcName As String = "")
    m_CounterEnabled = QueryPerformanceFrequency(liFrequency) <> 0
    If m_CounterEnabled Then
        'конвертировать 64-разрядное число в тип currency
        cuFrequency = LargeIntToCurrency(liFrequency)
        
        'получить количество "тиков"
        QueryPerformanceCounter liStart
    Else
        Debug.Print "Ваше аппаратное обеспечение не поддерживает счетчик производительности высокой точности!"
    End If
     m_ProcName = ProcName
End Sub
'Остановка счётчика производительности
Public Sub StopCounter()
    If m_CounterEnabled Then
        'получить количество "тиков"
        QueryPerformanceCounter liStop
        
        'конвертировать 64-разрядное число в тип currency
        cuStart = LargeIntToCurrency(liStart)
        cuStop = LargeIntToCurrency(liStop)
        
        'вычислить как много времени затрачено, и показать результат
        DebugPrint CStr(Round((cuStop - cuStart) / cuFrequency, 10))
    End If
End Sub
 
Private Sub DebugPrint(ByVal CounterValue As String)
    Dim s As String
    If Len(m_ProcName) > 0 Then s = "Имя процедуры: " & m_ProcName & vbCr
    s = s & "Длительность: " & CounterValue & " секунд."
    Debug.Print s
End Sub
 
'функция для конвертирования 64-разрядного числа в тип currency
Private Function LargeIntToCurrency(liInput As LARGE_INTEGER) As Currency
          'копировать 8 байт из 64-разрядного в currency
    CopyMemory LargeIntToCurrency, liInput, LenB(liInput)
    
    'adjust it - хз =)
    LargeIntToCurrency = LargeIntToCurrency * 10000
End Function
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2013, 03:31
Помогаю со студенческими работами здесь

Проход по всем полям таблицы
Помогите народ!! Есть 2 таблицы(Q1 и T3). В одной из них (T3) есть поле &quot;srok&quot; в которое вводится дата. Пытаюсь написать код для того,...

Фильтр по всем словам в datagridview
аудиозаписиBindingSource.Filter = &quot; LIKE'&quot; + textBox1.Text + &quot;%'&quot;; у меня есть этот код, но он ищет по первому слову, как сделать чтобы...

Проход по всем элементам MenuStrip и NullReferenceException was unhandled
Добрый день! Сразу скажу, что в программировании я неселен. Для облегчения своей работы потребовалось написать небольшенькую...

Рекурсивный проход по всем папкам и удаление файла по имени
Добрый день Пытаюсь сделать скрипт для который бы проходил по всем папкам на сервере и удалял файл с нужным именем Вот склепал из...

Поиск в таблице по всем указанным словам
Помогите пожалуйста с реализацией такой задачи. Имеется определённая таблица table в которой содержится поле с описанием товара about....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru