Показать полную графическую версию : [решено] обработка *.txt
Михаил11
28-03-2011, 15:01
Собственно есть файл in.txt в котором надо провести операции над строчками.
Всего 37353 строчек из которых надо получить 4567. Шаг цикла от 8 до 9 строчек.
исходник:
*
часть
первая
*
0" 0"13260"
*
5:17
*
*
глава
вторая
*
*
4" 4"3538"
*
5:31
*
все * - пустые строчки.
В новом документе надо получить:
часть - первая
глава - вторая
Михаил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 минуты =^_^=
Михаил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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.