On-line: гостей 3. Всего: 3 [подробнее..]
АвторСообщение





Пост N: 116
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 01.08.17 16:22. Заголовок: Разделить файл


Есть большой текстовый файл, нужно его поделить по числу строк. Например, кусками по 10 000 строк. Или по 100 000. Есть способ?

Понятно, что можно искать CHR(13)+CHR(10) и отрезать по кусочку, но как-то очень это долго. Причем, длительность еще не самая большая проблема.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 5465
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.17 18:45. Заголовок: rvu пишет: Может бы..


rvu пишет:

 цитата:
Может быть, позднее попробую способ Андрея, тоже интересно.


Я не знаю, можно ли в переменную загнать 10 Гб ( я так понял это размер файла) ?
cTxt := HB_Memoread("имя и путь к файлу")

До 1 Гб делал. Нужно пробовать.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 125
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 04.08.17 21:49. Заголовок: Andrey пишет: Я не ..


Andrey пишет:

 цитата:
Я не знаю, можно ли в переменную загнать 10 Гб ( я так понял это размер файла) ?




У меня не получилось. Я выше писал об этом.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5467
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.08.17 16:11. Заголовок: Всем привет ! Просто..


Всем привет !
Просто интересно:
1) Какая максимальная текстовая строка может быть в Харборе ?
2) Какой максимальный размер одномерного массива может быть в Харборе ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3576
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.08.17 09:23. Заголовок: Ограничение длины ст..


Ограничение длины строки для Harbour 32-bit - 4Г, размер массива соответственно 4 млрд элементов. С хвостиком, естественно.
Для Harbour 64-bit - это 2^64 байт, или элементов. Это какие-то там сумасшедшие эксибайты, где-то 10 в 20й степени.
Но даже выделять гигабайты в программе крайне не рекомендуется. Если и хватит виртуальной памяти, это не будет способствовать стабильной работе OS. Выделять такой объем памяти под массив строк еще хуже, чем для одной строки, так как памяти понадобится больше.
Для работы с таким огромным массивом строк (если строка в среднем 50 байт, это будет 200 млн.строк) лучше сделать таблицу, можно и dbf, с полем скажем типа Variant (это разновидность memo). Сформировать эту таблицу, и ползать по ней, не перенапрягая несчастную операционную систему гигантскими запросами.


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 126
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 07.08.17 11:44. Заголовок: Pasha пишет: Но даж..


Pasha пишет:

 цитата:
Но даже выделять гигабайты в программе крайне не рекомендуется. Если и хватит виртуальной памяти, это не будет способствовать стабильной работе OS.




У меня есть еще одна задача, где я файл размером немного больше гига делю по строчкам. Компьютер с 4 гигами оперативки нормально к такому относится.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1319
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 07.08.17 13:23. Заголовок: rvu пишет: У меня е..


rvu пишет:

 цитата:
У меня есть еще одна задача, где я файл размером немного больше гига делю по строчкам. Компьютер с 4 гигами оперативки нормально к такому относится.


Может незаметно настать момент, когда файл будет гораздо больше и ОС им подавится. Присоединюсь к Павлу, лучше использовать dbf.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3577
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.08.17 13:52. Заголовок: Вот именно. У меня к..


Вот именно. У меня как раз комп с 4Г
Для harbour 32-bit выдаю

space(1000000000)

секунда задержки, и запрос выполняется

а для
space(2000000000)

программа сначала задумывается на несколько секунд, а затем вываливается с ошибкой 9006, хоть предел размера строки на 4Г не превышен.
ОС не смогла выполнить запрос. А может выполнить, но другая задача захлебнется от нехватки памяти.

Дополню: все это касается 64-битной ОС. Для 32-битной дело обстоит еще печальнее.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3578
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.08.17 08:57. Заголовок: Берем Harbour-64, ОС..


Берем Harbour-64, ОС и комп тот же: win7-64 и 4G RAM
запрашиваем
space(1000000000)

Без проблем, одна секунда - и все в порядке.
Поднимаем ставки
space(2000000000)
space(3000000000)
10-15 секунд задержки, но система справляется.

Идем на рекорд:
space(4000000000)
Программа "виснет" на несколько минут, ОС тоже, индикатор диска бешено мигает, но в конце концов запрос выполняется.
Затем пару минут ОС ведет себя несколько задумчиво и глючно, видимо, освобождает выделенную память. В конце концов работоспособность восстанавливается.
Дальше пробовать не стал.

Повторюсь: огромные объемы памяти запросить можно, но делать это не стоит. Это как участвовать в соревновании: кто больше скушает водки пельменей. Победить можно, но можно и помереть.


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 28 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 174
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет