Компьютерный форум 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=236151)

aos 07-06-2012 08:29 1929843

Удалить лишние строки из txt
 
Всем доброго времени суток!

Есть такая задачка, Существует текстовый файл с кучей строк

Пример:


Нужно удалить те строки у которых после третьего числового столбца нет четвертого (то есть после столбца с тремя цифрами 010,007 и тд)

Заранее огромно спасибо!!!

Iska 07-06-2012 09:00 1929857

aos, выложите часть текстового файла, обрамив его тэгом «code». Возиться, высчитывая количество пробелов на изображении, желания мало.

yurfed 07-06-2012 09:24 1929864

Цитата:

Цитата Iska
Возиться, высчитывая количество пробелов на изображении, желания мало. »

Может стоит обратить внимание на запятую?
Я бы сам, но вообще забыл всё напрочь, а желание вспоминать всё это ни как не приходит :)

aos 07-06-2012 09:57 1929881

Код:

2012060623595950012832АБАКУМОВА ТАТЬЯНА СЕРГЕЕВНА            11022148                      010                                                               
2012060623595933010226АББАСОВ ОЛЕГ МАЗАХИРОВИЧ                11022498                      010 440,75                                                         
2012060623595950001173АБДРАХИМОВ ХАЙДАР АХТАНОВИЧ            11022283                      006 180                                                           
2012060623595950010131АБДРАХМАНОВ ТАЛГАТ АБАЕВИЧ              11195620                      001 200                                                           
2012060623595950010131АБДРАХМАНОВ ТАЛГАТ АБАЕВИЧ              11195620                      006 214                                                           
2012060623595950005485АБДУЛИН СЕРГЕЙ МАРЛЕНОВИЧ              11022215                      010 522                                                           
2012060623595950006459АБДУЛИНА ОКСАНА ЮРЬЕВНА                11196278                      007                                                               
2012060623595950001614АБЕНОВА МАРЖАН КАБДУЛОВНА              11196279                      007 697,5                                                         
2012060623595933010120АБОЛЬСКИЙ АЛЕКСАНДР ВАЛЕРЬЕВИЧ          11022677                      010 468,1                                                         
2012060623595950006168АБРАМЕНКО ЭДУАРД ВАСИЛЬЕВИЧ            8404370                      010 498,55                                                         
2012060623595933014681АБРАМКИН СЕРГЕЙ ВЛАДИМИРОВИЧ            11022676                      007                                                               
2012060623595950015185АБРАМОВ АНДРЕЙ НИКОЛАЕВИЧ              11195507                      007                                                               
2012060623595950010875АБРАМОВ ЕВГЕНИЙ НИКОЛАЕВИЧ              11022284                      006 422                                                           
2012060623595950001864АБРАМОВ ИГОРЬ НИКОЛАЕВИЧ                11195503                      007 506,5                                                         
2012060623595950000742АБРАМОВ КОНСТАНТИН АНАТОЛЬЕВИЧ          11027130                      010                                                               
2012060623595950008606АБРАМОВ КОНСТАНТИН ВАСИЛЬЕВИЧ          11195521                      007 517,9                                                         
2012060623595950060616АБРАМОВ КОНСТАНТИН ВАСИЛЬЕВИЧ          11195522                      006 554                                                           
2012060623595950060142АБРАМОВ МИХАИЛ НИКОЛАЕВИЧ              11195516                      007 1234,3                                                         
2012060623595933011243АБРАМОВ СЕРГЕЙ АЛЕКСАНДРОВИЧ            11022675                      007 297,5                                                         
2012060623595950010553АБРАМОВ СЕРГЕЙ ЛЕОНИДОВИЧ              10952495                      010 461,6


El Sanchez 07-06-2012 11:24 1929934

aos, пробуйте
Код:

@Echo Off
SetLocal
Set Source=C:\Source.txt

For /F "Tokens=*" %%A In ('Type "%Source%"') Do If "%%A"=="" (Echo:>>"%~dp0_tmp") Else (Call :Proc %%A)
Move /Y "%~dp0_tmp" "%Source%" 2>nul
Exit /B 0

:Proc
For %%A In (%*) Do Echo:%%A|FindStr [0-9] 1>nul&&Set /A Cnt+=1
If "%Cnt%" GTR "3" Echo:%*>>"%~dp0_tmp"
Set Cnt=


aos 07-06-2012 12:01 1929960

Он просто копирует не нужные строки в другой текстовик, а хотелось бы их удалять

Iska 07-06-2012 12:19 1929968

Продолжаю рекламировать Log Parser:
Код:

"C:\Program Files\Log Parser 2.2\LogParser.exe"  "SELECT Text FROM 'Input.txt' WHERE TRIM(SUBSTR(Text, 97, 10)) <> ''" -i:TEXTLINE -iCodepage:1251 -q:on >Output.txt
Output.txt …
Код:

2012060623595933010226АББАСОВ ОЛЕГ МАЗАХИРОВИЧ                11022498                      010 440,75                                                         
2012060623595950001173АБДРАХИМОВ ХАЙДАР АХТАНОВИЧ            11022283                      006 180                                                           
2012060623595950010131АБДРАХМАНОВ ТАЛГАТ АБАЕВИЧ              11195620                      001 200                                                           
2012060623595950010131АБДРАХМАНОВ ТАЛГАТ АБАЕВИЧ              11195620                      006 214                                                           
2012060623595950005485АБДУЛИН СЕРГЕЙ МАРЛЕНОВИЧ              11022215                      010 522                                                           
2012060623595950001614АБЕНОВА МАРЖАН КАБДУЛОВНА              11196279                      007 697,5                                                         
2012060623595933010120АБОЛЬСКИЙ АЛЕКСАНДР ВАЛЕРЬЕВИЧ          11022677                      010 468,1                                                         
2012060623595950006168АБРАМЕНКО ЭДУАРД ВАСИЛЬЕВИЧ            8404370                      010 498,55                                                         
2012060623595950010875АБРАМОВ ЕВГЕНИЙ НИКОЛАЕВИЧ              11022284                      006 422                                                           
2012060623595950001864АБРАМОВ ИГОРЬ НИКОЛАЕВИЧ                11195503                      007 506,5                                                         
2012060623595950008606АБРАМОВ КОНСТАНТИН ВАСИЛЬЕВИЧ          11195521                      007 517,9                                                         
2012060623595950060616АБРАМОВ КОНСТАНТИН ВАСИЛЬЕВИЧ          11195522                      006 554                                                           
2012060623595950060142АБРАМОВ МИХАИЛ НИКОЛАЕВИЧ              11195516                      007 1234,3                                                         
2012060623595933011243АБРАМОВ СЕРГЕЙ АЛЕКСАНДРОВИЧ            11022675                      007 297,5                                                         
2012060623595950010553АБРАМОВ СЕРГЕЙ ЛЕОНИДОВИЧ              10952495                      010 461,6


aos 07-06-2012 12:31 1929976

Спасибо! Работает! Подскажите еще пожалуйста, что прописать чтобы исходящий файл имел следующее название "partnerfull20120606.txt" (дата год месяц число) И можно, чтобы он еще сразу на ftp готовый файл отсылал?

Спасибо!

yurfed 07-06-2012 13:29 1930011

....и на работу за вас ходил :)

aos 07-06-2012 13:31 1930013

Цитата:

Цитата yurfed
а вас »

Просто это не мой профиль поэтому помощи прошу )

Iska 07-06-2012 15:49 1930095

aos, пользователь обладает административными привилегиями? Машина не с Home-версией Windows?

aos 08-06-2012 05:22 1930380

Да обладает, винда 2003 server

Iska 08-06-2012 06:54 1930392

Тогда можно примерно так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

if defined sSourceFile (
        if exist "%sSourceFile%" (
                for /f "delims=." %%i in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%i
                set sDestFile=partnerfull!sDateTime:~,8!.txt
               
                "C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT Text FROM '%sSourceFile%' WHERE TRIM(SUBSTR(Text, 97, 10)) <> ''" -i:TEXTLINE -iCodepage:1251 -q:on 1>"!sDestFile!"
        ) else (
                echo Source file [%sSourceFile%] not found
        )
) else (
        echo Usage: "%~nx0" ^<Source file^>
)
endlocal
exit /b 0

Входной файл указывается параметром пакетного файла при запуске.

Для отсылки полученного файла на ftp-сервер — нужны детали.

aos 08-06-2012 07:54 1930407

Почему то не отрабатывает

Iska 08-06-2012 10:22 1930486

aos, опишите подробнее.

aos 08-06-2012 12:46 1930572

Запускаю скрипт, ничего не происходит...он открывается и сразу закрывается

Iska 08-06-2012 14:11 1930618

Цитата:

Цитата Iska
Входной файл указывается параметром пакетного файла при запуске. »

Запустите командную строку (например, «Win-R», «cmd.exe», «Enter»). В открывшемся окне командного процессора перейдите в каталог, куда нужно помещать выходной файл («cd "Путь"», «Enter»), напишите полный путь к пакетному файлу, следом за ним, через пробел — путь к исходному файлу. Выходной файл будет создан в текущем каталоге.

Или проще — перетащите исходный файл на пакетный файл.

aos 09-06-2012 08:56 1931039

Создается пустой выходной файл, делаю следующим образом:

cd:\d\prod\tranz (путь для готового файла)

D:\prod\tranz>d:\prod\test.bat d:\prod\input.txt (первая часть-путь где лежит батник, вторая часть путь где лежит файл который нужно обработать)


Или я, что то не так делаю?

Iska 09-06-2012 09:16 1931054

aos, проверю, что там у меня может быть не так, но несколько попозже.

aos 13-06-2012 07:38 1933268

Здравствуйте! Еще не было возможности посмотреть, что не работает в скрипте?

Iska 13-06-2012 21:42 1933715

aos, посмотрел. Ошибка здесь:
Код:

"C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT Text FROM 'Input.txt' WHERE TRIM(SUBSTR(Text, 97, 10)) <> ''" -i:TEXTLINE -iCodepage:1251 -q:on 1>"!sDestFile!"
— я банально забыл исправить жёстко заданное имя входного файла на переменную окружения. Я поправил исходный пакетный файл. Приношу Вам свои извинения. Пробуйте теперь.

aos 14-06-2012 06:55 1933863

Огромное спасибо!!! Все работает!

aos 14-06-2012 08:08 1933874

Новый прикол, после отрабоки через какое то время самоочищается )))

Iska 14-06-2012 14:01 1934075

aos, поясните пожалуйста, что самоочищается, через какое именно время.

naifrit 10-07-2012 13:27 1949258

Цитата:

Цитата Iska
Продолжаю рекламировать Log Parser:
Код:
"C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT Text FROM 'Input.txt' WHERE TRIM(SUBSTR(Text, 97, 10)) <> ''" -i:TEXTLINE -iCodepage:1251 -q:on >Output.txt
Output.txt … »

А подскажите, как удалить строчку со значением 0.00?


Код:

Тюрин Д. С.;Алейск,Ширшова ул,5,55;630000002936;42039.52
Фатеева Л. Л.;Алейск,Ширшова ул,9,39;630000002937;1502.45
Вдонин А. В.;Алейск,Ширшова ул,16,414;630000003967;0.00
Юрченко Виталий Сергеевич;Алейск,им В.Олешко ул,82А,70;630000003968;2533.39
Рябцев Вадим Иванович;Алейск,Ширшова ул,3,12;630000003969;4186.19
Пыхтеев Кирилл Леонидович;Алейск,Ширшова ул,16,314;630000003970;5716.15
Смирнов Антон Николаевич;Алейск,Ширшова ул,16,215;630000003971;4804.42
Микрюков Вячеслав Владимирович;Алейск,Ширшова ул,16,312;630000003972;3697.96
Воропаева Ирина Николаевна;Алейск,Ширшова ул,15А,19;630000003973;1840.83
Троянова Нина Тихоновна;Алейск,Гвардейская ул,13,2;630000003974;0.00
Рыбин Максим Юрьевич;Алейск,Ширшова ул,23,2;630000003975;3685.36
Чеплыгин Сергей Александрович;Алейск,Ширшова ул,15,48;630000003976;7241.95


Iska 10-07-2012 17:08 1949370

naifrit, с помощью LogParser — напрямую никак: средство предназначено для извлечения данных, но не удаления (т.е., есть операция SELECT, но нет операции DELETE).

Но можно пойти от обратного: извлечь все строки, четвёртое поле которых не содержит «0.00»:
Код:

"C:\Program Files\Log Parser 2.2\LogParser.exe" "SELECT Field1 AS FIO, Field2 AS Address, Field3 AS INN, SUBSTR(TO_STRING(Field4), 0, SUB(STRLEN(TO_STRING(Field4)), 4)) AS Summ FROM 'Source.txt' WHERE Summ <> '0.00'" -i:TSV -iSeparator:; -headerRow:OFF -nFields:4 -iCodepage:1251 -q:on -o:TSV -headers:OFF -oSeparator:;>Destination.txt


Время: 07:06.

Время: 07:06.
© OSzone.net 2001-