Как разбить текстовый файл на части

05.02.2011

Понадобилось решить одну практическую задачу которая подразумевала получить из одного файла с несколькими тысячами строк, много файлов по 3 строки. Впрочем количество строк не важно оно могло быть и 1 и 100….

Пошерстив Сеть, нашел один скрипт которым это можно сделать не прибегая ни к какому спец ПО.

Создаем bat файл со следующим содержимым

setlocal enabledelayedexpansion
set q=0
set N=3
for /F «delims=   » %%i in (file.txt) do (
set /a q+=1
if !q! GTR !N! set /a N+=3
@echo %%i >> file!N!.txt
)

Собственно параметр N указывает желаемое количество строк по которым файл будет делиться, а file.txt это имя разделяемого файла. Ложим в одну папку и запускаем, и наш текстовик разбит на части. Вуаля!

23 комментария

  • Ден 11.02.2011 в 6:30 пп

    Отлично работает, но вместо пустых строк из файла пишет
    «Режим вывода команд на экран (ECHO) отключен.»
    или
    «Режим вывода команд на экран (ECHO) включен.»

    • admin 11.02.2011 в 6:41 пп

      попробуй в самом начале поставить @echo off
      правда тогда пустые строки будут отбрасываться вообще

      • Ден 16.02.2011 в 9:14 пп

        Сразу попробовал и @echo off и @echo on.
        В обоих случаях пишет в файлы вместо пустых строк
        «Режим вывода команд на экран (ECHO) отключен/включен».

        • admin 17.02.2011 в 9:08 пп

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

          • Ден 30.03.2011 в 11:20 пп

            Вместо строк состоящих их пробелов «Режим вывода команд на экран (ECHO) отключен/включен».

  • Roman 04.04.2011 в 8:10 дп

    надо было разбить fin4.txt по 80т срок, файлик получился таким :

    @echo off
    setlocal enabledelayedexpansion
    set q=0
    set N=80
    for /F «delims= » %%i in (fin4.txt) do (
    set /a q+=1
    if !q! GTR !N! set /a N+=80
    @echo %%i >> file!N!.txt
    )

    Спасибо

  • Андрей 14.09.2011 в 2:17 дп

    Не получается, я чайник!
    Надо разбить txt файл из 4000000 строк по 50000.
    Подскажите, как, плиз!

  • Андрей 14.09.2011 в 2:21 дп

    Точно чайник. Не там поставил имя файла.
    Все получилось, спасибо!

  • голова 10.01.2012 в 2:28 дп

    а программа какая ни будь FREE , чтоб от выражения до выражения в отдельный файл ? желательно регулярными

  • Евген 20.11.2014 в 9:44 пп

    доброго времени суток, я нуб батники не пишу представление слабое, подскажите пожалуйста мне нужно файл 135 МБ поделить по 50 строк я изменяю только атрибут «set N=50″и «if !q! GTR !N! set /a N+=50» ну и название естественно?

    • Максим 20.11.2014 в 9:50 пп

      Да

      • Евген 20.11.2014 в 9:57 пп

        @echo off
        setlocal enabledelayedexpansion
        set q=0
        set N=60
        for /F «delims= » %%i in (file.txt) do (
        set /a q+=1
        if !q! GTR !N! set /a N+=50
        @echo %%i >> file!N!.txt
        )

        и в папку с батником положишь файл с именем file.txt?

        • Евген 20.11.2014 в 9:58 пп

          опечатка set N=60

          • Максим 20.11.2014 в 10:01 пп

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

  • Евген 20.11.2014 в 10:04 пп

    бесполезно запускается как файл лежал так и лежит =(

    • denaie 20.11.2014 в 10:16 пп

      Права на запись есть в эту папку ? попробуйте перенести в папку не содержащую в пути пробелы и русские буквы

  • Евген 20.11.2014 в 10:53 пп

    Работает, другой вопрос это нормально что скорость 1/2 Мб в минуту? НА файл 137 Мб 4,5 часа уйдет!

    • denaie 20.11.2014 в 11:48 пп

      да нормально. Это же не специализированный инструмент. С дикими накладными расходами. Если время поджимает и есть то т же линукс то проще это сделать на перл или даже баше. БУдет быстрее. Но нужно уметь программировать. А правильное программирование может вообще за доли секунды обработать такой обьем.

  • Spyman 13.09.2015 в 1:27 дп

    ВНИМАНИЕ ДЛЯ ВСЕХ КТО ИСПОЛЬЗУЕТ ДАННЫЙ МЕТОД —
    после каждой строки в результирующем файле будет добавлен пробел. Это значит что если вы захотите использовать метод, для файлов строгого формата, то это может побить формат. Например vcf не допускают пробелов в конце строк и после разбиения vcf файла он уже нигде не прочтется, учитывайте это.

  • Spyman 13.09.2015 в 1:45 дп

    Пришлось поискать по синтаксису бата, если у кого то возникнет такая же проблема как у меня то
    @echo %%i>> file!N!.txt
    заменить строку из кода на эту, отличие в том, что между %ii и >> не должно быть пробела

  • Наталья 16.09.2015 в 9:11 пп

    Спасибо за полезную информацию. Очень помогло в работе!

  • Александр 26.07.2016 в 9:47 пп

    Крутой скрипт спасибо, один нашел каличный долбался и хрень, а этот по кайфу, спасибо!!!!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *