Я хотел бы извлечь из многих файлов .txt определенные данные в Notepad++. Он содержит много данных в одном файле, но мне нужны только конкретные ...

Вот как выглядит файл:

© Q Vü Vý 8 ź) € G '€ \Y € € w) € â € € K¶ K¶} Ąg † ‚Z ™ y ë (\Y
SCfsfgh4GHGH1+ € ‡ Ş € € €?° € ¸ € kk € ‡ Ş b | -A233 ™ ¤ B¤ ˙˙˙˙˙˙˙˙˙˙˙˙ ˙ rtSdpeRB ˙ GÚS) PS 3: ФАЙЛ ПЕРЕДАЧИ, созданный версией модели 1101322 SCH_900000_9008 @ Ź @

И мне нужно извлечь это:

A233

СОВЕТ: перед пробелом есть пробел (-A233) Кроме того, каждый файл имеет разные номера рядом с буквой A

В оригинальном файле это выглядит так (много пробелов извлекается с помощью copy-paste):Скриншот

2 ответа2

0

Поскольку у вас много файлов .txt, имеет смысл выполнить простую автоматизацию, а не извлекать значения из каждого файла вручную. Я предлагаю использовать WSH VBScript ниже:

strRes = ""
For Each strPath In WScript.Arguments
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(strPath) Then
            strRes = strRes & .GetFileName(strPath) & vbCrLf
            strCont = LoadTextFromFile(strPath, "us-ascii")
            With CreateObject("VBScript.RegExp")
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = "-A(\d{3})"
                Set objMatches = .Execute(strCont)
                For Each objMatch In objMatches
                    strRes = strRes & objMatch.SubMatches(0) & vbCrLf
                Next
            End With
        End If
    End With
Next
ShowInNotepad strRes

Function LoadTextFromFile(strPath, strCharset)
    With CreateObject("ADODB.Stream")
        .Type = 1 ' TypeBinary
        .Open
        .LoadFromFile strPath
        .Position = 0
        .Type = 2 ' adTypeText
        .Charset = strCharset
        LoadTextFromFile = .ReadText
        .Close
    End With
End Function

Sub ShowInNotepad(strToFile)
    Dim strTempPath
    With CreateObject("Scripting.FileSystemObject")
        strTempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & .GetTempName
        With .CreateTextFile(strTempPath, True, True)
            .WriteLine strToFile
            .Close
        End With
        CreateObject("WScript.Shell").Run "notepad.exe " & strTempPath, 1, True
        .DeleteFile (strTempPath)
    End With
End Sub

Просто вставьте этот код в блокнот, сохраните как текстовый файл и вручную замените расширение .txt на .vbs . Тогда все, что вам нужно, это выбрать текстовые файлы в окне проводника и перетащить их в скрипт.

Для файлов, которыми вы поделились, у меня есть следующий вывод:

30_SCH51BQ139.txt

036

30_SCH51BQ141.txt

038

30_SCH51BQ144.txt

040

30_SCH51BQ147.txt

043

0

Вы можете использовать Replace (ctrl-h) со следующим:

Найти то , .*? -(A\d+)

Заменить на: \1\n

Установите флажок ". Соответствует новой строке", если они существуют в ваших файлах

Объяснение:

.*? - - Находит все до "-", включая любые новые строки

(A\d+) - определяет группу захвата, которая находит A, за которым сразу следует 1 или более номеров

\1\n - заменяет совпадения захваченным числом и новой строкой для их разделения

Вы можете поменять \n с разделителем на ваш выбор

Обратите внимание, что это не приведет к удалению текста после последнего соответствия, но, поскольку вы уже находитесь в текстовом редакторе, его удаление тривиально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .