Как обработать большой текстовый файл - 1Гб?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение alex77755 » 20.12.2009 (Вс) 9:57

В общем, тот ещё геморрой..

Вот и я к тому же. А если нужно вырать нужные столбцы с помощью Input то можно запросить InptBox-ом или TexBox

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Mikle » 20.12.2009 (Вс) 10:41

alex77755
В твоём файле строки переносятся через chr(13), chr(10), а у Димона только chr(10).
Нужно быть внимательнее.

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение alex77755 » 20.12.2009 (Вс) 12:05

Так я же просто скопипастил с той страници файл. Откуда же они взялись? Сейчас проверил. У меня действительно:
74 48
75 48
76 13
77 10
Откуда он, подлец, только берётся. Я копипастил со второй страницы в блокнот. Сейчас попробовал через Шифт+Ф4 в ТоталКомандере - результат тот же. Тогда надо разбираться с кодом: где что поправить. Или попробую отредактировать файл. Спасибо за подсказку.
Визуально же их не видно. Хотя можно было догадаться "Строка 76 символов" а у меня 77

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение iGrok » 20.12.2009 (Вс) 12:50

alex77755 писал(а):Так я же просто скопипастил с той страници файл. Откуда же они взялись?

Ты не знал, что в винде перевод строки = vbCrLf = "chr(13) + chr(10)"?
И какой бы текст ты не "скопипастил" - в нём будут именно такие переводы?

Если ты, конечно, не пользуешься альтернативными текстовыми редакторами, типа notepad++, и не выставляешь там вручную "UNIX-формат" или "MAС-формат"..
label:
cli
jmp label

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Twister » 20.12.2009 (Вс) 13:37

alex77755 писал(а):Это кто? Пачему не знаю?
Есть, что поискать
Ну ссылку тебе уже дали. Фишка в том, что ты сможешь бежать по файлу так, как буд-то он весь загружен в память. Для юзермода это все выглядит абсолютно прозрачно - создаешь проекцию файла и общаешься с ней, как с непрерывным блоком памяти. Система будет подгружать недостающие страницы автоматически, за счет этого вразы сократится кол-во физических обращений к файлу.
А я все практикую лечение травами...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Mikle » 20.12.2009 (Вс) 16:30

alex77755 писал(а):Откуда он, подлец, только берётся. Я копипастил со второй страницы в блокнот.

Поэтому я Димона и просил не копипастить, а выложить фрагмент самого файла. Дальше смотрел через FAR в режиме бинарного просмотра.
И, как бы ты ни мапил файл в память, через бинарный ввод-вывод всё равно будет быстрее, чем через строки. Нет конвертации сначала в юникод, потом обратно.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Dimon111 » 21.12.2009 (Пн) 11:01

Mikle писал(а):Не пойму, о чём речь вообще. Я уже выдал рабочий вариант (до 2 Гб, что и требовалось), который в разы быстрее.

Ваш вариант вполне рабочий.

Я им пользуюсь. Спасибо.

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение alex77755 » 23.12.2009 (Ср) 18:22

Три дня не было инета. Не мог ответить.
Работает действительно быстрей. Но две траблы вылезают.
1 При количетве записей 10000 строк в выходном файле записей 8192. Где остальные?
при попытке посунуть 1.2 Гб формирует файл больше 2 Гб (2048) и вылетает с ошибкой.
В коде некоторые цифры подправил, что бы весь файл не переписывать, но видимо здесь d1(16385) As Byte, d2(4095) тоже надо было

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение Sirik » 24.12.2009 (Чт) 14:21

извините за грубость, но блин сколько можно одно и то же переживать?
если афтар файлик обрабатывает раз в сутки, то какая, блин, разница ? решения есть уже, и их много
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение alex77755 » 24.12.2009 (Чт) 19:58

Я не пережёвываю, а изучаю возможности и варианты работы. В данном случае пока не разобрался с массивами d1(16385) As Byte, d2(4095) As mType Особенно второй(его тип). Почему именно эти цифры? Если длина строки 76 символов было бы логично(для меня иметь массивы кратными 76. Но нет. И это постивило в тупик. Думал, что может быть Mikle подскажет, каким образом они связаны. Просто раньше не приходильсь таким образом обрабатывать текстовые фаилы.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как обработать большой текстовый файл - 1Гб?

Сообщение iGrok » 24.12.2009 (Чт) 21:46

alex77755 писал(а):Я не пережёвываю, а изучаю возможности и варианты работы. В данном случае пока не разобрался с массивами d1(16385) As Byte, d2(4095) As mType Особенно второй(его тип). Почему именно эти цифры? Если длина строки 76 символов было бы логично(для меня иметь массивы кратными 76. Но нет. И это постивило в тупик. Думал, что может быть Mikle подскажет, каким образом они связаны. Просто раньше не приходильсь таким образом обрабатывать текстовые фаилы.

Первый - просто буфер чтения на 16кб.
Второй - просто буфер записи на 32кб.
Они вообще никакого отношения к самой обработке не имеют.
Просто для увеличения скорости так сделано.

Изучай цикл подробнее.
label:
cli
jmp label

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 54

    TopList