Разделение большого текстового файла на короткие файлы - PullRequest
0 голосов
/ 01 января 2012

Я хочу разделить (или разбить) большой текстовый файл на короткие текстовые файлы, например, у меня есть file.txt и его 700 МБ, и я хочу разделить его на семь (100 МБ) текстовых файлов.

Что я собираюсь делать? Есть ли способ разделить его, не открывая текстовый файл и не меняя содержимое текстового файла? Если есть известные алгоритмы для этой проблемы, пожалуйста, поделитесь ими. Спасибо

Ответы [ 5 ]

7 голосов
/ 01 января 2012

На случай, если это применимо к вашей среде и потребностям, стандартное решение Unix должно использовать split:

split -C 100M input.txt

-C заставляет разделение делиться на строки вместо байта / символа. Вместо этого используйте -b, если вы предпочитаете разделять определенный байт.

2 голосов
/ 01 января 2012

Если вы используете Unix

split -b100m filename part разделит имя файла на parta, partb, partc и т. Д.

2 голосов
/ 01 января 2012

Простой подход -

  1. Получите длину файла, определите размер куска

  2. Посмотрите, сколько файлов вы хотите создать - (n = длина файла / размер чанка). Если остаток, количество файлов будет n + 1.

  3. Открыть файл в режиме чтения.

  4. Создать файл в режиме записи. (возможно, добавьте суффикс 1..n для обозначения фрагмента)

  5. записать в файл количество фрагментов (или оставшихся байтов, если остаток <размер фрагмента), закройте этот файл. </p>

  6. повторите 4-5 для n фрагментов.

0 голосов
/ 01 января 2012

В дистрибутив Perl входит утилита split, если вы не используете Unix.Он использует -l для разделения строки.

0 голосов
/ 01 января 2012

В случае, если вы хотите иметь как опции разделения по размеру, так и по номеру строки (что в некоторых случаях вам нужно), и это в среде Windows, вы можете использовать программу GSplit. У меня когда-то была эта проблема, и она работала на меня. Вы можете загрузить его с помощью Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...