text/csv - jede zeile als datei exportieren

vulgo

Captain
Registriert
Sep. 2006
Beiträge
3.102
[gelöst] text/csv - jede zeile als datei exportieren

ich habe ca. 7000 zeilen mit jeweils zwei zellen in einer xls (in der csv getrennt durch tabulator)

beispiel

1 / a
2 / b
3 /cc
4 / dd

diese zeilen möcht ich nun als einzelne datei exportieren, die so heissen sol wie der inhalt aber ohne tab

->
1a.txt // inhalt: 1a
2b.txt // 2b
3cc.txt // 3cc
4dd.txt //4dd

eigentlich ist das recht simpel - zeile eilesen als zb "b", datei it titel "b" und inhalt "b" erstellen, weiter mit nächster zeile (for?)

aber wie mache ich das?

hier dürfte das ganz gut gelöst werden, aber ich schnall nicht ganz was ich da ändern müsste und wie es dann läuft
http://www.administrator.de/frage/excel-zeilen-einzelne-text-dateien-speichern-130803.html
 
Zuletzt bearbeitet:
Code:
function Get-Mycsv {
    param (
        [Parameter()]
        [string]$csv
    )
    $array = Import-Csv -Path $csv -Delimiter "`t"
    New-Item -Path $env:USERPROFILE\Desktop\Export -ItemType Directory
    foreach ( $line in $array ) {
        [string]$Filename = $line.Name + $line.Value
        
        ( $line.Name + $line.Value) | Out-File -FilePath $env:USERPROFILE\Desktop\Export\$Filename.txt
    }
}

Powershell ISE öffnen und das in eine neue Datei einfügen und einmal ausführen. Danach kannst du das
über Get-mycsv -path c:\ordner\datei.csv einlesen
Der Delimiter ist auf Tabulator gesetzt, kann man aber auch noch anpassen.
Die Rohdaten solten dann auch Spaltenbeschreibungen haben, darauf verweist das Objekt.
Code:
Name / Value
1 / a
2 / b
3 /cc
4 / dd
 
edit: ich habs gerade geschafft indem ich lediglich die get-mycsv ausführe und sämtliche parameter direkt eingegeben habe, es werden zwar errors ausgegeben, hat aber funktioniet :) >>
Code:
function Get-Mycsv {
    
    $array = Import-Csv -Path C:\dw\dw.csv -Delimiter "`t"
    New-Item -Path $env:USERPROFILE\Desktop\Export -ItemType Directory
    foreach ( $line in $array ) {
        [string]$Filename = $line.Name + $line.Value
        
        ( $line.Name + $line.Value) | Out-File -FilePath $env:USERPROFILE\Desktop\Export\$Filename.txt
    }
}

danke für die hilfe!


------------------
nachdem ich es nun endlich hinbekommen habe (die ps ise gefällt mir ;) )
kommt leider folgender fehler, großkleinschreibung scheint egal:


Code:
PS C:\dw> Get-mycsv -Path c:\dw\dw.csv
Get-Mycsv : Es wurde kein Parameter gefunden, der dem Parameternamen "Path" entspricht.
In Zeile:1 Zeichen:11
+ Get-mycsv -Path c:\dw\dw.csv
+           ~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-Mycsv], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Get-Mycsv
 

PS C:\dw>
 
Zuletzt bearbeitet:
Doch gleich richtig bauen? :D
Ja das mit dem -csv und -path war wirr. Hab das eigentlich anders bei meinen Cmdlts.

Code:
function Convert-CsvToTxt {
    param (
        [Parameter(Mandatory=$true,HelpMessage='CSV-Datei nach Schema')]
        [string]$CsvFile,
        [Parameter(Mandatory=$false,HelpMessage='Trennzeichen in der CSV')]
        [ValidateSet('Comma','Semikolon','Tabulator')]
        [string]$Delimiter='Comma' ,
        [Parameter(Mandatory=$false,HelpMessage='Ordner in den exportiert wird.')]
        [string]$OutPath
    )
    
    switch ($Delimiter) {
        Comma { $delim = ',' }
        Semikolon { $delim = '(;)' }
        Tabulator { $delim = "`t" }
    }
    $array = Import-Csv -LiteralPath $CsvFile -Delimiter $delim

    if ( !(Test-Path -LiteralPath $OutPath) ) {
        New-Item -Path $OutPath -ItemType Directory
    }

    foreach ( $line in $array ) {
        [string]$Filename = $line.Name + $line.Value
        
        ( $line.Name + $line.Value) | Out-File -FilePath $OutPath\$Filename.txt
    }
}

Du gibst jetzt den Pfad zur Quell CSV an, optional einen Delimiter, in deinem Fall ein Muss mit Tabulator und dann den Ordner in den exportiert werden soll. Falls der Zielpfad nicht existiert, versucht er einen anzulegen. Nicht existierende Laufwerke oder falsche Rechte münden dann natürlich trotzdem in einem Fehler.
 
Zurück
Oben