Jump to content

Mehrere .csv Dateien mit Powershell bearbeiten uns speichern


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Leider bin ich nicht Erfahren genug mit Powershell und finde im Internet auch keinen passenden Beitrag...

Ich muss von einem sFTP Server mehrmals täglich CSV Dateien abrufen (funktioniert bereits) und bearbeiten, damit ein anderes Programm diese dann wieder importieren kann. Dazu muss immer die erste Zeile gelöscht werden. Mit einer einzelnen Datei hab ich das auch schon hinbekommen...

$import = get-content 'C:\Install\User.csv'
$import | Select-Object -Skip 1 | Set-Content 'C:\Install\user.csv'

Die heruntergeladenen Dateien haben immer unterschiedliche Namen und sollten dann auch noch in ein Backup-Verzeichnis kopiert werden (vor der Verarbeitung). 

Leider bekomme ich die Schleife nicht gebaut um jede CSV in diesem Verzeichnis zu bearbeiten.

 

Vielen Dank schonmal für die Hilfe

 

Lieben Gruß

Johannes

bearbeitet von jschmidt
Link zu diesem Kommentar
vor 2 Minuten schrieb cj_berlin:

Was hast Du denn schon versucht?

EDIT: Und bitte Code als Code posten!

$folder_csv = 'C:\Install\Import'
$folder_fileout = 'C:\Install\Import-enaio'

$files = Get-ChildItem $folder_csv -File -Filter *.csv 
foreach ($file in $files) {
    $name = $(ls)
    $data = Import-csv $($file.Fullname) -Delimiter "," 
    $data | Select-Object -Skip 1
    $data | export-csv "$folder_fileout\$name.csv" -delimiter "," -Encoding default
    }

Das habe ich versucht und viele Schritte dazwischen, es kann gut sein, dass ich es verschlimmbessert hab :smile2:

 

Link zu diesem Kommentar
vor 1 Minute schrieb BOfH_666:

Willst Du jeweils die Header-Zeile entfernen oder die erste Daten-Zeile? In dem Beispiel in Deinem ersten Beitrag wird Get-Content bentutz und Du benutzt scheinbar Import-Csv. Das hat - wie zu erwarten - unterschiedliche Ergebnisse zur Folge! :achtung:;-)   

Es soll die Header-Zeile entfernt werden... Mit get-Content hab ich es leider in der Schleife auch nicht hinbekommen, deshalb hab ich rumgespielt :lool: Ich bin mir nichtmal sicher, ob das noch irgendeinen Sinn hat was ich gebastelt habe :lol2:

Link zu diesem Kommentar
vor 56 Minuten schrieb BOfH_666:

Im einfaschte Fall sollte es das hier bringen:

$folder_csv = 'C:\Install\Import'

$fileList = Get-ChildItem -Path $folder_csv -Filter *.csv -File

foreach ($file in $fileList) {
    $NewContent = Get-Content $file.FullName | Select-Object -Skip 1
    $NewContent | Out-File -FilePath $file.FullName -Force
}

 

Super vielen Dank, hat super funktioniert :grins2: 

Link zu diesem Kommentar

Jetzt hat sich leider noch ein weiteres Problem ergeben, die Dateien die wir erhalten sind mit "," getrennt und leider gibt es natürlich in der Dateneingabe auch Kommas :ohje:. Mit einem - replace in der Schleife habe ich es leider nicht hinbekommen und auch eine separate foreach Schleife hat nicht funktioniert... 

So Sieht mein Skript aktuell aus:

$folder_csv = 'C:\Install\Impfschrank\Import'
$backupfolder = 'C:\Install\Impfschrank\Import\Backup'

Copy-Item -Path C:\Install\Impfschrank\Import\*csv -Destination $backupfolder -Exclude C:\Install\Impfschrank\Import

$fileList = Get-ChildItem -Path $folder_csv -Filter *.csv -File

foreach ($file in $fileList) {
    $NewContent = Get-Content $file.FullName | Select-Object -Skip 1
    $NewContent | Out-File -FilePath $file.FullName -Force -Encoding default 
}

Kann man die enthaltenen Kommas entfernen oder sogar auf ein anderes Trennzeichen umstellen?

vor 16 Stunden schrieb BOfH_666:

Nur zur Info: Es ist nicht nötig, jedes Mal den kompletten Beitrag, auf den Du antwortest, zu zitieren. ;-)  Wenn Du Dich nicht auf etwas Spezifisches aus dem Beitrag beziehen willst, lass das Zitat einfach weg.

Kuck ich bin lernfähig :rofl:

 

Link zu diesem Kommentar
vor 1 Minute schrieb jschmidt:

leider gibt es natürlich in der Dateneingabe auch Kommas 

?? Du sprichst in Rätseln.  Meinst Du damit, dass die Datenzellen Kommata enthalten? Das sollte bei einer standard-konformen  CSV-Datei kein Problem sein, da die Daten in den Zellen in Anführungszeichen eingeschlossen sind.  ... oder etwa nicht?

Link zu diesem Kommentar
vor 6 Minuten schrieb jschmidt:

Jetzt hat sich leider noch ein weiteres Problem ergeben, die Dateien die wir erhalten sind mit "," getrennt und leider gibt es natürlich in der Dateneingabe auch Kommas :ohje:.

Das ist nicht schlimm. Die CSV-Spezifikation schreibt es vor, dass Werte, die den Delimiter enthalten, in Anführungszeichen genommen werden müssen. PowerShell ist da noch rigoroser und setzt alle nicht-numerischen Werte in Anführungszeichen.

bearbeitet von cj_berlin
Link zu diesem Kommentar
vor 4 Minuten schrieb jschmidt:

mein Programm, welches die Dateien dann importiert beschwert sich es wären zu viele Spalten

Kann es sein, dass Du die Fehlermeldung miss-interpretierst? Darf man fragen, welches Programm das ist? Kannst Du die Fehlermeldung posten? Kannst Du einen einzelnen Datensatz so anpassen, dass Dein Programm ihn ohne Fehler importiert? Liegt es wirklich an den Kommata in den Daten-Zellen? Wenn ja, solltest Du Dich dringend mit dem Anbieter Deines Programms auseinandersetzen.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...