Benutzer mit den meisten Antworten
CSV Dateien Auslesen und in eine .txt Datei einfügen

Frage
-
Hallo,
ich habe 2 verschiedene CSV-Tabellen. In der einen steht eine Liste mit Anwendern und deren User-ID's sowie, zu welchem Team sie gehören. In der 2. CSV-Tabelle stehen diese Team-Bezeichnungen nun erneut (teilweise auch ausgeschrieben denn in der 1. steht z.B. "FIN" was das Team "Finanzen / Rechnungswesen" ist).
Tabelle 1:
UserID, Name, Vorname, Team
Z0XXXXX, Adler, Judy, ZVK
Z0XXXX1, Altenberg, Andrea, AV
Z0XXXX2, Baron, Dr. Gabriele, FIN
Tabelle 2:
Finanzen / Rechnungswesen, Versorgung (VK) / Beihilfe (BK), ZVK, DV, Controlling, AV /DR, LFK
Ich möchte nun gerne mit der PowerShell die beiden CSV-Tabellen auswerten, indem ich aus der 2. lediglich die Überschriften mit den Team-Bezeichnungen ziehe, diese in eine .txt-Datei packe und aus der 1. NUR die UserID's rausziehe, diese dann korrekt den Teams zuordne und diese in dieselbe .txt-Datei reinpacke.
Das Ganze soll dann so aussehen, dass in dieser .txt-Datei die UserID's der 1. Tabelle korrekt den Teambezeichnungen der 2. Tabelle zugeordnet sind. Zum Beispiel wie im oben soll Z0XXXX2, Team FIN dann in der .txt-Datei unter "Finanzen / Rechnungswesen" stehen und die anderen natürlich auch entsprechend.
Ich bin leider Anfänger, was die PowerShell angeht und habe einfach keinen konkreten Lösungsansatz parat. Danke im Vorraus fürs lesen und für eventuelle Antworten :-)
Viele Grüße,
Klibbird
Antworten
-
Gaaaanz wichtig hier zu lernen ist das PowerShell Objekte erzeugt und verarbeitet keinen Text!
PowerShell benutzt zum einlesen von CSV Daten das cmdlet Import-CSV
Vor dem benutzen eines cmdlet Befehls sollte man sich mit dem Befehl vertraut machen und die Hilfe zu dem Cmdlet lesen! Hier sollte man den Parameter -Full benutzen um die volle Hilfe (mit Beispielen) zu sehen.
Get-Help Import-CSV -Full
Oder: http://www.colorconsole.de/PS_Windows/de/Import-CSV.htm
Beim Import von den CSV Daten wird jede Datenzeile von PowerSHell in eine Objekt umgewandelt.
Um dir das zu zeigen machen wir jetzt einen PowerShell CSV Workshop:
Ich gehe nun von folgender CSV Datei im Pfad C:\temp\users.csv aus:
UserID,OrderID,Produkt,Auftrag
12345,O12345,2010,erstellen
12346,O12346,2003,erstellen
12347,O12347,2010,löschen
12348,O12348,2003,löschenBeim Einlesen mit Import-CSV wandelt PowerShell den Text in Objekte um!
Nun lese ich die CSV mit dem Cmdlet Import-CSV ein (mitmachen):
Jede Zeile entspricht einem Objekt. Jede Spalte wird in dem Objekt zu einem Property.
Ein Property ist ein Wert der über einen Namen angesprochen werden kann (Name=Wert).
Der Name des Properties ist der Name der Spalte aus der CSV Header Zeile!# User einlesen und in Variable $User ablegen $Users = Import-Csv 'C:\Temp\Users.csv' # User anzeigen $Users
Ergebnis:UserID OrderID Produkt Auftrag
------ ------- ------- -------
12345 O12345 2010 erstellen
12346 O12346 2003 erstellen
12347 O12347 2010 löschen
12348 O12348 2003 löschenDu siehst PowerShell gibt dir eine Tabelle aus mit Überschriften und Spalten.
Bei mehr als 4 Spalten stellt PowerShell jedes Objekt als Liste von Name=Wert Paaren dar, nicht als Tabelle!Nun kann ich die einzelnen Spalten (Properties) der einzelnen Objekte ansprechen (Mitmachen):
# User einlesen und in Variable $User ablegen $Users = Import-Csv 'C:\Imports\Users.csv' # dies kann man mit Select-Object erledigen $Users | Select-Object Produkt # oder $Users | Select-Object UserID # Select-Object kann auch mehrere Properties auf einmal heraus picken $Users | Select-Object UserId,OrderID,Auftrag
Mit dieser Vorgehensweise kannst du Tabelle 1 verarbeiten.
Leider entspricht die Kopfzeile aus der Tabelle 2 NICHT den CSV regeln weil sie Leerzeichen enthält und keine Ausrufungszeichen! Ebenso kannst du aus den Spalten namen keien Dateinamen machen da die Spalten namen schrägstiche enthalten die in Dateinamen verboten sind.Hier ist Text verarbeitung nötig.
Dies kannst du in der PowerShell mit vielen Cmdlets machen.
Zum einlesen von Textdateien wird in der PowerShell das Cmdlet Get-Content benutzt:Get-Help Get-Content -Full
oder: http://www.colorconsole.de/PS_Windows/de/Get-Content.htm
$FilePath = 'C:\Temp\Tabelle2.csv' # Pfad in der die Dateien erstellt werden sollen $Path = 'C:\temp' # Datei mit Get-Content Zeilenweise einlesen # nur die 1. Zeile wird geholt und in der Variablen $Zeile1 abgelegt $Zeile1 = Get-Content $FilePath -TotalCount 1 # Text in der PowerShell ist ein Objekt vom Typ String # das Objekt String bietet Methoden zum bearbeiten von text # diese Methoden nutze ich hier # leerzeichen mit unterstrichen ersetzen $Zeile1 = $Zeile1.replace(' ','_') # schrägstriche mit binderstrichen ersetzen $Zeile1 = $Zeile1.replace('/','-') $Zeile1 = $Zeile1.replace('\','-') # nun ist die Zeile geändert $Zeile1 # jetzt können wir die Zeile anhand des kommas in eine Liste (array) aufsplitten $Array = $Zeile1 -Split ',' # die einzelnen werte in dem array (liste) anzeigen $Array # für jeden Wert in der Liste Aktionen ausführen ForEach($Value in $Array){ # den führenden unterstrich entfernen If($Value.SubString(0,1) -eq '_'){ $Value = $Value.substring(1,$Value.length -1 ) } # Klammern () stellen sicher, das erst der Befehl in den Klammern ausgeführt wird (von innen nach aussen) # Join-Path "klebt" Pfade zusammen (erstellt pfade) # New-Item erstellt neue Dateien mit den Namen + .txt New-Item (Join-Path $Path "$Value.txt") -ItemType file }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Freitag, 6. September 2013 10:38 sdsdsdsfd
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 10. September 2013 22:15
Alle Antworten
-
Gaaaanz wichtig hier zu lernen ist das PowerShell Objekte erzeugt und verarbeitet keinen Text!
PowerShell benutzt zum einlesen von CSV Daten das cmdlet Import-CSV
Vor dem benutzen eines cmdlet Befehls sollte man sich mit dem Befehl vertraut machen und die Hilfe zu dem Cmdlet lesen! Hier sollte man den Parameter -Full benutzen um die volle Hilfe (mit Beispielen) zu sehen.
Get-Help Import-CSV -Full
Oder: http://www.colorconsole.de/PS_Windows/de/Import-CSV.htm
Beim Import von den CSV Daten wird jede Datenzeile von PowerSHell in eine Objekt umgewandelt.
Um dir das zu zeigen machen wir jetzt einen PowerShell CSV Workshop:
Ich gehe nun von folgender CSV Datei im Pfad C:\temp\users.csv aus:
UserID,OrderID,Produkt,Auftrag
12345,O12345,2010,erstellen
12346,O12346,2003,erstellen
12347,O12347,2010,löschen
12348,O12348,2003,löschenBeim Einlesen mit Import-CSV wandelt PowerShell den Text in Objekte um!
Nun lese ich die CSV mit dem Cmdlet Import-CSV ein (mitmachen):
Jede Zeile entspricht einem Objekt. Jede Spalte wird in dem Objekt zu einem Property.
Ein Property ist ein Wert der über einen Namen angesprochen werden kann (Name=Wert).
Der Name des Properties ist der Name der Spalte aus der CSV Header Zeile!# User einlesen und in Variable $User ablegen $Users = Import-Csv 'C:\Temp\Users.csv' # User anzeigen $Users
Ergebnis:UserID OrderID Produkt Auftrag
------ ------- ------- -------
12345 O12345 2010 erstellen
12346 O12346 2003 erstellen
12347 O12347 2010 löschen
12348 O12348 2003 löschenDu siehst PowerShell gibt dir eine Tabelle aus mit Überschriften und Spalten.
Bei mehr als 4 Spalten stellt PowerShell jedes Objekt als Liste von Name=Wert Paaren dar, nicht als Tabelle!Nun kann ich die einzelnen Spalten (Properties) der einzelnen Objekte ansprechen (Mitmachen):
# User einlesen und in Variable $User ablegen $Users = Import-Csv 'C:\Imports\Users.csv' # dies kann man mit Select-Object erledigen $Users | Select-Object Produkt # oder $Users | Select-Object UserID # Select-Object kann auch mehrere Properties auf einmal heraus picken $Users | Select-Object UserId,OrderID,Auftrag
Mit dieser Vorgehensweise kannst du Tabelle 1 verarbeiten.
Leider entspricht die Kopfzeile aus der Tabelle 2 NICHT den CSV regeln weil sie Leerzeichen enthält und keine Ausrufungszeichen! Ebenso kannst du aus den Spalten namen keien Dateinamen machen da die Spalten namen schrägstiche enthalten die in Dateinamen verboten sind.Hier ist Text verarbeitung nötig.
Dies kannst du in der PowerShell mit vielen Cmdlets machen.
Zum einlesen von Textdateien wird in der PowerShell das Cmdlet Get-Content benutzt:Get-Help Get-Content -Full
oder: http://www.colorconsole.de/PS_Windows/de/Get-Content.htm
$FilePath = 'C:\Temp\Tabelle2.csv' # Pfad in der die Dateien erstellt werden sollen $Path = 'C:\temp' # Datei mit Get-Content Zeilenweise einlesen # nur die 1. Zeile wird geholt und in der Variablen $Zeile1 abgelegt $Zeile1 = Get-Content $FilePath -TotalCount 1 # Text in der PowerShell ist ein Objekt vom Typ String # das Objekt String bietet Methoden zum bearbeiten von text # diese Methoden nutze ich hier # leerzeichen mit unterstrichen ersetzen $Zeile1 = $Zeile1.replace(' ','_') # schrägstriche mit binderstrichen ersetzen $Zeile1 = $Zeile1.replace('/','-') $Zeile1 = $Zeile1.replace('\','-') # nun ist die Zeile geändert $Zeile1 # jetzt können wir die Zeile anhand des kommas in eine Liste (array) aufsplitten $Array = $Zeile1 -Split ',' # die einzelnen werte in dem array (liste) anzeigen $Array # für jeden Wert in der Liste Aktionen ausführen ForEach($Value in $Array){ # den führenden unterstrich entfernen If($Value.SubString(0,1) -eq '_'){ $Value = $Value.substring(1,$Value.length -1 ) } # Klammern () stellen sicher, das erst der Befehl in den Klammern ausgeführt wird (von innen nach aussen) # Join-Path "klebt" Pfade zusammen (erstellt pfade) # New-Item erstellt neue Dateien mit den Namen + .txt New-Item (Join-Path $Path "$Value.txt") -ItemType file }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Freitag, 6. September 2013 10:38 sdsdsdsfd
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 10. September 2013 22:15
-
Hallo,
hat der Beitrag von Peter weitergeholfen?
Gruss,
RaulRaul Talmaciu, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo,
entschuldigt bitte die späte Antwort meinerseits, aber ich bin die letzten Tage einfach nicht eher dazu gekommen.
@ Peter:
Erst einmal vielen Dank für die ganzen Infos, Hilfestellungen und Mühen, die du in deinen Beitrag investiert hast!
Dennoch stellen sich mir noch ein paar Fragen:
1. In meiner Tabelle 2 stehen diese Dinge erst in der 4. Zeile, das Ganze sieht so aus:
Wie mache ich das denn an dieser Stelle nun?
2. Ich weiß leider nicht so recht, wie ich deine Hilfestellungen genau anwenden bzw. verknüpfen kann, sodass ich das Ergebnis aus beiden Tabellen in einer .txt-Datei habe. Als ich es versucht habe beides mal hintereinander auszuführen, öffnet er mir lediglich immer meine Tabelle Nr.1
Kannst du mir hier erneut eine Hilfe geben?
Viele Grüße und Danke im Voraus,
Klibbird
-
Hallo Klibbird
Du musst dies erst mal getrennt betrachten!
Wenn du ein großes Problem hast, zerlege es in viele kleine Probleme, löse die Kleinen Probleme und das große Problem ist verschwunden! (Teile und Herrsche).
Deine Tabelle 1 ist eine gute brave Tabelle. Ich glaube darüber müssen wir nicht mehr reden.
Deine 2. Tablette ist eine böse Taliban-nicht-nette!
Das einfachste wäre es wenn du in Excel die ersten 3 Zeilen Löschst und die Excel Tapete als neue CSV Datei abspeicherst.
Wenn das nicht geht müssen wir uns "Blind" darauf verlassen das die dritte Zeile die richtige ist.
Get-Content liest eine Datei Zeilenweise ein also können wir ganz leicht Zeilen Zählen oder wir suchen ein bestimmten Text der nur in dieser Zeile vorkommt.
Ich nehme Lösung B da diese Lösung sicherer die richtige Zeile findet.$FilePath = 'C:\Temp\Tabelle2.csv' # Pfad in der die Dateien erstellt werden sollen $Path = 'C:\temp' # Datei mit Get-Content Zeilenweise einlesen # und jede Zeile einzeln verarbeiten ForEach($Zeile in Get-Content $FilePath){ # Zeile mit dem Text Versorgung (VK) suchen If($Zeile -like "*Versorgung (VK)*") { # Wenn die Zeile gefunden wird, wird Sie in die Variabel geladen $ZeileGefunden = $Zeile # abbruch der such-schleife, nicht weitersuchen break } } # Text in der PowerShell ist ein Objekt vom Typ String # das Objekt String bietet Methoden zum bearbeiten von text # diese Methoden nutze ich hier # leerzeichen mit unterstrichen ersetzen $ZeileGefunden = $ZeileGefunden.replace(' ','_') # schrägstriche mit binderstrichen ersetzen $ZeileGefunden = $ZeileGefunden.replace('/','-') $ZeileGefunden = $ZeileGefunden.replace('\','-') # nun ist die Zeile geändert $ZeileGefunden # jetzt können wir die Zeile anhand des kommas in eine Liste (array) aufsplitten $Array = $ZeileGefunden -Split ',' # die einzelnen werte in dem array (liste) anzeigen $Array # für jeden Wert in der Liste Aktionen ausführen ForEach($Value in $Array){ # den führenden unterstrich entfernen If($Value.SubString(0,1) -eq '_'){ $Value = $Value.substring(1,$Value.length -1 ) } # Klammern () stellen sicher, das erst der Befehl in den Klammern ausgeführt wird (von innen nach aussen) # Join-Path "klebt" Pfade zusammen (erstellt pfade) # New-Item erstellt neue Dateien mit den Namen + .txt New-Item (Join-Path $Path "$Value.txt") -ItemType file }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum! -
Hallo Peter,
erst einmal erneut vielen Dank!
Muss ich an folgender Stelle:
# Datei mit Get-Content Zeilenweise einlesen # und jede Zeile einzeln verarbeiten ForEach($Zeile in Get-Content $FilePath){ # Zeile mit dem Text Versorgung (VK) suchen If($Zeile -like "*Versorgung (VK)*") { # Wenn die Zeile gefunden wird, wird Sie in die Variabel geladen $ZeileGefunden = $Zeile # abbruch der such-schleife, nicht weitersuchen break } }
das dann entsprechend auch für die anderen Abteilungen machen und das dann dadrunter jeweils nochmal schreiben oder?
Und wie bekomme ich denn die UserID's aus Tabelle 1 zu den jeweilig richtigen Abteilungen zugeordnet? Am Ende soll ja eine .txt rauskommen. Aus Tabelle 2 sollen lediglich die Überschriften entnommen werden und aus Tabelle 1 die entsprechenden UserID's die zu den jeweils korrekten Abteilungen gehören, untergeordnet werden. Ich meine, er legt ja jetzt unterschiedliche .txt-Dateien an, die mehrere Abteilungsnamen enthalten. Kann ich Pro Abteilung eine Datei machen und in diesen Dateien jetzt die UserID's entsprechend reinhauen?
Ich denke übrigens auch mal, dass ich das alles nicht als ein Programm ausführen kann oder? Ich arbeite nämlich Größtenteils mit dem PowerGUI Skript Editor. In welcher Reihenfolge und welchen Abschnitten sollte ich es denn am Besten ausführen?
Entschuldige die ganzen Fragen, aber ich bin da einfach richtiger Anfänger in dem Gebiet und nicht total versiert :-/
Viele Grüße,
Klibbird
- Bearbeitet Klibbird Mittwoch, 11. September 2013 13:19
-
Ich denke übrigens auch mal, dass ich das alles nicht als ein Programm ausführen kann oder?
Erstmal Ja! denke an das Teile und Hersche Prizip!! Erstmal die einzelnen Probleme Lösen!
Wenn du ein großes Problem hast, zerlege es in viele kleine Probleme, löse die Kleinen Probleme und das große Problem ist verschwunden! (Teile und Herrsche).
Am Ende soll ja eine .txt rauskommen.
Das hast du oben aber anders beschrieben. Jeden falls verstehe ich das so!
Ich meine, er legt ja jetzt unterschiedliche .txt-Dateien an, die mehrere Abteilungsnamen enthalten. Kann ich Pro Abteilung eine Datei machen und in diesen Dateien jetzt die UserID's entsprechend reinhauen?
Ja so ist das von mir gedacht. Ich dachte du wünschst das so.
Und wie bekomme ich denn die UserID's aus Tabelle 1 zu den jeweilig richtigen Abteilungen zugeordnet?
Das ist das geringste Problem! Erstmal müssen wir Tabelle1 und Tabelle2 sauber einlesen!
------------------------------------------------------------------
Also lass uns mal das bisherige zusammenfassen:
1. wir können Tabelle1 ordentlich einlesen. Code dazu ist (Pfad musst du anpassen!):
Import-CSV 'C:\temp\tabelle1.csv'
Funktioniert das ordentlich ohne Fehlermeldungen ?
2. Die Tabelle2 wird eingelesen, die richtige Zeile wird ausgelesen, dr Text von der richtigen Zeile wird verändert, für jede Abteilung wird eine Textdatei erzeugt.
Code dazu ist (Pfade musst du anpassen!):
$FilePath = 'C:\Temp\Tabelle2.csv' # Pfad in der die Dateien erstellt werden sollen $Path = 'C:\temp' # Datei mit Get-Content Zeilenweise einlesen # und jede Zeile einzeln verarbeiten ForEach($Zeile in Get-Content $FilePath){ # Zeile mit dem Text Versorgung (VK) suchen If($Zeile -like "*Versorgung (VK)*") { # Wenn die Zeile gefunden wird, wird Sie in die Variabel geladen $ZeileGefunden = $Zeile # abbruch der such-schleife, nicht weitersuchen break } } # Text in der PowerShell ist ein Objekt vom Typ String # das Objekt String bietet Methoden zum bearbeiten von text # diese Methoden nutze ich hier # leerzeichen mit unterstrichen ersetzen $ZeileGefunden = $ZeileGefunden.replace(' ','_') # schrägstriche mit binderstrichen ersetzen $ZeileGefunden = $ZeileGefunden.replace('/','-') $ZeileGefunden = $ZeileGefunden.replace('\','-') # nun ist die Zeile geändert $ZeileGefunden # jetzt können wir die Zeile anhand des kommas in eine Liste (array) aufsplitten $Array = $ZeileGefunden -Split ',' # die einzelnen werte in dem array (liste) anzeigen $Array # für jeden Wert in der Liste Aktionen ausführen ForEach($Value in $Array){ # den führenden unterstrich entfernen If($Value.SubString(0,1) -eq '_'){ $Value = $Value.substring(1,$Value.length -1 ) } # Klammern () stellen sicher, das erst der Befehl in den Klammern ausgeführt wird (von innen nach aussen) # Join-Path "klebt" Pfade zusammen (erstellt pfade) # New-Item erstellt neue Dateien mit den Namen + .txt New-Item (Join-Path $Path "$Value.txt") -ItemType file }
Funktioniert das alles Ordentlich ohne Fehlermeldungen?
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Mittwoch, 11. September 2013 14:04 asdasdasdas
-
Hallo,
Zu 1.: Tabelle 1 wird eingelesen und es kommt auch keine Fehlermeldung.
Zu 2.: Tabelle 2 wird eingelesen, es kommt keine Fehlermeldung und es kommen folgende Textdateien dabei heraus:
- ;Finanzen_-_Rechnungswesen;Versorgung_(VK).txt
- Beihilfe_(BK);ZVK;DV;Controlling;AV.txt
- DR;LFK.txt
Wie muss ich dann fortfahren?
Viele Grüße,
Klibbird
-
;Finanzen_-_Rechnungswesen;Versorgung_(VK).txt
Beihilfe_(BK);ZVK;DV;Controlling;AV.txt
DR;LFK.txt
Sehen die Dateien wirklich so aus? Mit Semikolons im Namen?
Wo kommen die Semikolons her ?
Wenn die Dateien wirklich so erstellt werden dann haben wir ja nicht wie beabsichtigt eine Datei pro Abteilung!
Also sind Sie Falsch !?
Da wir hier Text Verarbeitung machen brauche ich auch 100% den Text wie die Zeile aussieht. Da kommt es auf JEDES Zeichen an!
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum! -
Ja ganz genauso sehen die Dateien die am Ende rauskommen aus. Woher diese Semikolons kommen, weiß ich leider nicht.
Ich habe es aber so gemacht, wie du es mir beschrieben hattest.
In dem Sinne sind sie jetzt aktuell Falsch, da wir ja (wie du schon sagtest) für jede Abteilung eine Datei wollten.
Nochmal das Bild: So sieht die Tabelle 2 aus:
Und dass "Versorgung (VK), Beihilfe (BK)" und "AV,DR" in einer Zeile stehen, ist gewollt so.
-
Woher diese Semikolons kommen, weiß ich leider nicht.
Haben die Dateien Tabelle1 und Tabelle2 die Dateiendung .csv?
Wie ich oben schon geschrieben habe, ist eine CSV Datei eine Textdatei.
Textdateien öffnet man mit dem Text Editor nicht mit Excel!
Excel ist der Meinung es könnte ganz toll mit CSV Datei umgehen stimmt aber nicht immer!
Öffne die CSV Datei mit dem Windows Notepad (Text Editor) und Poste die Zeile !
Lies dir bitte dazu auch mal dem Wikipedia Artikel durch:
http://de.wikipedia.org/wiki/CSV_%28Dateiformat%29
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Donnerstag, 12. September 2013 10:38 asdasdasd
-
In einem Forum kann man nicht sehen was bei dem anderen passiert.
Deshalb ist man auf gute saubere Kommunikation angewiesen.
Mitdenken ist Pflicht!Sonnst hats keinen Sinn!
Ich habe den Code für Tabelle2 nochmal angepasst.
Nun sollten folgende Dateien erzeugt werden, sind diese so gewollt und korrekt?:
- Finanzen-Rechnungswesen.txt
- Versorgung(VK)-Beihilfe(BK).txt
- ZVK.txt
- DV.txt
- Controlling.txt
- AV-DR.txt
- LFK.txt
$FilePath = 'C:\Temp\Tabelle2.csv' # Pfad in der die Dateien erstellt werden sollen $Path = 'C:\temp' # Datei mit Get-Content Zeilenweise einlesen # und jede Zeile einzeln verarbeiten ForEach($Zeile in Get-Content $FilePath){ # Zeile mit dem Text Versorgung (VK) suchen If($Zeile -like "*Versorgung (VK)*") { # Wenn die Zeile gefunden wird, wird Sie in die Variabel geladen $ZeileGefunden = $Zeile # abbruch der such-schleife, nicht weitersuchen break } } # Text in der PowerShell ist ein Objekt vom Typ String # das Objekt String bietet Methoden zum bearbeiten von text # diese Methoden nutze ich hier # leerzeichen mit unterstrichen ersetzen $ZeileGefunden = $ZeileGefunden.replace(' ','') # schrägstriche mit binderstrichen ersetzen $ZeileGefunden = $ZeileGefunden.replace('/','-') $ZeileGefunden = $ZeileGefunden.replace('\','-') $ZeileGefunden = $ZeileGefunden.replace(',','-') # nun ist die Zeile geändert $ZeileGefunden # jetzt können wir die Zeile anhand des Semikolons in eine Liste (array) aufsplitten $Array = $ZeileGefunden -Split ';' # die einzelnen werte in dem array (liste) anzeigen #$Array # für jeden Wert in der Liste Aktionen ausführen ForEach($Value in $Array){ # leere felder überspringen If(($Value -eq $Null) -or ($Value -eq '')) { continue } # den führenden unterstrich entfernen If($Value.SubString(0,1) -eq '_'){ $Value = $Value.substring(1,$Value.length -1 ) } # Klammern () stellen sicher, das erst der Befehl in den Klammern ausgeführt wird (von innen nach aussen) # Join-Path "klebt" Pfade zusammen (erstellt pfade) # New-Item erstellt neue Dateien mit den Namen + .txt New-Item (Join-Path $Path "$Value.txt") -ItemType file }
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum! -
Hallo Peter,
das hat jetzt richtig funktioniert!
Habe es auch schon geschafft, die User-ID's den entsprechenden .txt-Dateiein zuzuordnen, indem ich jeweils folgendes getan habe:
$objUsrCSV = Import-Csv -Delimiter ";" L:\Temp\citrix-user-kvbbg.csv $objUsrCSV | Where-Object {$_.Team -match "zvk"} | Select-Object {$_.UserID} >> "L:\Temp\ZVK.txt"
Ich bastle mir jetzt noch eine Schleife daraus und dann hab ich es auch endlich mal geschafft :-)
Vielen Dank noch mal für die ganzen Ratschläge und Hilfestellungen und entschuldige bitte meine fehlendes Wissen und fehlende Kommunikation an der ein oder anderen Stelle!
Viele Grüße,
Klibbird
-
Ok!
Denn viel spass!
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!