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

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

hancogruss 17-09-2016 22:50 2669700

Bat-ник создания текстовика
 
Здравствуйте нужна помощь. Стоит такая задача:
Есть база с данными (текстовой файл) в ней 200к строк ( к примеру), нужно из этой базы создать 200 текстовых, в каждом из которых будет 1к строк. Текстовики должны нумероватся мол 1.txt, 2.txt и так до 200.

Iska 17-09-2016 23:19 2669712

hancogruss, точно по 1024 строки?

hancogruss 17-09-2016 23:30 2669714

Цитата:

Цитата Iska
hancogruss, точно по 1024 строки? »

Немного не понял вас, ну нужно базу нарезать по 1к строк из 200к или выше, что бы можно было менять, если вы про погрешность в 24 строки то нестрашно можно и в 1024

Iska 18-09-2016 01:48 2669731

В программировании указанный суффикс всегда означает 2^10.

Пакетный файл — в общем-то, не самое удобное средство для указанной задачи. Попробуйте PowerShell:
Скрытый текст
Код:

$iCount        = 1024
$sSourceFile  = 'C:\Мои проекты\0008\текстовой файл.txt'
$sDestFilePath = 'C:\Мои проекты\0008'


$sContent = Get-Content -Path $sSourceFile
$iParts = [System.Math]::Truncate(([System.Array]$sContent).Length / $iCount + 1)

$iStartFrom = 0

for($i = 1; $i -le $iParts; $i++) {
    $sContent[$iStartFrom..$($iStartFrom + $iCount - 1)] | Set-Content -Path $($sDestFilePath + "\$i.txt")
    $iStartFrom += $iCount
}


alpap 18-09-2016 05:14 2669739

hancogruss,
Будьте внимательны! Основной файл будет удален, поэтому сделайте его копию в отдельную папку.
Во всех файлах будет по 1024 (или задайте свое) строки, кроме возможно последнего, уж сколько ему останется:
Код:

@echo off
set "chs=1024"
set "f=file"& set "rf=txt"
:l
set/a b+=1
setlocal enabledelayedexpansion
 <"%f%%a%.%rf%">nul find/v "" || (del "%f%%a%.%rf%"& goto :eof)
 <"%f%%a%.%rf%">"%b%.%rf%" (for /f "delims=" %%a in ('more') do @set/a c+=1& if !c! leq %chs% echo %%a)
 <"%f%%a%.%rf%">"%f%%b%.%rf%" (more +%chs%)& del "%f%%a%.%rf%"
endlocal
set/a a+=1& goto l
exit/b

.

megaloman 18-09-2016 08:41 2669756

Вот вариант батника. Исходный файл сохраняется. Для выходных файлов организуется папка.
Код:

@Echo Off

Set "InFile=D:\Delete\Box_In\baza.txt"

Set "OutDir=D:\Delete\Box_Out"
Set "OutExt=txt"

Set /A Quota=1024

Md "%OutDir%" 2>nul
Del "%OutDir%\*.%OutExt%" 2>nul

Set /A Count=0
FOR /F "usebackq delims=" %%s IN (`type "%InFile%" 2^>nul`) DO Call :FCount "%%s"
GoTo :Eof

:FCount
Set /A NewFile=%Count%/%Quota%+1
Set /A Count+=1
Set NewFile=%OutDir%\%NewFile%.%OutExt%
>>"%NewFile%" Echo %~1

Батник можно запускать многократно без ущерба исходному файлу.

alpap, Удаление исходного файла противоречит моим моральным принципам.

alpap 19-09-2016 01:19 2670017

Цитата:

Цитата megaloman
противоречит моим моральным принципам. »

Да и я не сторонник, ничего больше не пришло в голову на тот момент, а кому-то может и работы меньше, если по задаче надо удалять.


Время: 20:35.

Время: 20:35.
© OSzone.net 2001-