Автор | Сообщение |
|
| |
Пост N: 116
Зарегистрирован: 05.11.05
|
|
Отправлено: 01.08.17 16:22. Заголовок: Разделить файл
Есть большой текстовый файл, нужно его поделить по числу строк. Например, кусками по 10 000 строк. Или по 100 000. Есть способ? Понятно, что можно искать CHR(13)+CHR(10) и отрезать по кусочку, но как-то очень это долго. Причем, длительность еще не самая большая проблема.
|
|
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 5465
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.08.17 18:45. Заголовок: rvu пишет: Может бы..
rvu пишет: цитата: | Может быть, позднее попробую способ Андрея, тоже интересно. |
| Я не знаю, можно ли в переменную загнать 10 Гб ( я так понял это размер файла) ? cTxt := HB_Memoread("имя и путь к файлу") До 1 Гб делал. Нужно пробовать.
|
|
|
|
| |
Пост N: 125
Зарегистрирован: 05.11.05
|
|
Отправлено: 04.08.17 21:49. Заголовок: Andrey пишет: Я не ..
Andrey пишет: цитата: | Я не знаю, можно ли в переменную загнать 10 Гб ( я так понял это размер файла) ? |
| У меня не получилось. Я выше писал об этом.
|
|
|
|
| постоянный участник
|
Пост N: 5467
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.08.17 16:11. Заголовок: Всем привет ! Просто..
Всем привет ! Просто интересно: 1) Какая максимальная текстовая строка может быть в Харборе ? 2) Какой максимальный размер одномерного массива может быть в Харборе ?
|
|
|
|
| Администратор
|
Пост 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). Сформировать эту таблицу, и ползать по ней, не перенапрягая несчастную операционную систему гигантскими запросами.
|
|
|
|
| |
Пост N: 126
Зарегистрирован: 05.11.05
|
|
Отправлено: 07.08.17 11:44. Заголовок: Pasha пишет: Но даж..
Pasha пишет: цитата: | Но даже выделять гигабайты в программе крайне не рекомендуется. Если и хватит виртуальной памяти, это не будет способствовать стабильной работе OS. |
| У меня есть еще одна задача, где я файл размером немного больше гига делю по строчкам. Компьютер с 4 гигами оперативки нормально к такому относится.
|
|
|
|
| постоянный участник
|
Пост N: 1319
Зарегистрирован: 27.01.07
|
|
Отправлено: 07.08.17 13:23. Заголовок: rvu пишет: У меня е..
rvu пишет: цитата: | У меня есть еще одна задача, где я файл размером немного больше гига делю по строчкам. Компьютер с 4 гигами оперативки нормально к такому относится. |
| Может незаметно настать момент, когда файл будет гораздо больше и ОС им подавится. Присоединюсь к Павлу, лучше использовать dbf.
|
|
|
|
| Администратор
|
Пост N: 3577
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.08.17 13:52. Заголовок: Вот именно. У меня к..
Вот именно. У меня как раз комп с 4Г Для harbour 32-bit выдаю space(1000000000) секунда задержки, и запрос выполняется а для space(2000000000) программа сначала задумывается на несколько секунд, а затем вываливается с ошибкой 9006, хоть предел размера строки на 4Г не превышен. ОС не смогла выполнить запрос. А может выполнить, но другая задача захлебнется от нехватки памяти. Дополню: все это касается 64-битной ОС. Для 32-битной дело обстоит еще печальнее.
|
|
|
|
| Администратор
|
Пост 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) Программа "виснет" на несколько минут, ОС тоже, индикатор диска бешено мигает, но в конце концов запрос выполняется. Затем пару минут ОС ведет себя несколько задумчиво и глючно, видимо, освобождает выделенную память. В конце концов работоспособность восстанавливается. Дальше пробовать не стал. Повторюсь: огромные объемы памяти запросить можно, но делать это не стоит. Это как участвовать в соревновании: кто больше скушает водки пельменей. Победить можно, но можно и помереть.
|
|
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|