Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] копирование указанного количества случайных блоков текста из текстового файла (http://forum.oszone.net/showthread.php?t=287040)

Alexander_88 26-08-2014 12:57 2394241

копирование указанного количества случайных блоков текста из текстового файла
 
Здравствуйте. Подскажите возможно ли из txt файла, в котором куча блоков текста разделенные через символ //================== скопировать указанное количество случайных блоков в другой txt файл, а также после каждого блока добавить тот же символ //==================
Т.е. к примеру у меня txt файл:

//==================
блок1
//==================
блок2
//==================
блок3
//==================
блок4
//==================
........................
//==================
блок5000
//==================

Я указал 5 случайных блоков. После применения кода должен получиться такой txt:

блок453
//==================
блок3126
//==================
блок784
//==================
блок5
//==================
блок2451
//==================

в блоках бывает такое, что пропускается 1 строка, т.е. присутствуют пустые строки, к примеру блок 2 с текстом:

я гулял в лесу

мне было хорошо

Georgio 26-08-2014 15:28 2394342

Здравствуйте, 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 2394356

Georgio, спасибо, а нельзя сделать, чтобы он размах выбирал побольше? пока он берет только блоки изпервой десятки, а их там 700, и еще если ставить quantity 1 , он всегда выбирает 1ый блок :search:

Georgio 26-08-2014 16:16 2394357

Цитата:

Цитата 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 ('
 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 2394360

Georgio Супер, спасибо вам за помощь

Iska 26-08-2014 17:39 2394400

Alexander_88, Вам с такими запросами давно пора переходить на WSH/PoSH ;).

Alexander_88 26-08-2014 18:18 2394430

Если бы я понимал о чем вы говорите :) , это наверно языки программирования)

Iska 26-08-2014 18:36 2394439

Цитата:

Цитата Alexander_88
это наверно языки программирования) »

Ага.


Время: 05:44.

Время: 05:44.
© OSzone.net 2001-