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

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

ajakzs 17-10-2012 13:32 2007088

Поиск и удаление текста в файле
 
Уважаемые эксперты и форумчане, помогите решить задачу пожалуйста:
Есть файл 1.txt(список), из которого нужно удалить те строки, которые содержатся в 2.txt(список)

Способ, предложенный amel27
Код:

@echo off  FindStr /? >1.txt FindStr /? >2.txt  FindStr /IVG:2.txt 1.txt >3.txt FindStr/IRVG:2.txt 1.txt >4.txt FindStr/IVLG:2.txt 1.txt >5.txt
не работает(


В первом, как и во втором могут быть цифры, звездочки, точки ...

Iska 17-10-2012 16:07 2007181

Цитата:

Цитата ajakzs
Способ, предложенный amel27 »

Это Ваш способ, а не коллеги amel27. А способ работает.

ajakzs 17-10-2012 16:50 2007226

Если кто не умеет читать, я и написал СПОСОБ, предложенный(который предложил) amel27.
У меня два файла и после прогона этим способом в изначальном файле количество строк уменьшается не на количество строк во 2, а раза в 3 большем.

Iska 17-10-2012 18:01 2007288

ajakzs, для тех, кто не умеет читать: выкладывайте архив с образцом исходного (1.txt) файла, с образцом файла-фильтра (2.txt), на которых «не работает».

Цитата:

Цитата ajakzs
я и написал СПОСОБ, предложенный(который предложил) amel27. »

И, да — приведите ссылку, где он предлагал это.

ajakzs 18-10-2012 00:28 2007553

Вложений: 1
Собственно)

Iska 18-10-2012 04:34 2007595

ajakzs, есть подозрение, что первый файл в кодировке UTF-8, но, поскольку он без BOM — работает:
Код:

findstr.exe /v /g:"2.txt" "1.txt" >"3.txt"
Размеры:
Код:

╔══════════════════ E:\Песочница\0183 ════╤════════╤═════╗
║и              Имя                │Размер│  Дата  │Время║
║⌂..                              │ Вверх│18.10.12│04:22║
║ 1                            txt│2158 К│17.10.12│15:41║
║ 2                            txt│ 74500│17.10.12│16:02║
║ 3                            txt│1959 К│18.10.12│04:22║
║                                  │      │        │    ║


Цитата:

Цитата ajakzs
У меня два файла и после прогона этим способом в изначальном файле количество строк уменьшается не на количество строк во 2, а раза в 3 большем. »

Я понял, что Вы подразумевали. Должно быть, кодировка привнесла-таки свою толику разброда в работу findstr.exe, что и отразилось на конечном результате.

Попробуйте на WSH:
читать дальше »
Код:

Option Explicit

Const ForReading  = 1
Const ForWriting  = 2


Dim strSourceFile
Dim strFilterFile
Dim strDestFile

Dim objTS
Dim objDictionary
Dim strLine


strSourceFile = "E:\Песочница\0183\1.txt"
strFilterFile = "E:\Песочница\0183\2.txt"
strDestFile  = "E:\Песочница\0183\3.txt"


Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With WScript.CreateObject("Scripting.FileSystemObject")
        With .OpenTextFile(strFilterFile, ForReading)
                For Each strLine In Split(.ReadAll(), vbCrLf)
                        If Not objDictionary.Exists(strLine) Then
                                objDictionary.Add strLine, 1
                        'Else
                        '        objDictionary.Item(strLine) = objDictionary.Item(elem) + 1
                        End If
                Next
               
                .Close
        End With
       
        Set objTS = .OpenTextFile(strDestFile, ForWriting, True)
       
        With .OpenTextFile(strSourceFile, ForReading)
                For Each strLine In Split(.ReadAll(), vbCrLf)
                        If Not objDictionary.Exists(strLine) Then
                                objTS.WriteLine strLine
                        End If
                Next
               
                .Close
        End With
       
        objTS.Close
       
        Set objTS = Nothing
End With

WScript.Quit 0


указав в скрипте (я не стал делать ни обработку параметров, ни проверку существования файлов) свои пути для исходного, фильтрующего и результирующего файлов в:
Код:

strSourceFile = "E:\Песочница\0183\1.txt"
strFilterFile = "E:\Песочница\0183\2.txt"
strDestFile  = "E:\Песочница\0183\3.txt"


ajakzs 18-10-2012 09:18 2007670

Спасибо, буду пробовать разобраться с вашим советом)


Время: 20:38.

Время: 20:38.
© OSzone.net 2001-