novregen
Goto Top

Erweitertes Suchen und Ersetzen

Hallo,

ich habe Buchungssätze die als Ascii/txt Datei ausgegeben und dann in die Buha Software eingelesen werden, in jeder Datei stehen dann mehrere dieser Zeilen:

EUR;H;179,43;9;9999;18-01111;;44444;55555;;;;0;Buchungstext,0;;;;XX;;;;;;;;;;

Um später auf einen Beleg zu verweisen müsste ich an der Stelle wo ich die zwei XX reingeschrieben habe eine
Eindeutige GUID eintragen, die zum Zeitpunkt der Erstellung der Ascii Datei noch nicht bekannt ist.
Die Eindeutige GUID könnte ich in einer separaten Liste mit einer Zusatzinformation RG-Nr und Betrag bzw. Kreditoren/Debitoren Nr. ausgeben lassen.

Es müßte nun ein Vergleich von RG.Nr + Betrag oder RG.Nr. + Kred./Deb. Nr. stattfinden, um dann die GUID im Text der Datei an der Stelle mit den XX einzutragen.

Kann man sowas mit einem erweiterten Suchen+Ersetzen bzw. einem Script lösen ? Wenn ich in das XX Feld vom Branchenprogramm auch nochmal die RG Nr. reinschreiben lassen würde,
wäre es ein einfaches Suchen und Ersetzen, jedoch gibt es mehrere Firmen, deshalb kommt es vor, das Belegnummern doppelt vorhanden sind, deshalb wird eine Abprüfung von zwei Komponenten benötigt.

Ich hoffe jemand hat eine Idee. Danke.

Content-ID: 377751

Url: https://administrator.de/contentid/377751

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

colinardo
colinardo 21.06.2018 aktualisiert um 13:03:34 Uhr
Goto Top
Servus.
Kann man sowas mit einem erweiterten Suchen+Ersetzen bzw. einem Script lösen ?
Kein Problem, obwohl ich das vermutlich eher mit einer Datenbank und einem JOIN sauberer lösen würde, aber wir kennen ja deine Umgebung nicht.

Hier ein Skript-Beispiel mit Powershell:
# Buchungsliste
$buchungen = 'D:\Buchungen.csv'  
# Liste mit GUIDs
$guidliste = 'D:\GUIDList.csv'  
# Beide Listen importieren
$quelle = Import-CSV $buchungen -Delimiter ";" -Header (1..28)  
$guiddata = Import-CSV $guidliste -Delimiter ";"  
# Zeilen der Buchungen durchlaufen
$quelle | %{
    # Kreditoren-Nr  (bspw. aus Spalte 5)
    $krednr = $_.5
    # Rech-Nr  (bspw. aus Spalte 6)
    $rechnr = $_.6
    # Spalte 18 passenden Wert aus GUIDListe zuweisen
    $_.18 = $guiddata | ?{$_.RECHNR -eq $rechnr -and $_.KREDNR -eq $krednr} | select -Expand GUID
}
# geänderte Daten in CSV Format zurückkonvertieren, Spalten-Überschriften und Anführungszeichen entfernen und das ganze wieder zurückschreiben.
($quelle | convertto-csv -delimiter ";" -NoType | select -skip 1) -replace '"','' |  sc $buchungen  
Wobei dann die GUID Liste so aussehen müsste:
RECHNR;KREDNR;GUID
18-01111;9999;436b4909-23ed-4297-a0b7-f636b6356438
18-01112;9999;8ffe8aca-2dcd-47b1-b780-05f315bb8a9f
18-01113;2222;a7b643fb-1ec0-41ab-99fb-5cbb5a8b8f18
Da nach deiner Beschreibung in der CSV Datei keine Header drin sind (steht zumindest nichts davon), werden im Skript einfach den Spalten Zahlen von 1-28 zugewiesen.
Nun musst du nur noch die passende Nummer der jeweiligen Spalte den Variablen in Zeile 11 und 13 zuweisen, und die Eingabe und Ausgabe Dateinamen anpassen, Fertig.

Alternativ könntest du natürlich die GUIDs auch selbst in Powershell erzeugen und in einer Ausgabedatei schreiben.
GUIDs erzeugt man ganz einfach so in Powershell:
[guid]::NewGuid().guid

Anpassungen gerne via PN gegen Aufwandsentschädigung.

Viel Spaß
Grüße Uwe
novregen
novregen 29.06.2018 aktualisiert um 10:01:26 Uhr
Goto Top
Hallo Uwe,

vielen Dank. Ich komme jetzt erst zum probieren. Ist es auch mgl. das man nicht nur die eine buchungen.csv/txt bearbeiten lässt, sondern alle buchungen Dateien in einem Ordner. Und diese dann mit der einen Gesamt GUIDList ?

Beim Probieren bekomme ich leider immer diesen Fehler

select : Die GUID-Eigenschaft kann nicht gefunden werden.
In E:\GuidBuchen.ps1:15 Zeichen:79
+     $_.18 = $guiddata | ?{$_.RECHNR -eq $rechnr -and $_.KREDNR -eq $krednr} | se ...
+                                                                               ~~
    + CategoryInfo          : InvalidArgument: (@{RECHNR=18-011...-05f315bb8a9f }:PSObject) [Select-Object], PSArgumentException
    + FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand
colinardo
colinardo 29.06.2018 aktualisiert um 10:05:35 Uhr
Goto Top
Die GUID-Eigenschaft kann nicht gefunden werden.
Dann enthält deine CSV kein Feld mit diesem Namen!

Ist es auch mgl. das man nicht nur die eine buchungen.csv/txt bearbeiten lässt, sondern alle buchungen Dateien in einem Ordne
Klar mach einfach eine Foreach-Schleife drum ...
novregen
novregen 29.06.2018 um 10:18:41 Uhr
Goto Top
Hab den Fehler gefunden. In der GUIDList fehlt ein ; hinter Guid

RECHNR;KREDNR;GUID

18-01111;9999;436b4909-23ed-4297-a0b7-f636b6356438

Kannst du mir hier helfen wie es mit der Foreach Schleife aussieht, Dateien würden dann alle in dem einen Ordner liegen.

Spielt es eine Rolle ob die Buchungen vom Dateityp csv oder txt Dateien sind ?