Показать полную графическую версию : Поиск и удаление текста в файле
Уважаемые эксперты и форумчане, помогите решить задачу пожалуйста:
Есть файл 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
не работает(
В первом, как и во втором могут быть цифры, звездочки, точки ...
Способ, предложенный amel27 »
Это Ваш способ, а не коллеги amel27. А способ работает (http://forum.oszone.net/post-1838657.html#post1838657).
Если кто не умеет читать, я и написал СПОСОБ, предложенный(который предложил) amel27.
У меня два файла и после прогона этим способом в изначальном файле количество строк уменьшается не на количество строк во 2, а раза в 3 большем.
ajakzs, для тех, кто не умеет читать: выкладывайте архив с образцом исходного (1.txt) файла, с образцом файла-фильтра (2.txt), на которых «не работает».
я и написал СПОСОБ, предложенный(который предложил) amel27. »
И, да — приведите ссылку, где он предлагал это.
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║
║ │ │ │ ║
…
У меня два файла и после прогона этим способом в изначальном файле количество строк уменьшается не на количество строк во 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"
Спасибо, буду пробовать разобраться с вашим советом)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.