Войти

Показать полную графическую версию : [решено] обработка *.txt


Михаил11
28-03-2011, 15:01
Собственно есть файл in.txt в котором надо провести операции над строчками.
Всего 37353 строчек из которых надо получить 4567. Шаг цикла от 8 до 9 строчек.
исходник:

*
часть
первая
*
0" 0"13260"
*
5:17
*
*
глава
вторая
*
*
4" 4"3538"
*
5:31
*

все * - пустые строчки.
В новом документе надо получить:

часть - первая
глава - вторая

Iska
28-03-2011, 15:06
Михаил11, опишите явно принципы, по которым следует производить отбор нужных строк среди прочих.

Михаил11
28-03-2011, 15:13
Думаю проще произвести в 2 этапа.
1) Убрать все пустые строчки получив

часть
первая
0" 0"13260"
5:17
глава
вторая
4" 4"3538"
5:31

sed '/^$/d' 1.txt удалить пустые строки из файла 1.txt

2) переписать в новый документ к первой строчке добавляя " - " дописывая 2 строчку и пропуская последующие две строчки и повторять в цикле со строчками i*4
часть - первая
глава - вторая

El Sanchez
28-03-2011, 16:28
Михаил11, если я правильно понял задание:

@Echo Off
SetLocal
Set Source=C:\Source\in.txt
Set Output=C:\Output\in_new.txt
Set Num=1

Del /F /Q "%Output%" 2>nul
For /F "Tokens=1* Delims=:" %%A In ('Type "%Source%"^|FindStr .^|FindStr /N .') Do Call :Func "%%A" "%%B"
EndLocal
Exit /B 0
:Func
If "%~1"=="%Num%" If Not Defined SubStr Set SubStr=%~2
If Not "%~1"=="%Num%" If Defined SubStr (Echo %SubStr% - %~2 >>"%Output%"&Set SubStr=&Set /A Num=%Num%+4)

Михаил11
28-03-2011, 18:07
El Sanchez,
Да, почти работает, но съедает закрывающие скобки в строках и пишет что не объявлен оператор. На третьей скобке вылетает =(
P.S. Все равно спасибо, обошел вылеты заменой скобок. Время обработки заняло около 1 минуты =^_^=

gora
29-03-2011, 10:00
Михаил11, если я правильно понял задачу, то попробуйте так:@Echo Off
Setlocal EnableDelayedExpansion
:: Обрабатываемый файл
Set file=e:\Temp\in.txt
:: Новый файл
Set newfile=e:\Temp\new file.txt

(For /F "usebackq tokens=* delims=" %%i In ("%file%") Do (
Set /A cnt=cnt%%4+1
If !cnt!==1 Set line=%%i
If !cnt!==2 Echo !line! - %%i
))>"%newfile%"




© OSzone.net 2001-2012