Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Цитата DenchikK:
Но хотелось бы понять, как это сделать в SED. »
Если всё-таки важнее результат, то вот VBS
Код: Выделить весь код
FileIn = "Z:\Box_In\filein.txt"                 'Имя исходного файла
FileOut = "Z:\Box_In\fileout.txt"               'Имя выходного файла

WhatFind = Array("dmitry", "alexy", "sergy")    'Ключевые слова поиска
Prefix = ""                                    'Префикс ключевого слова, например " "
Suffix = ""                                    'Суффикс ключевого слова, например ","

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Fin = FSO.OpenTextFile(FileIn, 1, False)
Text = Split(Fin.ReadAll, vbCrLf)
Fin.Close
    
N1 = LBound(Text)
NN = UBound(Text)
    
Set Fout = FSO.CreateTextFile(FileOut, 2)	', True)

With CreateObject("VBScript.RegExp")
    .IgnoreCase = True

    For Each Mem In WhatFind
        .Pattern = ".*" + Prefix + Mem + Suffix + ".*"
        
        For i = N1 To NN
            If .Test(Text(i)) Then
                Fout.WriteLine Text(i)
                If i + 1 <= NN Then Fout.WriteLine Text(i + 1)
            End If
        Next
    Next
End With

Fout.Close
Я попытался предусмотреть возможность исключить ложные выборки. Например, alex и alexy по ключевому литералу alex - одно и то же. (Сейчас в коде именно так, префикс и суффикс пустые). Поэтом безопаснее было бы определить, что такое слово c помощью префикса и суффикса, например " alex,".

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 05-04-2020 в 20:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:23, 05-04-2020 | #4