Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как загнать содержимое RichTextBox в массив строк / 6 сообщений из 6, страница 1 из 1
30.08.2007, 19:03
    #34765925
sv375
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как загнать содержимое RichTextBox в массив строк
Всем, привет.

Есть RichTextBox, необходимо загнать строки в массив наиболее оптимальным способом.

Я решил задачу следующим образом:
Код: plaintext
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.
'Ищем конец строки (символы-vbCrlf)
    ' и заносим в массив mixArr()
    
    If Trim(txtMix.Text) = "" Then Exit Sub
    Dim x As Long 'текущая позиция курсора в тексте
    ReDim mixArr( 0 )
    x =  1  'íначинаем поиск с первого символа
    'ищем конец строки
    StrEndPoz = InStr(x, txtMix.Text, vbCrLf)   'позиция конца строки
    
    'если конец строки найден, увеличиваем размерность массива на единицу
    'выделяем строку и присваиваем ее элементу массива mixArr()
    m =  0 
    While StrEndPoz <>  0 
        ReDim Preserve mixArr(m) 'увеличили размерность массива
        mixArr(m) = Mid$(txtMix.Text, x, StrEndPoz - x)   'записали строку в массив
        x = StrEndPoz +  2   'перемещаем курсор на 2 символа от конца строки
        m = m +  1  'увеличили счетчик 
        StrEndPoz = InStr(x, txtMix.Text, vbCrLf)
    Wend
    'выделяем последнюю строку
    If x < Len(txtMix.Text) Then
        ReDim Preserve mixArr(m) 'увеличили размерность
        mixArr(m) = Mid$(txtMix.Text, x)
    End If

Только работает очень медленно, при числе строк около 10000 заполняет минут за 20.
Хотелось бы ускорить.
Не подскажете как?
...
Рейтинг: 0 / 0
30.08.2007, 19:18
    #34765952
sv375
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как загнать содержимое RichTextBox в массив строк
вспомнил про split, сейчас попробую
...
Рейтинг: 0 / 0
30.08.2007, 19:23
    #34765961
sv375
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как загнать содержимое RichTextBox в массив строк
Split все решил.
Теперь другая задача:
нужно отсортировать массив и удалить дубликаты.
...
Рейтинг: 0 / 0
30.08.2007, 19:59
    #34766033
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как загнать содержимое RichTextBox в массив строк
sv375,
технически проблема с оригинальным кодом состоит в многократном обращении к свойству txtMix.Text. При этом каждый раз создаётся копия строки. Достаточно скопировать текст в строковую переменную перед началом работы, и потом обращаться к ней, чтобы получить прирост производительности на порядки. На мелочи типа увеличения размера массива на 1 за раз и тип массива Variant можно не обращать внимания.

По удалению дубликатов: если это не учебная задача, то вместо массива можно просто использовать Scripting.Dictionary, где в качестве ключей использовать сами (не пустые) строчки, плюс игнорировать ошибку, что такой ключ в коллекции отсутствует.
...
Рейтинг: 0 / 0
30.08.2007, 20:00
    #34766036
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как загнать содержимое RichTextBox в массив строк
Поправка: что такой ключ в коллекции уже присутствует .
...
Рейтинг: 0 / 0
30.08.2007, 20:06
    #34766042
sv375
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как загнать содержимое RichTextBox в массив строк
Спасибо, поробую.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как загнать содержимое RichTextBox в массив строк / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]