POWERSHELL txt auslesen mit csv oder mdb abgleichen und zusammen in neue datei schreiben
Hallo an alle Powersheller,
brauche dringend Hilfe.
Muss als Notlösung ein Script schreiben welches die unten aufgeführten Dinge abfrägt und erledigt, leider habe ich noch nie gescriptet und kann sie allenfalls lesen und es fehlt mir offengestanden auch wohl das analytische Denkvermögen dafür .
Es ist Sonntag und ich habe keinen blassen Schimmer wie ich bis Ende der Woche diese für mich schier unlösbare Aufgabe lösen soll;
AUFGAB Script
1. eine .txt auslesen (MUSTER: Kundennr;Kontonr;Name;Wohnort --> also z. B.: 12356;88888;Nadine Mueller;Berlin)
- dann soll die Kontonnr. (88888) mit einer anderen Datei (CSV oder .mdb, ähnlicher aufbauf wie txt, getrennt durch ";" mit Überschriftspalten) abgefragt werden ob diese dort vorhanden ist
- und wenn ja, dann soll aus dieser csv Datei die restlichen Daten (Geb. Datum; PLZ) ausgelesen werden
- und zusammen mit der betreffenden Zeile aus der txt Datei in eine neue Datei geschrieben werden:
so dass am Schluss das Ergebnis so aussieht:
12356;88888;Nadine Mueller;Neumarkt;160580;92318
dass soll dann Zeile für Zeile mit dem Inhalt der .txt passieren und bestenfalls, soll das endergebnis ein *.in Datei sein, bei welcher jede "Spalte" eine genauz länge von z. B. 15 Zeichen hat.
wenn also eine Spalte aus der CSV leer ist( dann soll dort in der enddatei auch ein Platzhalter von 15 leerzeichen stehen)
das hat den Hintergrund, dass diese *.in Datei anschließend von einer Schnittstelle für ein DMS System genutzt wird und die leeren datensätze natürlich auch als "leer" übergeben werden sollen.
Diese Schnittstelle fragt z. b spaltenweise /zeichenweise ab;
also Zeichen 0 - bis 4 IST Kontonr, 6 - 10 IST Kundennr. usw.
Kann mir jemand Helfen? Ich habe keinerlei Ansatz ich habe versucht mir einzelen google lösungen zusammenzubauen bzw. mich einzulesen aber es ist einfach nicht meins, dieses scripten...
vielen DANK!!!!!!
brauche dringend Hilfe.
Muss als Notlösung ein Script schreiben welches die unten aufgeführten Dinge abfrägt und erledigt, leider habe ich noch nie gescriptet und kann sie allenfalls lesen und es fehlt mir offengestanden auch wohl das analytische Denkvermögen dafür .
Es ist Sonntag und ich habe keinen blassen Schimmer wie ich bis Ende der Woche diese für mich schier unlösbare Aufgabe lösen soll;
AUFGAB Script
1. eine .txt auslesen (MUSTER: Kundennr;Kontonr;Name;Wohnort --> also z. B.: 12356;88888;Nadine Mueller;Berlin)
- dann soll die Kontonnr. (88888) mit einer anderen Datei (CSV oder .mdb, ähnlicher aufbauf wie txt, getrennt durch ";" mit Überschriftspalten) abgefragt werden ob diese dort vorhanden ist
- und wenn ja, dann soll aus dieser csv Datei die restlichen Daten (Geb. Datum; PLZ) ausgelesen werden
- und zusammen mit der betreffenden Zeile aus der txt Datei in eine neue Datei geschrieben werden:
so dass am Schluss das Ergebnis so aussieht:
12356;88888;Nadine Mueller;Neumarkt;160580;92318
dass soll dann Zeile für Zeile mit dem Inhalt der .txt passieren und bestenfalls, soll das endergebnis ein *.in Datei sein, bei welcher jede "Spalte" eine genauz länge von z. B. 15 Zeichen hat.
wenn also eine Spalte aus der CSV leer ist( dann soll dort in der enddatei auch ein Platzhalter von 15 leerzeichen stehen)
das hat den Hintergrund, dass diese *.in Datei anschließend von einer Schnittstelle für ein DMS System genutzt wird und die leeren datensätze natürlich auch als "leer" übergeben werden sollen.
Diese Schnittstelle fragt z. b spaltenweise /zeichenweise ab;
also Zeichen 0 - bis 4 IST Kontonr, 6 - 10 IST Kundennr. usw.
Kann mir jemand Helfen? Ich habe keinerlei Ansatz ich habe versucht mir einzelen google lösungen zusammenzubauen bzw. mich einzulesen aber es ist einfach nicht meins, dieses scripten...
vielen DANK!!!!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 260315
Url: https://administrator.de/contentid/260315
Ausgedruckt am: 28.03.2024 um 20:03 Uhr
4 Kommentare
Neuester Kommentar
Moin,
mögen wir hier überhaupt nicht ! Also bitte den anderen Thread löschen. Danke.
Gruß jodel32
mögen wir hier überhaupt nicht ! Also bitte den anderen Thread löschen. Danke.
Gruß jodel32
Hallo loanna, Willkommen auf Administrator.de!
Kein Problem, machen wir doch glatt
Also ich gehe jetzt mal davon aus, das sowohl die Textdatei als auch die *.csv-Datei jeweils Spaltenüberschriften haben. Die Ausgabedatei wird in diesem Beispiel ohne Überschriften erstellt.
Die Textdatei wird in Zeile 2 und die CSV-Datei in Zeile 3 angegeben (Bei Bedarf das Encoding der Dateien anpassen). Die Ausgabedatei in Zeile 6. Die Feldbreite kann in Zeile 9 angepasst werden. Alle weiteren Infos findest du in den Kommentaren des Codes. Da ich nicht wusste wie die Daten in den Spalten ausgerichtet werden sollen bin ich einfach mal von einer Rechtsausrichtung der Daten in den Spalten ausgegangen(lässt sich bei Bedarf in Zeile 25 mit Verwendung von padRight anpassen). Ansonsten habe ich mich genau an deine Angaben gehalten.
-edit- Den Fall das ein Wert in einer Spalte größer ist als die max. Feldbreite habe ich noch nicht implementiert da ich nicht wusste wie Ihr das Handhabt (entweder den Wert rechts oder links abschneiden ?). Lässt sich bei Bedarf aber leicht nachrüsten.
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Kein Problem, machen wir doch glatt
Also ich gehe jetzt mal davon aus, das sowohl die Textdatei als auch die *.csv-Datei jeweils Spaltenüberschriften haben. Die Ausgabedatei wird in diesem Beispiel ohne Überschriften erstellt.
Die Textdatei wird in Zeile 2 und die CSV-Datei in Zeile 3 angegeben (Bei Bedarf das Encoding der Dateien anpassen). Die Ausgabedatei in Zeile 6. Die Feldbreite kann in Zeile 9 angepasst werden. Alle weiteren Infos findest du in den Kommentaren des Codes. Da ich nicht wusste wie die Daten in den Spalten ausgerichtet werden sollen bin ich einfach mal von einer Rechtsausrichtung der Daten in den Spalten ausgegangen(lässt sich bei Bedarf in Zeile 25 mit Verwendung von padRight anpassen). Ansonsten habe ich mich genau an deine Angaben gehalten.
-edit- Den Fall das ein Wert in einer Spalte größer ist als die max. Feldbreite habe ich noch nicht implementiert da ich nicht wusste wie Ihr das Handhabt (entweder den Wert rechts oder links abschneiden ?). Lässt sich bei Bedarf aber leicht nachrüsten.
# Dateien als Objekte importieren
$data1 = Import-CSV "C:\data1.txt" -Delimiter ";" -Encoding Default
$data2 = Import-CSV "C:\data2.csv" -Delimiter ";" -Encoding Default
# Ausgabedatei die erstellt wird
$FILEOUT = 'C:\data_out.in'
# Feldbreite festlegen
$FIELDWIDTH = 15
# zwei neue Spalten zum Referenzobjekt hinzufügen
$data1 | Add-Member -MemberType NoteProperty -Name 'Geb. Datum' -Value ''
$data1 | Add-Member -MemberType NoteProperty -Name 'PLZ' -Value ''
foreach($line in $data1){
# Suche entsprechende Daten in der zweiten Datei anhand der Kontonr.
$result = $data2 | ?{$_.Kontonr -eq $line.Kontonr}
# wenn es ein Ergebnis gibt ergänze die Daten von den Spalten 'plz' und 'Geb. Datum' aus der CSV-Datei in der aktuelle Zeile
if ($result){
$line.'Geb. Datum' = $result.'Geb. Datum'
$line.plz = $result.plz
}
# padding (links) für alle Spalten hinzufügen
$data1 | Get-Member -MemberType NoteProperty | %{
$line.($_.Name) = $line.($_.Name).padLeft($FIELDWIDTH,' ')
}
}
# Daten zu CSV-Format konvertieren, die Anführungszeichen ersetzen die dabei normalerweise erstellt werden, Überschriften überspringen und als Datei speichern
($data1 | convertto-csv -Delimiter ";" -NoTypeInformation | select -skip 1 | out-string).replace('"','') | Set-Content $FILEOUT
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Muss als Notlösung ein Script schreiben welches die unten aufgeführten Dinge abfrägt und erledigt, leider habe ich noch nie gescriptet und kann sie allenfalls lesen und es fehlt mir offengestanden auch wohl das analytische Denkvermögen dafür .
p.s. Welchen Fachinformatiker hast du ? Ich hoffe nicht den für "Anwendungsentwicklung"