Войти

Показать полную графическую версию : Bat-ник создания текстовика


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

Iska
17-09-2016, 23:19
hancogruss, точно по 1024 строки?

hancogruss
17-09-2016, 23:30
hancogruss, точно по 1024 строки? »
Немного не понял вас, ну нужно базу нарезать по 1к строк из 200к или выше, что бы можно было менять, если вы про погрешность в 24 строки то нестрашно можно и в 1024

Iska
18-09-2016, 01:48
В программировании указанный суффикс всегда означает 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
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
@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
противоречит моим моральным принципам. »
Да и я не сторонник, ничего больше не пришло в голову на тот момент, а кому-то может и работы меньше, если по задаче надо удалять.




© OSzone.net 2001-2012