
Ich habe mehrere CSV-Dateien mit dieser Struktur:
text, text, 01/27/2001 01:00:00 PM
Ich muss ALLE CSV-Dateien mit diesem Datums-/Uhrzeitformat aktualisieren:
text, text, 27-Jan-2001 13:00:00
Gibt es eine bekannte intelligente/schnelle Möglichkeit, dies zu tun? Ich habe versucht, sie in Excel zu importieren, aber das ist eine individuelle Aufgabe [einzeln kopieren/einfügen], also nehme ich an, dass dies nicht die beste Vorgehensweise ist. Vielleicht eine Funktion in Notepadd++ [konnte sie nicht finden]
Danke,
Antwort1
Hier ist ein PowerShell-Skript, um mehrere CSV-Dateien aus einem bestimmten Ordner in einem Schritt zu aktualisieren.
ForEach ($file in Get-ChildItem "C:\myFolder" -filter "*.csv"){
Get-Content $file.Fullname | ForEach {
$arLine = $_ -split ","
$date = [DateTime]$arLine[2]
$arLine[2] = $date.ToString(" dd-MMM-yyyy HH:mm:ss")
[array]$arFile += $arLine -join ","
}
$arFile | Out-File $file.Fullname
clear-variable arFile
}
Was es macht
- Durchlaufen Sie jede Datei in einem bestimmten Ordner und filtern Sie nur nach CSV-Dateien
- Lesen Sie jede CSV-Datei ein und durchlaufen Sie jede Zeile.
- Teilen Sie jede Zeile in ein Array auf. Das Komma ist unser Trennzeichen
- Konvertieren Sie die Datumszeichenfolge beispielsweise
01/27/2001 01:00:00 PM
in ein PowerShell-Datumsobjekt. - Formatiere das Datumsobjekt und schreibe es zurück in das Array.
[2]
steht für den dritten Wert/Spalte, da wir bei Null anfangen zu zählen - Fügen Sie alle Werte der aktuellen Zeile wieder zusammen, um eine einzelne Zeichenfolge zu erhalten. Verwenden Sie Kommas als Trennzeichen.
- Fügen Sie alle Zeilen zu einem einzigen Array hinzu, damit wir sie alle auf einmal in eine Datei schreiben können
- Mit der nächsten CSV-Datei fortfahren
Antwort2
Am schnellsten geht es, wenn Sie in VBA Excel ein Makro schreiben, das die CSV-Dateien öffnet, die Formatierung ändert und sie anschließend wieder als CSV-Datei speichert. Versuchen Sie dazu folgende Vorgehensweise:
- Aufzeichnen eines Makros in Exceldas genau diese Aufgabe übernimmt füreinscsv-Datei (Aufnahme starten, Datei öffnen, formatieren und Datei erneut speichern).
- Verwendendiese Antwort von SUum alle Dateien in einem Verzeichnis zu durchsuchen, um die soeben erstellte Aufgabe auszuführen. Sie benötigen dieDir-Funktionund eine While-Schleife.
Ihr Code sieht also folgendermaßen aus (nicht getestet!):
Public Sub ChangeDates()
Dim StrFile as String
strFile = Dir("C:\Some\Location\Of\Your\Files\*.csv")
While strFile <> ""
# Append the stuff from the recorded macro here and adjust the filename
# Probably something like:
Workbooks.Open Filename:=strFile
Columns("C:C").Select
Selection.NumberFormat = "dd-mm-yyyy HH:mm:ss" # or something else
ActiveWorkbook.Save
ActiveWorkbook.Close
strFile = Dir
End While
End Sub