Wie kann ich die Felder in einer flachen Datei mit Notepad ++ zählen?

916
LikestoLearn

Ich arbeite mit vielen flachen Dateien, die durch Pfeifen getrennt sind und in etwa so aussehen:

John|Smith|01|01|1901|123 Road 

Gibt es eine Möglichkeit herauszufinden, dass '1901' das fünfte Feld dieses Datensatzes ist, basierend auf den Pipes ('|')?

Dies wäre so unglaublich nützlich und würde mich davon abhalten, Felder in riesigen Dateien zu zählen.

1
Verwenden Sie dazu PowerShell, probieren Sie es aus und recherchieren Sie dies mit PowerShell und RegEx. Schauen Sie in "Get-Content" und schauen Sie sich den "-Replace" an.",""` und pipe das zu einem 'Set-Content'. Du willst, dass der Regex alles nach dem 4. Pipe-Trennzeichen erhält, aber vor dem 5. Also alles zwischen den beiden, aber nicht inklusive Speicher mit einem Skript-Prozess, den ich in der Vergangenheit geschrieben habe. Pimp Juice IT vor 7 Jahren 0
Kein Problem, haben Sie eine passende Lösung gefunden? Pimp Juice IT vor 6 Jahren 0

2 Antworten auf die Frage

1
miroxlav

Ist es möglich, dass Sie ein besseres Werkzeug für den Job verwenden?

Anstelle des N ++ nehmen Sie einfach einen guten CSV-Reader und überprüfen Sie die Spalten im Raster. Einige Leser sind frei. Der empfohlene reCsvEditor kann CSV-Dateien nicht nur lesen, sondern auch bearbeiten, wenn dies erforderlich ist. Der Schlüsselschritt in diesem Editor ist das Auswählen von Optionen auf dem Bildschirm zum Öffnen der Datei entsprechend Ihrer CSV-Datei: Was ist das Trennzeichen? Gibt es Anführungszeichen um die Werte? Gibt es Zeilenumbrüche in den Werten? Dann ist Ihre CSV-Datei korrekt geöffnet. Dann zählt der Editor auch indirekt die Felder. Sie können leicht erkennen, welches Feld ganz rechts ist. Es gibt nicht viel Dokumentation über den Herausgeber, der Autor schlägt vor, ein Ticket zu posten oder in Foren zu posten.

Als einfachere Alternative können Sie auch andere CSV-Editoren erreichen, wenn der reCsvEditor komplex erscheint. Zum Beispiel teste ich gerade UniCsvEd 1.1, was im Grunde kein Geld kostet .

Danke für Ihre Antwort. Dies könnte tatsächlich meine beste Option sein, da ich keine Optionen außerhalb von N ++ untersucht hatte. Vielen Dank für Ihr Feedback. Wissen Sie, wo ich den reCsvEditor besser nutzen kann? Danke noch einmal. LikestoLearn vor 6 Jahren 0
Ich habe die Antwort an Ihre zusätzlichen Fragen angepasst. miroxlav vor 6 Jahren 0
0
Stephen Rauch

So suchen Sie die Feldnummer basierend auf durch Pipe getrennten Feldern mit Notepad ++ 32-Bit.

  1. Installieren Sie das Python-Plugin. Um dies zu tun:

    1. Wählen Sie im Menü Plugins → Plugin Manager → Plugin Manager anzeigen
    2. Aktivieren Sie das Kontrollkästchen für Python Script und klicken Sie auf Installieren
  2. Erstellen Sie ein neues Skript: Wählen Sie im Menü Plugins → Python Script → New Script

  3. Benennen Sie das Skript Pipe Positionund wählen Sie Speichern
  4. Fügen Sie den folgenden Text in den Editor ein und speichern Sie die Datei
  5. Wählen Sie im Menü Plugins → Python Script → Scripts → Pipe Position

""" Notepad++ python script to count field based on delimiter. Displays a message box based on the cursor position when invoked  """ from Npp import * import re  field_delimiter = '|' current_pos = editor.getCurrentPos() line_number = editor.lineFromPosition(current_pos) line_start = editor.positionFromLine(line_number) line_end = editor.getLineEndPosition(line_number) line = editor.getTextRange(line_start, line_end) index = current_pos - line_start field_number = line.count(field_delimiter, 0, index)   notepad.messageBox("'%s' is field # %d" % ( line.split(field_delimiter)[field_number], field_number + 1)) 
Danke für Ihre Antwort. Nachdem Sie Ihre Anweisungen befolgt haben, wird im Meldungsfenster die Meldung "Unbekannte Ausnahme" angezeigt. Ich glaube nicht, dass ich in Ihren Anweisungen Punkte verpasst habe, aber möglicherweise habe ich es getan. Wissen Sie, warum ich diese Fehlermeldung erhalten würde, wenn Sie Ihr Skript ausführen? LikestoLearn vor 6 Jahren 0
https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi Stephen Rauch vor 6 Jahren 0