Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2013, 08:33   #11
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
DiemonStar: Так что на массив потребуется 140-170 мб оперативки...
приведите, пожалуйста, пример кода, который помещает данные в массив, состоящий из 14 млн. строк.



Пример кода без использования VBA-массива: данные из одного текстового файла переносятся в другой текстовый файл:
Код:
Sub Procedure_1()
    
    
    '1. Помещаем в константу "mySource" путь и имя текстового файла,
        'из которого нужно взять данные.
    Const mySource As String = "C:\Users\User\Desktop\Новый текстовый документ.txt"
    
    '2. Помещаем в константу число, которое
        'означает, сколько строк будет в массиве.
    Const mySize As Long = 1000000
    
    '3. Помещаем в константу имя папки, где будут находиться
        'текстовые файлы и первый фрагмент имени файла.
    Const myFolder As String = "C:\Users\User\Desktop\Новая папка\Файл_"
    
    
    Dim myLineIndex As Long
    Dim myString As String
    Dim myFileIndex As Long
    
    
    '4. Открываем текстовый файл, из которого нужно взять данные.
    '"For Input" переводится "для ввода", а нам нужно открыть
        'для чтения. На самом деле всё правильно, просто
        'это какая-то нестыковка в терминах.
    '1 - это имя в виде числа, которое даётся файлу.
        'С помощью этого имени можно обращаться к файлу.
    Open mySource For Input As 1
    
    
    '5. Двигаемся от строки к строке по текстовому файлу.
        'Явно команды нет для перехода с одной строки на другую.
        'Переход к следующей строке происходит после
        'команды "Line Input".
    'Двигаемся от строки к строке, пока не достигнем конца файла.
    Do While EOF(1) = False
        
        '6. С помощью переменной "myLineIndex" будем подсчитывать,
            'сколько строк текстового файла мы уже взяли.
        myLineIndex = myLineIndex + 1
        
        'Если берём первую строку, то создаём и открываем
            'текстовый файл, куда будем помещать данные.
        If myLineIndex = 1 Then
        
            '7. Формируем фрагмент имени текстового файла, в который
                'перенесём данные.
            myFileIndex = myFileIndex + 1
            
            '8. Создаём и одновременно открываем текстовый файл.
                'Здесь также перевод слова "Output" (вывод) не совпадает
                'с тем, для чего мы открыли текстовый файл. Мы его
                'открыли для ввода.
            Open myFolder & myFileIndex & ".txt" For Output As 2
               
        End If
        
        
        '9. Берём данные из текущей строки текстового файла
            'и помещаем в другой текстовый файл.
        '9.1. Сначала в переменную.
        Line Input #1, myString
        '9.2. Затем из переменной в текстовый файл.
        Print #2, myString
        
        
        'Если это последняя строка.
        If myLineIndex = mySize Then
            
            '10. Закрываем текстовый файл.
            Close 2
            
            '11. Подготавливаем переменную "myLineIndex" к следующему использованию.
            myLineIndex = 0
            
        End If
        
    Loop
    
    '12. Закрываем исходный текстовый файл.
    Close 1
    '13. Закрываем текстовый файл, если он не закрыт.
    If myLineIndex <> 0 Then
        Close 2
    End If
    
End Sub

Последний раз редактировалось Скрипт; 28.05.2013 в 09:20.
Скрипт вне форума Ответить с цитированием
Старый 28.05.2013, 17:58   #12
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Пример кода без использования VBA-массива: данные из одного текстового файла переносятся в другой текстовый файл:
дольше всего, кстати

Открывай файл в notepad++, выделяй нужное кол-во строк (они там пронумерованы) и копируй в другой файл.

Наверное, самый быстрый способ "скопировать" 1000 байт
Код:
Sub io()
    Dim SourceStream As Object
    Dim DestinationStream As Object
    
    Set SourceStream = CreateObject("ADODB.Stream")
    Set DestinationStream = CreateObject("ADODB.Stream")

    SourceStream.Open
    SourceStream.LoadFromFile = "C:\1.txt"
    
    DestinationStream.Open
    SourceStream.CopyTo DestinationStream, 1000
    
    DestinationStream.SaveToFile "C:\2.txt", 2
    DestinationStream.Close
    
    SourceStream.Close
End Sub
Тишина – самый громкий звук

Последний раз редактировалось nerv; 28.05.2013 в 18:31.
nerv вне форума Ответить с цитированием
Старый 28.05.2013, 19:04   #13
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

Цитата:
Имеется Большой файл .txt (около 14 млн. строк). 1 строка - 1 слово.
Кстати, мой исходный файл - это словарь (английские слова и буквосочетания).
приведите пример вашего файла

слово (словарь) подразумевает слово и перевод
строка --из личного опыта от 30 до 4000 символов

но---------
англо-русский словарь Мюллера --около 100 тыс строк
непонятно --в каком словаре 14 млн слов
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 29.05.2013, 10:01   #14
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
strannick ... если задача не очень интересная ...
А Вы говорили)))

Спасибо всем большое за отзывы и примеры. Использовал пример от Скрипт (отдельное спасибо!). Вариант хорош лично для меня еще тем, что к каждому слову можно добавить маленькую добавочку. Достаточно прописать строку:
Код:
Print #2, myString & "добавочка"
По времени не замерял, но лично мне в пределах нескольких минут нормально.

shanemac51 Исходный файл - это не словарь перевода. Это словарь английских слов и буквосочетаний. Там и Кембридж, и Оксфорд, и Мюллер. Что-то типа словаря для брута.

Еще раз всем спасибо!!!
strannick вне форума Ответить с цитированием
Старый 01.02.2014, 12:40   #15
piv_
Новичок
Джуниор
 
Регистрация: 22.04.2010
Сообщений: 2
Радость

Цитата:
Сообщение от strannick Посмотреть сообщение
Добрый день, уважаемые форумчане!
Имеется Большой файл .txt (около 14 млн. строк). 1 строка - 1 слово. Пытаюсь разбить его по 1 млн. строк. У EducatedFool на сайте есть макрос разбиения текстового файла на файлы с заданным количеством строк. Но на моем выдает ошибку 7 "Мало памяти". Вручную как-то не очень хочется его делить. Подскажите варианты. Поиск вразумительных вариантов не дал.
Заранее спасибо!

P.S. Щас придет Hugo, загонит все и всех в массивы, поделит и выгрузит
У меня был такой же случай. Количество строк заранее не известно. Я использовал ReDim Preserve...
piv_ вне форума Ответить с цитированием
Старый 01.02.2014, 12:55   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я ReDim Preserve не использую, особенно на большом количестве этих пресервов - т.к. на каждой итерации массив перезаписывается в новый с добавленной строкой.
Вот создайте 1000000 раз новый массив, и скопируйте в него данные другого массива, который постепенно возрастает до миллиона...
Можно в статусбар выводить процесс и наблюдать, как оно на глазах работает всё медленнее и медленнее...
Тогда уж лучше собирать коллекцию без ключа.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
импорт данных из большого txt файла Неологист Microsoft Office Excel 14 28.09.2011 18:45
Импорт в эксел очень большого файла txt danika24 Microsoft Office Excel 10 20.07.2011 16:34
Импорт данных из текстового файла chobo Microsoft Office Excel 7 28.10.2010 14:29
Обработка большого текстового файла и составление по нему отчета erosss Помощь студентам 6 05.05.2010 13:18