Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769

Есть ли быстрый способ преобразования массива строк в одну большую строку?

17.09.2023, 16:37. Показов 670. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли быстрый способ преобразования массива строк в одну большую строку?

У меня есть массив строк - это список файлов на винчестере, их много, больше 10 тысяч. Если мне потребуется сохранить этот список файлов в TXT файл то мне придётся составить одну большую строку для сохранения. Приходит на ум только следующий простой код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Global files_list() As String
Dim i As Long
Dim str As String
 
For i = 0 To UBound(files_list)
        If i <> UBound(files_list) Then
            str = str & files_list(i) & vbNewLine
        Else
            str = str & files_list(i)
        End If
    Next
Но эта процедура для 10 тысяч строк занимает ажно целых 5 секунд. Слишком долго. Хотя сохранение на диск дальше мгновенное. Я вот всё думаю: а есть ли способ преобразовать массив строк в одну большую длинную строку как-нибудь побыстрее?

Добавлено через 7 минут
Прикол в том, что если бы я записывал файл в ANSI кодировку через стандартные методы VB6 то файл записался бы мгновенно, вот таким кодом:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim i As Integer
    Dim FileNo As Integer
    
    ' Инициализировать счётчик
    FileNo = FreeFile
        
    ' Открыть файл для записи в него данных
    Open AppPath + "\Set Wallpaper Plus.dat" For Output As FileNo
        For i = 0 To UBound(files_list)
            If i <> UBound(files_list) Then
                Print #FileNo, files_list(i) ' Записывать в файл строки из массива
            Else
                Print #FileNo, files_list(i); ' Записать в файл последнею строку
            End If
        Next
    Close FileNo ' Закрыть файл по завершении записи в него данных
Добавлено через 39 секунд
Но я не могу сделать тоже самое для записи UTF-8

Добавлено через 35 секунд
Чтобы записать файл в UTF8 я должен иметь одну большую строку либо байтовый массив что почти одно и тоже
А у меня массив строк именно

Добавлено через 2 минуты
Поэтому я в недоумении что мне делать

Добавлено через 15 минут
На ум приходит только clsStringBuilder громоздкий
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2023, 16:37
Ответы с готовыми решениями:

Самый быстрый способ склеивания строк
Закешировал файл в строку, десериализовал данные в массив экземпляров специально созданного класса. Далее обработал данные, и пытаюсь опять...

Есть ли простой способ удалить строку из массива (не из матрицы чисел)
Здравствуйте! Прошу помочь разобраться: есть ли простой способ удалить строку(столбец) из массива разнородных элементов (не из матрицы...

Самый быстрый способ масовой вставки строк
Допустим если надо вставить около тысячи строк, под одной - очень долго, может быть кто-то сможет предложить более быстрый способ?

8
1390 / 847 / 92
Регистрация: 08.02.2017
Сообщений: 3,613
Записей в блоге: 2
17.09.2023, 16:41
Ты же мне давал коды, там вроде бы join просто с дурной скоростью, по моему этот сообщений
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.09.2023, 16:45  [ТС]
testuser2, я просто забыл что такое Join если честно
0
1390 / 847 / 92
Регистрация: 08.02.2017
Сообщений: 3,613
Записей в блоге: 2
17.09.2023, 17:05
HackerVlad, еще можно сразу в одну большую строку писать весь спок, с помщью того же mid-а..
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.09.2023, 17:24  [ТС]
Короче говоря clsStringBuilder не нужен, достаточно просто Join даже стандартный VB'шный работает достаточно быстро для 600КБ

Добавлено через 57 секунд
10 тысяч строк теперь сохраняет мгновенно

Добавлено через 1 минуту
Почему строка = строка + добавка работает так медленно... непонятно...
0
1390 / 847 / 92
Регистрация: 08.02.2017
Сообщений: 3,613
Записей в блоге: 2
17.09.2023, 17:39
Цитата Сообщение от HackerVlad Посмотреть сообщение
Почему строка = строка + добавка работает так медленно... непонятно...
потому что при каждой прибавке происходит полная перезапись (пересоздание) единой большой строки, а правилно когда, сначала создается большой блок и в него все пишется, сам блок уже не пресоздается.

Добавлено через 2 минуты
Цитата Сообщение от HackerVlad Посмотреть сообщение
10 тысяч строк
10 тыс. это даже для vba смешная цифра
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.09.2023, 17:48  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
10 тыс. это даже для vba смешная цифра
тем ни менее, строка = строка + добавка занимала целых 5 секунд времени! боюсь представь что было бы, если бы было миллион строк...

Добавлено через 4 минуты
Вот как работает Join

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Command1_Click()
    Dim strs(2) As String
    Dim str As String
    
    strs(0) = "str1"
    strs(1) = "str2"
    strs(2) = "str3"
    
    str = Join(strs, vbCrLf)
    Text1.Text = str
End Sub
Добавлено через 39 секунд
При десяти тысячах в цикле почти мгновенно обрабатывает кстати
0
1390 / 847 / 92
Регистрация: 08.02.2017
Сообщений: 3,613
Записей в блоге: 2
17.09.2023, 17:48
Цитата Сообщение от HackerVlad Посмотреть сообщение
Вот как работает Join
оставь это для детей )
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.09.2023, 15:23  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
оставь это для детей
Это не для детей, а для тех людей которые будут читать эту тему и искать решение.

Добавлено через 1 минуту
Так же решением является класс clsStringBuilder. Но вариант с функцией Join меня устраивает больше, так как не нужно писать много кода. И исполняемый файл EXE в конечном итоге будет весить меньше.

Добавлено через 1 минуту
Хотя Join может быть медленнее, если не использовать самописный быстрый. Поэтому тут тоже под каждую задачу наилучшим может быть разное решение. В моём же случае 10 тысяч строк обрабатывает даже встроенный Join достаточно быстро, почти мгновенно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2023, 15:23
Помогаю со студенческими работами здесь

Есть ли быстрый способ увеличить все элементы матрицы на 1
Здравствуйте. я сейчас делаю это так for (int i = 0; i &lt; 10; ++i) for (int j = 0; j &lt; 10; ++j) matr++;...

Быстрый способ подсчитать количество строк, удовлетворяющих условию
Здравствуйте, подскажите пожалуйста быстрый способ подсчитать количество строк удовлетворяющих условию в очень большом текстовом файле....

Есть ли быстрый способ проверки значения в таблице из кода VBA?
На форме есть поле, пользователь вводит некое значение, хочется сразу его проверять, не присутствует ли оно уже в какойто определённой...

Наиболее быстрый способ работы с файлом Excel (около 20000 строк)
Здравствуйте ребята, хотел спросить у вас совета. Есть программа по распечатке ценников по артикулу или штрихкоду товара. Какой обработкой...

Разбить одну большую строку, на строчки)
Всем привет! Подскажите пожалуйста, как разбить вот примерно тааааааааакую строку...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru