zdorovaBandity |
14-11-2014 18:45 2429561 |
Разбиение текстового файла на два.
Здравствуйте, помогите решить задачку.
Нужно разработать и выполнить командный файл, выполняющий разбиение текстового файла, имя которого задано первым параметром КФ, на два файла с именами 1.txt и 2.txt. Количество строк в каждом из этих файлов задано вторым и третьим параметрами КФ. Проверить наличие указанного исходного файла и вывести сообщение о его отсутствии, проверить наличие остальных параметров и их значения на допустимость.
Искренне надеюсь на вашу помощь.
|
Цитата:
Цитата zdorovaBandity
Количество строк в каждом из этих файлов задано вторым и третьим параметрами КФ. »
|
А что делать, если число строк в исходном файле больше, нежели (параметр2+параметр3)?
|
zdorovaBandity |
14-11-2014 19:01 2429569 |
Цитата:
Цитата Iska
А что делать, если число строк в исходном файле больше, нежели (параметр2+параметр3)? »
|
Я даже не знаю, мне нужно любое решение, главное что бы хоть что то было)
|
Ну, например, так:
Скрытый текст
Код:
@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», и т.п.) и код, мягко говоря, не слишком оптимален, но коли Вам «любое решение, главное что бы хоть что то было» — полагаю, сойдёт.
|
zdorovaBandity |
15-11-2014 23:38 2430102 |
[q=Iska]Большое спасибо)
|
Время: 02:54.
© OSzone.net 2001-