Extrahieren Sie mit Notepad ++ einen Buchstaben und drei Zahlen aus TXT-Dateien


0

Ich möchte aus vielen .txt-Dateien bestimmte Daten in Notepad ++ extrahieren. Es hat viele Daten in einer Datei, aber ich brauche nur bestimmte ...

So sieht eine Datei aus:

© Q Ńü Vý 8 ź) G '' \ Y '' w '' K '' K '' G '' Z '' (\ Y
SCfsfgh4GHGH1 + € ‡ Ş €? ° € ¸ € k € PS 3: ÜBERTRAGUNGSDATEI erstellt mit Modelliererversion 1101322 SCH_900000_9008 @ Ź @

Und ich muss das extrahieren:

A233

TIPP: Vor dem Vorzeichen ist ein Leerzeichen (-A233). Außerdem hat jede Datei neben dem Buchstaben A eine andere Nummer

In der Originaldatei sieht das so aus (viele Leerzeichen werden per Copy-Paste extrahiert): Bildschirmfoto


Ist das eine Binärdatei? Was möchten Sie mit den Daten tun, wenn Sie sie haben? Liegt es immer im selben Format vor (Buchstabe + 3 Ziffern)? Hat es immer | -davor?
DavidPostill

Ich möchte es mit der Datenbank vergleichen. Ja, es ist immer dasselbe Format wie du gesagt hast, auch | - liegt immer vor. Bezüglich der Frage nach Binärdateien bin ich damit nicht vertraut, daher kann ich Ihnen keine Antwort geben ...
kiki1989sb

Antworten:


0

Sie können Ersetzen (Strg-H) mit den folgenden verwenden:

Finde was: .*? -(A\d+)

Ersetzen mit: \1\n

Aktivieren Sie das Kontrollkästchen für ".matches newline", wenn diese in Ihren Dateien vorhanden sind

Erläuterung:

.*? - - Findet alles bis zu "-", einschließlich eventueller Zeilenumbrüche

(A\d+) - Definiert eine Erfassungsgruppe, die A findet, unmittelbar gefolgt von 1 oder mehr Zahlen

\1\n - Ersetzt Übereinstimmungen durch die erfasste Nummer und eine neue Zeile zum Trennen

Sie können das \nmit dem Begrenzer Ihrer Wahl austauschen

Beachten Sie, dass dadurch nach der letzten Übereinstimmung kein Text gelöscht wird. Da Sie sich jedoch bereits in einem Texteditor befinden, ist das Löschen trivial.


Nein, ich möchte die Zahlen neben dem Buchstaben A extrahieren, da jede Datei eine andere Nummer hat. Ich möchte, dass sie extrahiert werden, damit ich sie mit der Datenbank vergleichen kann ...
kiki1989sb

Tut mir leid, aber das funktioniert nicht, ich bekomme ein paar seltsame Zahlen ... Es stimmt mit jeder Zeile überein ... Ich habe einige der Dateien hochgeladen. Wenn Sie also Zeit haben, können Sie es selbst überprüfen. filedropper.com/test_63 Nochmals vielen Dank!
kiki1989sb

@ kiki1989sb: Ich habe gerade versucht, Ihre Daten herunterzuladen, kann aber keinen Link sehen. Benötige ich einen Account? Eher nicht anmelden, wenn nicht erforderlich ...
flyingfinger

0

Da Sie viele TXT-Dateien haben, ist es sinnvoll, eine einfache Automatisierung durchzuführen, anstatt die Werte aus jeder Datei manuell zu extrahieren. Ich schlage vor, das folgende WSH VBScript zu verwenden:

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

Fügen Sie diesen Code einfach in den Notizblock ein, speichern Sie ihn als Textdatei und ersetzen Sie die .txtDateierweiterung manuell durch .vbs. Dann müssen Sie nur noch Ihre Textdateien im Explorer-Fenster auswählen und per Drag & Drop auf das Skript ziehen.

Für die Dateien, die Sie freigegeben haben, hat ich die Ausgabe wie folgt:

30_SCH51BQ139.txt

036

30_SCH51BQ141.txt

038

30_SCH51BQ144.txt

040

30_SCH51BQ147.txt

043


Vielen Dank für das VBS-Skript. Ich habe dies bereits in Excel über VB gelöst, aber wegen Makros (Sicherheit) muss ich es über Notepad ++
kiki1989sb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.