Понадобилось решить одну практическую задачу которая подразумевала получить из одного файла с несколькими тысячами строк, много файлов по 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 комментария
Отлично работает, но вместо пустых строк из файла пишет
«Режим вывода команд на экран (ECHO) отключен.»
или
«Режим вывода команд на экран (ECHO) включен.»
попробуй в самом начале поставить @echo off
правда тогда пустые строки будут отбрасываться вообще
Сразу попробовал и @echo off и @echo on.
В обоих случаях пишет в файлы вместо пустых строк
«Режим вывода команд на экран (ECHO) отключен/включен».
странно, а у меня отработало как надо, может там не пустые строки, а просто символы неотображаемые?
Вместо строк состоящих их пробелов «Режим вывода команд на экран (ECHO) отключен/включен».
надо было разбить 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
)
Спасибо
Не получается, я чайник!
Надо разбить txt файл из 4000000 строк по 50000.
Подскажите, как, плиз!
Точно чайник. Не там поставил имя файла.
Все получилось, спасибо!
а программа какая ни будь FREE , чтоб от выражения до выражения в отдельный файл ? желательно регулярными
Эту посмотри
http://systemwidgets.com/Products/TextFileSplitter/Overview/tabid/119/Default.aspx
доброго времени суток, я нуб батники не пишу представление слабое, подскажите пожалуйста мне нужно файл 135 МБ поделить по 50 строк я изменяю только атрибут «set N=50″и «if !q! GTR !N! set /a N+=50» ну и название естественно?
Да
@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?
опечатка set N=60
в общем да, вы попробуйте, этот батник очень просто работает.
бесполезно запускается как файл лежал так и лежит =(
Права на запись есть в эту папку ? попробуйте перенести в папку не содержащую в пути пробелы и русские буквы
Работает, другой вопрос это нормально что скорость 1/2 Мб в минуту? НА файл 137 Мб 4,5 часа уйдет!
да нормально. Это же не специализированный инструмент. С дикими накладными расходами. Если время поджимает и есть то т же линукс то проще это сделать на перл или даже баше. БУдет быстрее. Но нужно уметь программировать. А правильное программирование может вообще за доли секунды обработать такой обьем.
ВНИМАНИЕ ДЛЯ ВСЕХ КТО ИСПОЛЬЗУЕТ ДАННЫЙ МЕТОД —
после каждой строки в результирующем файле будет добавлен пробел. Это значит что если вы захотите использовать метод, для файлов строгого формата, то это может побить формат. Например vcf не допускают пробелов в конце строк и после разбиения vcf файла он уже нигде не прочтется, учитывайте это.
Пришлось поискать по синтаксису бата, если у кого то возникнет такая же проблема как у меня то
@echo %%i>> file!N!.txt
заменить строку из кода на эту, отличие в том, что между %ii и >> не должно быть пробела
Спасибо за полезную информацию. Очень помогло в работе!
Крутой скрипт спасибо, один нашел каличный долбался и хрень, а этот по кайфу, спасибо!!!!!!