Войти

Показать полную графическую версию : [решено] Вставить после каждой 10 строки пустую строку


Mycry
30-07-2013, 21:05
Как в txt файле после каждой 10 строки вставить пустую строку?

Iska
30-07-2013, 21:16
Если в изначальном текстовом файле нет пустых строк, то, например, так:
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=0001.txt
set sDestFile=0002.txt

if exist "%sSourceFile%" (
set /a iCount = 1

>"%sDestFile%" (
for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
echo %%i

if !iCount! lss 10 (
set /a iCount += 1
) else (
echo.
set /a iCount = 1
)
)
)
) else (
echo Can't find source file [%sSourceFile%].
)

endlocal
exit /b 0

Foreigner
30-07-2013, 21:46
Mycry,
гнутый sed (http://gnuwin32.sourceforge.net/packages/sed.htm)

@echo off

1>file.tmp sed "10~10 s/$/\n/" file.txt
move file.tmp file.txt

Mycry
30-07-2013, 21:55
Большое спасибо Iska и Foreigner. Остановился на первом варианте.

Iska
30-07-2013, 22:24
гнутый sed »
;).

PowerShell:
$sSourceFile = "E:\Песочница\0304\0001.txt"
$sDestFile = "E:\Песочница\0304\0002.txt"

if(Test-Path -Path $sSourceFile -PathType Leaf) {
Get-Content -Path $sSourceFile | ForEach-Object -Process {
$_

if($_.ReadCount % 10 -eq 0) {
""
}
} | Set-Content -Path $sDestFile
} else {
Write-Host -ForegroundColor Red "Can't find source file [$sSourceFile]."
}

Foreigner
30-07-2013, 22:47
Iska, Я тоже подумал про Powershell, но выбрал sed:

$a = gc file.txt
$i = 0; $( while ($i -le ($a.count-1)) { $a[$i..($i+9)]; ''; $i+=10 } ) | sc file.txt

Или через for:

$a = gc file.txt
$(for ($i = 0; $i -le ($a.count-1); $i+=10) { $a[$i..($i+9)]; '' }) | sc file.txt

Iska
30-07-2013, 23:24
Foreigner, в обоих случаях — лишняя пустая строка в конце результирующего файла.

Foreigner
30-07-2013, 23:54
Iska, Действительно, можно попробовать так:

$a = gc file.txt
for ($i = 1; $i -le ($a.count % 10); $i++) { $a[$i * 10 - 1] += "`n" }
$a | sc file.txt

Iska
31-07-2013, 00:05
Только «`r`n» ;).




© OSzone.net 2001-2012