Удаление Строки Visual Basic

  • Автор темы mops0000
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

mops0000

#1
есть файл в котором более 2 миллионов строк(логи)(весит 361 мб). Нужно, чтобы удалялись строки содержащие определенное слово. Я написал вот такой скрипт в Visual Basic:

Код:
sub newmacros
dim v as range
dim x as long
set v = activedocument.range
for x = 1 to 2500000
with v.find
.text = "Слово1"
if .execute then
v.select
selection.bookmarks("\line").select
selection.delete
end if
end with
next
end sub
но в ворде данный документ не открывается, чтобы применить скрипт. Пробывал скачивал несколько редакторов: SciTE, EmEditor, но они почему то пишут, что во второй строке ошибка(нет закрывающего определения).
Посоветуйте, чем открыть файл, чтобы можно было применить данный скрипт и как дописать скрипт, чтобы указать можно было несколько слов сразу, и чтобы удалялись строки, в которых эти слова расположены?
 

LuMee

Well-known member
02.05.2006
477
0
#2
Файл - обычный текстовый или doc? Если просто текст, лучше написать отдельную программку, которая этот файл сама переработает, т.е. обойтись без сторонних текстовых редакторов (им 300 с гаком метров реально тяжело сжевать).
Если у вас имеется Powershell (в семерке и висте он вроде сейчас по умолчанию), то в нем выполнить что-то типа такого:
Код:
$logs_file = "d:\logs\log.txt"
$filtered_log_file = "d:\logs\filtered_log.txt"
cat $logs_file | where { !($_ -match "Слово1|Слово2|Слово3") } | out-file -filepath $filtered_log_file
Здесь log.txt будет файлом с логом, в filtered_log.txt сложится отфильтрованный лог, ключевые слова понятно куда вписывать.
 

alex77755

Well-known member
15.02.2009
128
0
#3
но в ворде данный документ не открывается,

и не надо если лог текстовой. Примерно так:


Код:
Private Sub Комманда1_Click()
Dim fso, fs1, f1, i, n, st
Dim mas_st(10)
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set fs1 = fso.GetFile("C:\base.txt")
Open "C:\out.txt" For Output As 1
'проверка наличия файла
If Not fs1 = Empty Then
Set f1 = fs1.OpenAsTextStream(1)
'чтение всего файла построчно
Do While Not f1.AtEndOfStream
st = f1.ReadLine
If InStr(1, st, "слово") = 0 Then Print #1, st
Loop
End If
Close #1
End Sub
 
Статус
Закрыто для дальнейших ответов.