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

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

Михаил11 28-03-2011 15:01 1645650

обработка *.txt
 
Собственно есть файл in.txt в котором надо провести операции над строчками.
Всего 37353 строчек из которых надо получить 4567. Шаг цикла от 8 до 9 строчек.
исходник:
Цитата:

*
часть
первая
*
0" 0"13260"
*
5:17
*
*
глава
вторая
*
*
4" 4"3538"
*
5:31
*
все * - пустые строчки.
В новом документе надо получить:
Цитата:

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

Iska 28-03-2011 15:06 1645652

Михаил11, опишите явно принципы, по которым следует производить отбор нужных строк среди прочих.

Михаил11 28-03-2011 15:13 1645659

Думаю проще произвести в 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 1645717

Михаил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 1645812

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

gora 29-03-2011 10:00 1646212

Михаил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%"



Время: 17:36.

Время: 17:36.
© OSzone.net 2001-