newbi2009 1 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 Guten Tag und ein "frohes, neues jahr" zusammen. Ich habe ein Problem, bei dem ich gedacht habe, dass das eigentlich ein "Klax" sein müsste- ich hänge aber jetzt schon seit 2 Stunden daran, ohne wirklich weiter zu kommen: Ich habe eine CSV-Datei (erstellt aus einer Excel Arbeitsmappe), aus der ich einige Daten in ein Array schieben möchte (ich brauche also alle Zeilen, ab Zeile 6). Diese CSV sieht so aus: in den ersten 5 Zeilen dieser CSV-Datei steht ausschliessslich Datenmüll, der aus der Datei herausgeschnitten werden soll! zum Beispiel die Überschrift aus der Excel Datei, aus der diese CSV entstanden ist Schmitz;Harald;Schmitz@zuHause.de;123456; ;Heiner;;234567; Müller;;Mueller@zuHause.de;; Maier;Susanne;;456789 ;;;;;;;;;;;;;; Da diese Datei keinen brauchbaren Header hat, will ich mir den selber erstellen . Dazu lese ich die o.g. Datei ab Zeile 6 ein $csvContent = Get-Content C:\temp\Test.csv | select -skip 5 ..erstelle mir meinen Header $csvHeader = 'Nachname;Vorname;Email;PersonalNummer' ....setze mir daraus eine Variable zusammen und speicher diese als CSV-Datei wieder ab $xyz=$csvHeader,$csvContent > C:\temp\Test2.csv ....nun lese ich diese neue Datei in ein Array wieder ein $ergebnis = @(import-csv -path C:\temp\Test2.csv -delimiter ";" -encoding utf8 ) ...und kann dieses auch abfragen. $ergebnis[1] $ergebnis[1].Personalnummer Das funktioniert einwandfrei! Mein Problem ist, dass ich es mir sparen möchte, den Inhalt von $xyz als csv abzuspeichern und neu einzulesen. Aber jeder Versuch, das zu umgehen scheitert irgendwie kläglich. Hat da jemand eine Idee, wie ich da vorgehen muss? vielen Dank Holgw Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 Moin, stellen wir das Ganze doch mal auf die Füße: Was hast du denn insgesamt vor? Gruß, Nils Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 (bearbeitet) vor einer Stunde schrieb newbi2009: erstellt aus einer Excel Arbeitsmappe Es gibt ein Modul, mit dem Du Excel-Dateien direkt verarbeiten kannst: ImportExcel. Das macht die Sache eventuell leichter. vor einer Stunde schrieb newbi2009: Da diese Datei keinen brauchbaren Header hat, will ich mir den selber erstellen . Dafür gibt es beim cmdlet Import-Csv den Parameter -Header, mit dem man eigene Header hinzufügen kann. vor einer Stunde schrieb newbi2009: Mein Problem ist, dass ich es mir sparen möchte, den Inhalt von $xyz als csv abzuspeichern und neu einzulesen. Aber jeder Versuch, das zu umgehen scheitert irgendwie kläglich. Hat da jemand eine Idee, wie ich da vorgehen muss? Ja ... quasi oben alles beantwortet ... Ach übrigens, wenn Du Code postest, diesen am Besten auch als Code formatieren (das ist der Button "</>" oben im Editor) bearbeitet 5. Januar 2022 von BOfH_666 Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 5. Januar 2022 Autor Melden Teilen Geschrieben 5. Januar 2022 vor einer Stunde schrieb NilsK: Moin, stellen wir das Ganze doch mal auf die Füße: Was hast du denn insgesamt vor? Gruß, Nils Hi Nils, Ich habe immer wieder Excel-Dateien, die den gleichen Aufbau haben. Nur eben unterschiedlich mit Namen, Mail-Adresse, etc... befüllt. Diese werden mir als csv-Datei abgespeichert zur Verfügung gestellt. Hier sind halt die ersten paar Zeilen immer Datenmüll. Ich möchte die Zeilen, die die Benutzer-Informationen (in der csv immer ab Zeile 6) also weiterverarbeiten. Dazu möchte ich diese in einem mehrdimensionalen Array haben, damit ich ich für jeden Benutzer die einzelnen Daten explizit ansprechen kann (z.b. Mailadresse von Benutzer aus Zeile 7 => $ergebnis[2].Email) Quasi genau so, wie ich es habe, wenn ich den Zwischenschritt mit der zweiten csv Datei, die ich abspecihere und wieder einlese, habe. Halt nur, ohne den Umweg eine neue Datei abzulegen und wieder einzulesen.... Danke und Gruß Holger vor 52 Minuten schrieb BOfH_666: Es gibt ein Modul, mit dem Du Excel-Dateien direkt verarbeiten kannst: ImportExcel. Das macht die Sache eventuell leichter. Dafür gibt es beim cmdlet Import-Csv den Parameter -Header, mit dem man eigene Header hinzufügen kann. Ja ... quasi oben alles beantwortet ... Ach übrigens, wenn Du Code postest, diesen am Besten auch als Code formatieren (das ist der Button "</>" oben im Editor) Hallo BOfH_666, danke für Deine Antwort. Das ImportExcel-Modul schaue ich mir einmal genauer an. Dankefür den Tipp! Allerdings bringt mir das cmdlet Import-Csv nicht so viel. Ich habe ja eine Variable ($xyz) in die ich meinen selbstgebauten Header und die nötigen "Daten-Zeilen" aus der ursprünglichen csv Datei gelegt habe....... Ich bekomme es aber nicht hin, diese Variable als Array zu benutzen. Ich muss zuerst den Inhalt der Variable in eine Datei abspecihern und DANN mit import-csv diese neue Datei wieder einlesen (der Inhalt der abgespeciherten csv Datei ist ja genauso, wie ich es brauche..... nur bekomme ich diesen halt nicht in ein Array) Danke und Gruß Holger Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 Moin, aha, es handelt sich also um eine wiederkehrende Aufgabe mit wechselnden Daten? Was geschieht damit, d.h. in welcher Art verarbeitest du das weiter? Bekommst du die CSVs direkt oder erzeugst du die selbst? Falls du die CSVs bekommst, könntest du auch die Excels direkt erhalten? Hintergrund der Fragen: Wenn wir wissen, welche Aufgabe du eigentlich lösen musst, können wir dir vielleicht besser helfen. Wir erleben immer wieder, dass wir ein Detailproblem mit jemandem lösen und hinterher feststellen, dass es viel leichter wäre, die tatsächliche Aufgabe ganz anders anzugehen. Gruß, Nils Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 5. Januar 2022 Autor Melden Teilen Geschrieben 5. Januar 2022 vor 10 Minuten schrieb NilsK: Moin, aha, es handelt sich also um eine wiederkehrende Aufgabe mit wechselnden Daten? Was geschieht damit, d.h. in welcher Art verarbeitest du das weiter? Bekommst du die CSVs direkt oder erzeugst du die selbst? Falls du die CSVs bekommst, könntest du auch die Excels direkt erhalten? Hintergrund der Fragen: Wenn wir wissen, welche Aufgabe du eigentlich lösen musst, können wir dir vielleicht besser helfen. Wir erleben immer wieder, dass wir ein Detailproblem mit jemandem lösen und hinterher feststellen, dass es viel leichter wäre, die tatsächliche Aufgabe ganz anders anzugehen. Gruß, Nils Hi Nils, ja, ich könnte auch die Excel-Datei bekommen. Das ist kein Problem. Was ich damit weiter vorhabe ist nicht ganz einfach zu erklären und da werde ich wohl auch noch lange dran sitzen, bis ich das hinbekomme. Im Endeffekt muss ich die Daten, die in der Excel geliefert werden herausfiltern und damit existierende Benutzer-Daten auf einem Oracle-LDAP-Server updaten. Sprich: Benutzer x soll ein bestimmtes Flag auf dem LDAP Server gesetzt bekommen. Das mache ich bisher alles "zu Fuß". Es kommt aber vor, dass Excel-Tabellen mit 60 oder mehr Benutzern reinkommen, bei denen manuell unterschiedliche Flags gesetzt werden müssen, oder diese in unterschiedlioche Gruppen aufgenommen werden müssen..... Das möchte ich so weit automatisieren, wie es mir möglich ist.... Lange Rede, kurzer Sinn: Es wäre mir tatsächlich schon mega geholfen, wenn Ihr mir bei meinem ursprünglichen Problem helfen könntet.... Es werden bestimmt beim Entwickeln noch genug andere Probleme auftauchen, die ich ich jetzt noch nicht absehen kann Danke und Gruß Holger Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 OK.... also prinzipiell bin ich absolut bei Nils. Wir haben hier schon öfters an Lösung von hinten durch die Brust ins Auge gebaut, die aber für die eigentlich zu lösende Aufgabe völlig unnötig waren. Davon unabhängig: vor 26 Minuten schrieb newbi2009: Allerdings bringt mir das cmdlet Import-Csv nicht so viel. Ich habe ja eine Variable ($xyz) in die ich meinen selbstgebauten Header und die nötigen "Daten-Zeilen" aus der ursprünglichen csv Datei gelegt habe....... Du kannst Dir doch das ganze Geraffel sparen, wenn Du die aus Deiner Excel-Datei erzeugte CSV-Datei, die ja keine Header hat, ganz normal mit Import-CSV einliest, dabei mit dem Parameter -Header, die gewünschten Header dazupackst und mit einem Select-Object -Skip 5, die ersten 5 Zeilen auslässt. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 (bearbeitet) Moin, gut, zu deinem akuten Punkt hat Olaf dir ja schon Hinweise gegeben. Aber deine Schilderung illustriert schön, was ich meine: vor 4 Minuten schrieb newbi2009: Im Endeffekt muss ich die Daten, die in der Excel geliefert werden herausfiltern und damit existierende Benutzer-Daten auf einem Oracle-LDAP-Server updaten. Ja, das ist eine typische Anforderung. Als Berater denke ich mir: Wie kommen denn die Daten in das Excel hinein? Wäre es evtl. sinnvoller, diesen Umweg einzusparen und dort, wo bislang das Excel erzeugt wird, gleich direkt das LDAP zu ändern? Vielleicht ist das auch noch nicht der richtige Ansatz, aber du siehst evtl., was ich meine. Gruß, Nils bearbeitet 5. Januar 2022 von NilsK 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 (bearbeitet) Vielleicht isses einfacher, wenn Du es als Code siehst: $ergebnis = Import-Csv -Path C:\temp\Test.csv -Header 'Nachname','Vorname','Email','PersonalNummer' -Delimiter ';' | Select-Object -Skip 5 Aber nochmal: .... Nils Ansatz wäre der um Welten professionellere!! bearbeitet 5. Januar 2022 von BOfH_666 Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 5. Januar 2022 Autor Melden Teilen Geschrieben 5. Januar 2022 vor 18 Minuten schrieb BOfH_666: OK.... also prinzipiell bin ich absolut bei Nils. Wir haben hier schon öfters an Lösung von hinten durch die Brust ins Auge gebaut, die aber für die eigentlich zu lösende Aufgabe völlig unnötig waren. Davon unabhängig: Du kannst Dir doch das ganze Geraffel sparen, wenn Du die aus Deiner Excel-Datei erzeugte CSV-Datei, die ja keine Header hat, ganz normal mit Import-CSV einliest, dabei mit dem Parameter -Header, die gewünschten Header dazupackst und mit einem Select-Object -Skip 5, die ersten 5 Zeilen auslässt. ...grundsätzlich ne gute Idee, hätte ich auch selber drauf kommen können Aber so richtig funktionieren tut das auch nicht $abc = @(import-csv -path C:\temp\Test.csv -Header 'Nachname;Vorname;Email;PersonalNummer' | Select-Object -skip 5) ein $abc bringt dann auch das gewünschte Ergebnis: Nachname;Vorname;Email;PersonalNummer ------------------------------------- Schmitz;Harald;Schmitz@zuHause.de;123456; ;Heiner;;234567; Müller;;Mueller@zuHause.de;; Maier;Susanne;;456789 ;;;;;;;;;;;;;; Müller;;Mueller@zuHause.de;; auch ein $abc[2] bringt das gewünschte Ergebnis Nachname;Vorname;Email;PersonalNummer ------------------------------------- Müller;;Mueller@zuHause.de;; allerdings liefert ein $abc[2].Email kein Ergebnis ?! Was mache ich denn hier falsch? Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 Du hast Objekte. Warum muss es unbedingt ein Array sein. Mit foreach über $abc gehen und dabei die Arbeiten erledigen. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 (bearbeitet) vor 43 Minuten schrieb newbi2009: Aber so richtig funktionieren tut das auch nicht Bitte den Code so ausführen, wie ich ihn gepostet hatte!!!! Und das Ergebnis Array ist dann natürlich $ergebnis[3] ... usw ... bearbeitet 5. Januar 2022 von BOfH_666 Zitieren Link zu diesem Kommentar
cj_berlin 1.313 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 vor 2 Stunden schrieb BOfH_666: Bitte den Code so ausführen, wie ich ihn gepostet hatte!!!! ...und bevor der TO verzweifelt: Du hast -Delimiter ';' vergessen. Per Default ist ein CSV-Delimiter ein Komma, daher heißt CSV ja auch Comma Separated Values. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 (bearbeitet) vor 12 Minuten schrieb cj_berlin: Du hast -Delimiter ';' vergessen. ... hatte ich aber doch schon ergänzt!? ... also zumindest vor Deiner Nachricht bearbeitet 5. Januar 2022 von BOfH_666 Zitieren Link zu diesem Kommentar
cj_berlin 1.313 Geschrieben 5. Januar 2022 Melden Teilen Geschrieben 5. Januar 2022 vor 2 Minuten schrieb BOfH_666: ... hatte ich aber doch schon ergänzt!? ... also zumindest vor Deiner Nachricht Ich meinte den TO... war etwas ungünstig formuliert, das gebe ich zu. 1 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.