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





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


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

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

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


администратор




Пост N: 6518
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.08.17 16:32. Заголовок: rvu if hb_fuse(T..


rvu
 
if hb_fuse(TMMP+sysname+".doc")#0
do while !hb_feof()
// считаем строки и пишем во временную строку , как набралось нужное кол-во строк , пишем эту строку в файл , Hb_memowrite
Cstr:=hb_freadln())
hb_fskip()
enddo


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



Пост N: 520
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 01.08.17 16:39. Заголовок: А fread не шустрее ..



А fread не шустрее ? Читаем в цикле блок по 64К, парсим этот блок по строкам,
а затем к остатку клеим новые 64К.

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




Пост N: 6519
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.08.17 16:47. Заголовок: fil пишет: А fread ..


fil пишет:

 цитата:
А fread не шустрее ?


Тестить надо

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





Пост N: 117
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 01.08.17 17:07. Заголовок: Спасибо! Покопался н..


Спасибо! Покопался на форуме поиском, нашел примеры интересные. А есть руководство по Харбору, где бы эти и другие полезные функции были описаны? У меня есть какой-то файл, но в нем этих функций нет.

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




Пост N: 5455
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.08.17 19:54. Заголовок: Вот это будет шустре..


Вот это будет шустрее.

  cTxt := HB_Memoread("имя и путь к файлу") 
aDim := HB_ATokens( cTxt, CHR( 13 ) + CHR( 10 ), .T., .T. )

cTxt := ""
FOR nI := 1 TO LEN(aDim)
// здесь обработка строк и запись по кускам
// HB_MemoWrit("имя файла для записи", cTxt)
NEXT



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




Пост N: 6520
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.08.17 21:29. Заголовок: Andrey пишет: Вот э..


Andrey пишет:

 цитата:
Вот это будет шустрее.


Вполне возможно.

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





Пост N: 118
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 03.08.17 09:57. Заголовок: hb_freadln() разбива..


hb_freadln() разбивает строчку на две, если ее длина больше, чем 4096 знаков. Что для меня не подходит. Или отслеживать длину всех строк и потом ошибочные склеивать, или все-таки искать CHR(13)+CHR(10).

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


Пост N: 1545
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 03.08.17 10:05. Заголовок: rvu пишет: Или отсл..


rvu пишет:

 цитата:
Или отслеживать длину всех строк и потом ошибочные склеивать, или все-таки искать CHR(13)+CHR(10)



или переопределить размер буфера

#define _B_SIZE 4096
=>
#define _B_SIZE 32768

и перекомпилировать библиотеку


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





Пост N: 119
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 03.08.17 11:05. Заголовок: Библиотека hbmisc.li..


Библиотека hbmisc.lib? А где взять исходник? Я пользуюсь MiniGUI, .lib файл там такой есть, но что в него компилировать? В установленный у меня харбор полез искать, там явно версия другая, чем в MiniGUI.
Вообще, если не сложно, расскажите подробнее.

Какой-то харбор скачал, тему про компилирование библиотеки нашел, чуть позже попробую. Но если есть какие-то специфические особенности, подскажите, пожалуйста.

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




Пост N: 6521
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.08.17 11:58. Заголовок: rvu пишет: hb_fread..


rvu пишет:

 цитата:
hb_freadln() разбивает строчку на две, если ее длина больше, чем 4096 знаков


После первой автоматом не дописывается CRLF ?

Андрей выше предлагал еще вариант.

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





Пост N: 120
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 03.08.17 12:12. Заголовок: Dima пишет: После п..


Dima пишет:

 цитата:
После первой автоматом не дописывается CRLF ?



Она дописывает его и после первой части и после второй. И вместо одной строки получается две.


Dima пишет:

 цитата:
Андрей выше предлагал еще вариант.



Я помню про него, но сначала хотел с тем вариантом разобраться.

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





Пост N: 121
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 03.08.17 17:44. Заголовок: А в HB_Memoread() то..


А в HB_Memoread() тоже, наверное, ограничения по размеру есть? У меня файл большой, около 10 гигов.

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




Пост N: 6522
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.08.17 21:30. Заголовок: rvu пишет: У меня ф..


rvu пишет:

 цитата:
У меня файл большой, около 10 гигов


Что в нем живет , все собрания сочинений В.И. Ленина ?

ЗЫ
HB_Memoread виснет или что ? Может надо просто подождать , размер то не слабый....

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




Пост N: 1118
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.08.17 22:33. Заголовок: rvu пишет: У меня ф..


rvu пишет:

 цитата:
У меня файл большой, около 10 гигов.


Скорее всего будет ошибка при попытке выделить память.
Нужно читать блоками и парсить блоки как предложил Андрей,
возвращаясь при чтении назад на размер последнего элемена массива.
При этом игнорировать этот последний элемент. Это на тот случай если в нем
только часть строки.
Для файлов вменяемого размер предложение Адрея оптимально.


Задача на 10 минут

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




Пост N: 5456
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.08.17 22:46. Заголовок: Haz пишет: Задача н..


Haz пишет:

 цитата:
Задача на 10 минут


+1

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





Пост N: 122
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 04.08.17 07:29. Заголовок: Dima пишет: HB_Memo..


Dima пишет:

 цитата:
HB_Memoread виснет или что ?




Нет, в нем ограничение, просто не читает весь файл.

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





Пост N: 123
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 04.08.17 11:18. Заголовок: Haz пишет: Нужно чи..


Haz пишет:

 цитата:
Нужно читать блоками и парсить блоки как предложил Андрей, возвращаясь при чтении назад на размер последнего элемена массива. При этом игнорировать этот последний элемент. Это на тот случай если в нем только часть строки.




Казалось, что перекомпилировать библиотеку проще, но пока это не удалось.

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


Пост N: 1546
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 04.08.17 12:12. Заголовок: rvu пишет: Казалось..


rvu пишет:

 цитата:
Казалось, что перекомпилировать библиотеку проще, но пока это не удалось.



Это дело 5-ти минут.
Попробую пошагово описать (как смогу, если что - извините )

Исходные данные : MiniGUI у меня находится на диске C:, BCC на диске F:
Значит в \BATCH\minigui.cfg должны быть прописаны такие строки
MG_BCC=f:\borland\bcc55
MG_ROOT=c:\minigui

В BATCH\hbmk2.bat меняю эту строку
if not defined MG_BCC set MG_BCC=f:\borland\bcc55

Затем иду сюда (мы ведь помним, что MiniGUI для BCC построен на hb 3.2)
и с помощью зеленой кнопки загружаю архив с исходниками (Download Zip)

Извлекаю из указаного архива папку с библиотекой hbmisk и помещаю ее в c:\minigui\source, т.е. в папке Source у нас появилась еще одна папка hbmisk, а в ней нужные нам файлы.

Дальше, не сильно мудрствуя, набираю в командной строке команду
C:\MiniGUI\BATCH\hbmk2.bat C:\MiniGUI\SOURCE\hbmisc\hbmisc.hbp и запускаю ее на выполнение клавишей Enter (я работаю в Far и использую для таких случаев Ctrl + F, но это дело вкуса)

После завершения работы находим в папке с исходниками и нужную нам библиотеку.

Если все работает, правим нужные файлы и опять перекомпилируем.
Вручную перемещаем (заменяем) библиотеку в папку C:\MiniGUI\Harbour\Lib\, но можем и файл проекта поправить - это как кому нравится, в общем несущественно для разовой работы.

Писал эту "инструкцию" дольше чем делал.
Куда вы сбросите файлы с исходниками - это тоже не важно: все имена папок являются вымышленными и любое совпадение с реально существующими или когда-либо существовавшими папками случайно


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




Пост N: 1624
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.17 12:43. Заголовок: rvu Очень давно (с ..


rvu
Очень давно (с S87) использую Скрытый текст



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





Пост N: 124
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 04.08.17 16:47. Заголовок: Петр пишет: Попробу..


Петр пишет:

 цитата:
Попробую пошагово описать (как смогу




Огромное спасибо, все работает! И написано очень доступно.

Всем спасибо за дельные советы!

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

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

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