Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Разбиение текстового файла на два.

Ответить
Настройки темы
CMD/BAT - [решено] Разбиение текстового файла на два.

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, помогите решить задачку.
Нужно разработать и выполнить командный файл, выполняющий разбиение текстового файла, имя которого задано первым параметром КФ, на два файла с именами 1.txt и 2.txt. Количество строк в каждом из этих файлов задано вторым и третьим параметрами КФ. Проверить наличие указанного исходного файла и вывести сообщение о его отсутствии, проверить наличие остальных параметров и их значения на допустимость.
Искренне надеюсь на вашу помощь.

Отправлено: 18:45, 14-11-2014

 

Ветеран


Contributor


Сообщения: 27628
Благодарности: 8081

Профиль | Отправить PM | Цитировать


Цитата zdorovaBandity:
Количество строк в каждом из этих файлов задано вторым и третьим параметрами КФ. »
А что делать, если число строк в исходном файле больше, нежели (параметр2+параметр3)?

Отправлено: 18:53, 14-11-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
А что делать, если число строк в исходном файле больше, нежели (параметр2+параметр3)? »
Я даже не знаю, мне нужно любое решение, главное что бы хоть что то было)

Отправлено: 19:01, 14-11-2014 | #3


Ветеран


Contributor


Сообщения: 27628
Благодарности: 8081

Профиль | Отправить PM | Цитировать


Ну, например, так:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1
set sCount1=%~2
set sCount2=%~3

set sResultFile1=1.txt
set sResultFile2=2.txt

if defined sSourceFile (
	if defined sCount1 (
		if defined sCount2 (
			if exist "%sSourceFile%" (
				set /a iCount1 = %sCount1%
				
				if !iCount1! geq 1 (
					set /a iCount2 = %sCount2%
					
					if !iCount2! geq 1 (
						call :Head "!iCount1!"
						call :Tail "!iCount1!" "!iCount2!"
					) else (
						echo Third parameter [%sCount2%] must be numerical and more than 0
						call :Usage
					)
				) else (
					echo Second parameter [%sCount1%] must be numerical and more than 0
					call :Usage
				)
			) else (
				echo Can't find source file [%sSourceFile%].
				exit /b 2
			)
		) else (
			call :Usage
			exit /b 1
		)
	) else (
		call :Usage
		exit /b 1
	)
) else (
	call :Usage
	exit /b 1
)



exit /b 1

if not defined sSourceFile (
	call :Usage
	exit /b 1
)

if defined sCount1 echo [%iCount1%]
if defined sCount2 echo [%iCount2%]

endlocal
exit /b 0

:Usage
	echo Error in parameters
	echo.
	echo Usage: %~nx0 ^<Source file^> ^<String's count for 1st result file^> ^<String's count for 2nd result file^>
	exit /b 0

:Head
	setlocal enableextensions enabledelayedexpansion
	
	set /a iHeadCount = %~1
	set /a iTotalCount = 0
	
	>"%sResultFile1%" (
		for /f "usebackq tokens=1* delims=[]" %%i in (
			`type "%sSourceFile%" ^| find.exe /n /v ""`
		) do (
			set /a iTotalCount += 1
			echo.%%j
			
			if !iTotalCount! geq %iHeadCount% exit /b
		)
	)
	
	endlocal
	exit /b 0

:Tail
	setlocal enableextensions enabledelayedexpansion
	
	set /a iSkipCount = %~1
	set /a iTailCount = %~2
	set /a iTotalCount = 0
	
	>"%sResultFile2%" (
		for /f "usebackq tokens=1* delims=[]" %%i in (
			`type "%sSourceFile%" ^| more +%iSkipCount% ^|find.exe /n /v ""`
		) do (
			set /a iTotalCount += 1
			echo.%%j
			
			if !iTotalCount! geq %iTailCount% exit /b
		)
	)
	
	endlocal
	exit /b 0

Тут, конечно, не хватает ещё кучи проверок (например, что имя исходного файла не «1.txt» и не «2.txt», и т.п.) и код, мягко говоря, не слишком оптимален, но коли Вам «любое решение, главное что бы хоть что то было» — полагаю, сойдёт.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:49, 14-11-2014 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


[q=Iska]Большое спасибо)

Отправлено: 23:38, 15-11-2014 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Разбиение текстового файла на два.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Сборка текстового файла из содержимого другого текстового файла icomboy Скриптовые языки администрирования Windows 0 10-09-2013 15:17
CMD/BAT - Разделение текстового файла на части без разделения абзацев Re:Flex Скриптовые языки администрирования Windows 9 09-07-2013 04:35
Разбиение txt файла на колонки ukio Хочу все знать 9 15-01-2012 18:02
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28
CMD/BAT - [решено] вывод текстового файла на экран cmd idsp Скриптовые языки администрирования Windows 6 06-04-2009 07:18




 
Переход