Extraia uma letra e três números de arquivos .txt usando o Notepad ++

0

Eu gostaria de extrair de muitos arquivos .txt certos dados no Notepad ++. Ele tem muitos dados em um arquivo, mas eu só preciso de informações específicas ...

Isso é o que parece em um arquivo:

©Q Ńü Vý 8 ź) €G' €\Y € €w) €â' € K¶ K¶}Ąg† ‚Z™y ë( \Y
SCfsfgh4GHGH1+ €‡Ş € € €?° €¸ € k k € ‡Ş b | -A233 ™ž B¤ ˙˙˙˙˙˙˙˙˙˙˙˙ ’ ˙ rtSdpeRB ˙ GÚS)PS 3: TRANSMIT FILE created by modeller version 1101322 SCH_900000_9008 @Ź@

E preciso extrair isso:

A233

DICA: Há um espaço antes do sinal (-A233)      Além disso, cada arquivo tem números diferentes ao lado da letra A

No arquivo original se parece com isso (muitos espaços são extraídos via copiar e colar):

    
por kiki1989sb 10.03.2016 / 22:41

2 respostas

0

Você pode usar Replace (ctrl-h) com o seguinte:

Encontre o que: .*? -(A\d+)

Substitua por: \n

Marque a caixa ". corresponde à nova linha" se eles existirem em seus arquivos

Explicação:

.*? - - Localiza tudo até "-", incluindo quaisquer novas linhas

(A\d+) - Define um grupo de captura que encontra A seguido imediatamente por 1 ou mais números

\n - Substitui as correspondências com o número capturado e uma nova linha para separá-las

Você pode trocar o \n pelo delimitador de sua escolha

Observe que isso não excluirá nenhum texto após a última correspondência, mas como você já está em um editor de texto, excluí-lo é trivial.

    
por 11.03.2016 / 00:00
0

Como você tem muitos arquivos .txt, faz sentido fazer uma automação simples em vez de extrair os valores de cada arquivo manualmente. Eu sugiro usar o WSH VBScript abaixo:

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

Basta colar esse código no bloco de notas, salvar como arquivo de texto e substituir manualmente a extensão de arquivo .txt por .vbs . Então, tudo o que você precisa é selecionar seus arquivos de texto na janela do Explorer e arrastá-los e soltá-los no script.

Para os arquivos que você compartilhou, eu tenho a saída da seguinte forma:

30_SCH51BQ139.txt

036

30_SCH51BQ141.txt

038

30_SCH51BQ144.txt

040

30_SCH51BQ147.txt

043

    
por 12.03.2016 / 21:05