Extrahieren Sie einen Buchstaben und drei Zahlen aus TXT-Dateien mit Notepad ++ - Notepad ++, Regex, Suchen und Ersetzen, Extrahieren

Ich möchte aus vielen .txt-Dateien bestimmte Daten in Notepad ++ extrahieren. Es hat eine Menge 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 ë (Y
SCfsfgh4GHGH1 + € ‡ Ş € € €?° € ¸ € k € ‡ Ş b | -A233 ™ (B ¤ ’˙ rtSdpeRB ˙ GÚS) PS 3: ÜBERTRAGUNGSDATEI erstellt von Modellierversion 1101322 SCH_900000_9008 @ Ź @

Und ich muss das extrahieren:

A233

TIPP: Vor dem Zeichen steht ein Leerzeichen (-A233) Außerdem hat jede Datei unterschiedliche Nummern neben dem Buchstaben A

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

Antworten:

0 für Antwort № 1

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

Finde was: .*? -(Ad+)

Ersetzen mit: 1n

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

(Ad+) - Definiert eine Erfassungsgruppe, die A findet, unmittelbar gefolgt von 1 oder mehreren Zahlen

1n - Ersetzt Ãœbereinstimmungen durch die erfasste Nummer und eine neue Zeile zum Trennen

Sie können die tauschen n mit dem Begrenzer Ihrer Wahl

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


0 für Antwort № 2

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 ihn manuell .txt Dateierweiterung mit .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


Lies jetzt