powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Какой метод лучше для обработки больших строк?
10 сообщений из 35, страница 2 из 2
Какой метод лучше для обработки больших строк?
    #35316436
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chelovek TapokА вы попробуйте мой вариант (у меня самые объемные страницы обрабатываются не более чем за 2 сек), большая часть времени уходит на скачивание.
P.S. Мне и самому интересно, какой из этих вариантов эффективнее, только сейчас не могу проверить.

Делал недавно выдергивание инфы с сайта под заказ (порядка 10000 связанных страниц с информацией). С парсингом отлично справился используя MSHTML.HTMLDocument, а с загрузкой страниц Microsoft.XmlHttp. Больше ничего не понадобилось. Рекомендую на будущее - все просто и удобно...

А аналогов StringBuilder для конактации строчек в интернете полно...
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35316892
Chelovek Tapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndrF
Делал недавно выдергивание инфы с сайта под заказ (порядка 10000 связанных страниц с информацией). С парсингом отлично справился используя MSHTML.HTMLDocument, а с загрузкой страниц Microsoft.XmlHttp. Больше ничего не понадобилось. Рекомендую на будущее - все просто и удобно..


Спасибо. С этой библиотекой я работал, но возникла одна проблема, которую я не решил (библиотека слетала при долгой обработке и потом, после ее отключения/подключения excel ее не воспринимал), поэтому пришлось написать свой парсер (что было быстрее, нежели искать причину первой проблемы)
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35317158
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chelovek TapokА вы попробуйте мой вариант (у меня самые объемные страницы обрабатываются не более чем за 2 сек), большая часть времени уходит на скачивание.
P.S. Мне и самому интересно, какой из этих вариантов эффективнее, только сейчас не могу проверить.
Деление строк в моем файле не упорядоченно, т.е. нет никакой закономерности. Приведу грубый пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
'Test', 12, 3, 4, 'ABC', 5
'Test', 12, 4, 100, 'Z', 10
'Test', 100, 56, 0, 'S', 100 'Test', 5, 1, 1, 'ABC', 6
'Test', 1, 2, 0, 'ABC
CDEF', 5
'Test', 12, 4, 100, 'Z', 10
'Test', 1, 2, 0, 'ABC
CDEF', 5  'Test', 100, 56, 0, 'S', 100 'Test', 5, 1, 1, 'ABC', 6
'Test', 12, 4, 100, 'Z', 10
Поэтому Ваш метод кажется не подойдет в моем случае ;)
Если хотите попробуйте обработать такой пример.
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35317463
Chelovek Tapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orunbek
Если хотите попробуйте обработать такой пример.


Хочу...
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Option Explicit
'strPut-файл, который надо распарсить
'VihodnoiMassiv()-массив, в котором сохранится распарсенный файл
Sub ParserCSV(strPut As String, VihodnoiMassiv() As String)
    Dim i As Long
    Dim Txt As String 'переменная в которую записывается код
    Dim HitriiIndex As Long
    Dim HitriiMassiv() As String
    
    Erase VihodnoiMassiv

    Dim TIME1 As Variant
    TIME1 = Timer
    
    'считываем файл в массив
    Open strPut For Input As # 1 
    Do Until EOF( 1 )
        DoEvents
        Line Input # 1 , Txt
        HitriiIndex = HitriiIndex +  1 
        ReDim Preserve HitriiMassiv( 1  To HitriiIndex)
        HitriiMassiv(HitriiIndex) = Txt
    Loop
    Close # 1 
    
    'перекидываем весь код в переменную
    Txt = Join(HitriiMassiv, "")
    
    Erase HitriiMassiv
    
'    Txt = Replace(Txt, Chr(10), "") -может тоже стоит включить?
    Txt = Replace(Txt, Chr( 13 ), "")
    Txt = Replace(Txt, "  ", "") ' удаляем двойные пробелы
    Txt = Replace(Txt, "'", ",")
    Txt = Replace(Txt, ", ,", ",")
    Txt = Replace(Txt, ",,", ",")
    
    Txt = Replace(Txt, ",", Chr( 134 ) & Chr( 134 ) & Chr( 134 ))
    
'    Kill strPut
    
    VihodnoiMassiv = Split(Txt, Chr( 134 ) & Chr( 134 ) & Chr( 134 ))
    
    MsgBox Timer - TIME1
End Sub
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35317701
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Э... А в текстовых полях могут быть запятые, кавычки, табуляция ?
;)
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35318337
Chelovek Tapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndrF
Э... А в текстовых полях могут быть запятые, кавычки, табуляция ?
;)

+1

И еще непосредственно перед текстом и после всегда числа?
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35319340
Avtopic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyПонятно, самым медленным способом - конкатенацией. Стыдно должно быть за незнание других.
Оформить в класс и юзать вместо &:
Код: plaintext
1.
2.
3.
4.
5.
6.
Option Explicit
Private LenTxt As Long
Private TxtBuf As String
Private LenBuf As Long

...
End Function


orunbekуже нашел приемлемый метод,
единственное класс, который предложил Antonariy заменил на этот:
Fast String concatenation with the String Class
Отличие класса в том, что конкатенация делается через API CopyMemory
Обработка строки теперь делается за 15 секунд ;)

А я предлагаю сравнить возможности этих классов и обычного Join
Код: plaintext
1.
2.
3.
4.
5.
    MyString = Space( 1000 )
    For l =  0  To  999 
        ReDim Preserve Arr(l)
        Arr(l) = MyString
    Next
    Res = Join(Arr, "")
В примере первый Button с использованием класса, второй конкатенацией, третий с Join.
В верхнем левом углу время выполнения.
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35319794
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFЭ... А в текстовых полях могут быть запятые, кавычки, табуляция ?
;)
могут быть
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35320072
Должна быть какая-то закономерность, а иначе смысла нет пытаться распарсить файл.
Вот как мне понять что здесь текст, а что нет?
'as'10'23' - тут может быть текстом и весь фрагмент!
...
Рейтинг: 0 / 0
Какой метод лучше для обработки больших строк?
    #35320273
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поле "автор" дДолжна быть какая-то закономерность, а иначе смысла нет пытаться распарсить файл.
Вот как мне понять что здесь текст, а что нет?
'as'10'23' - тут может быть текстом и весь фрагмент!
все поля в одной строке через запятую
следующая строка может слиться с предыдущим, но между ними хотя бы будет vbCr или vbLf или пробел
количество столбцов зарнее известно
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Какой метод лучше для обработки больших строк?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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