Показать полную графическую версию : [решено] копирование указанного количества случайных блоков текста из текстового файла
Alexander_88
26-08-2014, 12:57
Здравствуйте. Подскажите возможно ли из txt файла, в котором куча блоков текста разделенные через символ //================== скопировать указанное количество случайных блоков в другой txt файл, а также после каждого блока добавить тот же символ //==================
Т.е. к примеру у меня txt файл:
//==================
блок1
//==================
блок2
//==================
блок3
//==================
блок4
//==================
........................
//==================
блок5000
//==================
Я указал 5 случайных блоков. После применения кода должен получиться такой txt:
блок453
//==================
блок3126
//==================
блок784
//==================
блок5
//==================
блок2451
//==================
в блоках бывает такое, что пропускается 1 строка, т.е. присутствуют пустые строки, к примеру блок 2 с текстом:
я гулял в лесу
мне было хорошо
Здравствуйте, Alexander_88.
@echo off
chcp 1251>nul
set quantity=5
set "source=example.txt"
set "border=//=================="
for %%i in ("%source%") do (
set new=%%~dpni_new%%~xi
call copy nul %%new%%>nul
)
set temp_file="%temp%\%random%.vbs"
for /f %%i in ('
findstr /rx "%border:/=\/%" "%source%"^| find /c /v ""
') do (
for /f %%j in ('
set /a %%i-1
') do (
if %%j lss %quantity% (
call:# %%j
) else (
call:# %quantity%
)
)
)
del %temp_file%
exit /b
:#
for /l %%i in (1 1 %1) do (
call set $%%random%%= %%i
)
for /f "tokens=* delims=$0123456789=" %%i in ('
set $^| findstr /v "^0"
') do (
echo WScript.StdOut.Write^(Split^(WScript.CreateObject^("Scripting.FileSystemObject"^).OpenTextFile^("%source%"^).ReadAll^(^),"%border%"^&vbCrLf^)^(%%i^)^)>%temp_file%
(
cscript //nologo %temp_file%
set /p="%border%"<nul
echo.
)>>"%new%"
)
exit /b
Alexander_88
26-08-2014, 16:08
Georgio, спасибо, а нельзя сделать, чтобы он размах выбирал побольше? пока он берет только блоки изпервой десятки, а их там 700, и еще если ставить quantity 1 , он всегда выбирает 1ый блок :search:
а нельзя сделать, чтобы он размах выбирал побольше? »
@echo off
chcp 1251>nul
set quantity=5
set "source=example.txt"
set "border=//=================="
for %%i in ("%source%") do (
set new=%%~dpni_new%%~xi
call copy nul "%%new%%">nul
)
set temp_file="%temp%\%random%.vbs"
for /f %%i in ('
more^<"%source%"^|findstr /x "%border:/=\/%"^| find /c /v ""
') do (
for /f %%j in ('
set /a %%i-1
') do (
if %%j lss %quantity% (
call:# %%j %%j
) else (
call:# %%j %quantity%
)
)
)
del %temp_file%
exit /b
:#
for /l %%i in (1 1 %1) do (
call set $%%random%%= %%i
)
for /f "tokens=2 delims==" %%i in ('
set $
') do (
set /a count+=1
for /f %%j in ('
set /a count
') do (
if %%j leq %2 (
echo WScript.StdOut.Write^(Split^(WScript.CreateObject^("Scripting.FileSystemObject"^).OpenTextFile^("%source%"^).ReadAll^(^),"%border%"^&vbCrLf^)^(%%i^)^)>%temp_file%
(
cscript //nologo %temp_file%| findstr /vx "%border:/=\/%"
set /p="%border%"<nul
echo.
)>>"%new%"
) else (
exit /b
)
)
)
exit /b
Alexander_88
26-08-2014, 16:28
Georgio Супер, спасибо вам за помощь
Alexander_88, Вам с такими запросами давно пора переходить на WSH/PoSH ;).
Alexander_88
26-08-2014, 18:18
Если бы я понимал о чем вы говорите :) , это наверно языки программирования)
это наверно языки программирования) »
Ага.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.