makroll10
Goto Top

Bestimmte Teile eines String mit FOR-Schleife auslesen

Hallo,

ich habe eine Textdatei mit folgendem Inhalt (Beispiel):

"XX1100","00471","20210214","20210214","","","","0010","","","","","","","","","","","","",""  
"XX1100","01234","20210411","20210411","","","","0010","","","","","","","","","","","","",""  
"XX1100","05555","20210510","20210510","","","","0010","","","","","","","","","","","","",""  
"XX1100","10833","20210614","20210614","","","","0010","","","","","","","","","","","","",""  

Damit ich diese Daten als Input-Daten in einer anderen Anwendung nutzen kann, bräuchte ich diese Daten allerdings in der folgenden Form:

00000471  14.02.21 14.02.21 0010 
00001234  11.04.21 11.04.21 0010 
00005555  10.05.21 10.05.21 0010 
00010833  14.06.21 14.06.21 0010 

Ich habe bereits (leider erfolglos) versucht per FOR-Schleife den Ausgangstext zu zerlegen (z.B. mit set "str=%zeile:~3,5%", ...) und geändert in einer neuen Datei wieder zusammenzusetzen.

Wie ist das hinzubekommen?

Vielen Dank im Voraus und Gruß

Markus

Content-Key: 1648920723

Url: https://administrator.de/contentid/1648920723

Printed on: April 24, 2024 at 22:04 o'clock

Member: SeaStorm
SeaStorm Dec 22, 2021 at 20:32:44 (UTC)
Goto Top
Hi

mit Powershell ein leichtes

$inCSV = "c:\temp\input.csv"  
$header = "h1","h2","h3","h4","h5","h6","h7","h8"  
$import = Import-Csv -Path $inCSV -Delimiter "," -Header $header | Select-Object `  
    @{Name='h1';Expression={[String]$_.h1}},  
    @{Name='h2';Expression={[String]$_.h2.PadLeft(8,'0')}},   
    @{Name='h3';Expression={[datetime]::ParseExact($_.h3,'yyyyMMdd',$null)}},   
    @{Name='h4';Expression={[datetime]::ParseExact($_.h4,'yyyyMMdd',$null)}},   
    @{Name='h5';Expression={[String]$_.h5}},   
    @{Name='h6';Expression={[String]$_.h6}},   
    @{Name='h7';Expression={[String]$_.h7}},   
    @{Name='h8';Expression={[String]$_.h8}}  
    



$import | % {
Write-host "$($_.h2) $($_.h3.ToString("dd.MM.yyyy")) $($_.h4.ToString("dd.MM.yyyy")) $($_.h8)"}  
Member: makroll10
makroll10 Dec 23, 2021 at 07:08:23 (UTC)
Goto Top
Hallo SeaStorm,

vielen Dank für die schnelle Hilfe.
Funktioniert perfekt..face-wink

Schöne Feiertage und einen guten Rutsch....

Markus
Member: TK1987
TK1987 Dec 23, 2021 updated at 09:03:27 (UTC)
Goto Top
Zitat von @SeaStorm:
$inCSV = "c:\temp\input.csv"  
$header = "h1","h2","h3","h4","h5","h6","h7","h8"  
$import = Import-Csv -Path $inCSV -Delimiter "," -Header $header | Select-Object `  
    @{Name='h1';Expression={[String]$_.h1}},  
    @{Name='h2';Expression={[String]$_.h2.PadLeft(8,'0')}},   
    @{Name='h3';Expression={[datetime]::ParseExact($_.h3,'yyyyMMdd',$null)}},   
    @{Name='h4';Expression={[datetime]::ParseExact($_.h4,'yyyyMMdd',$null)}},   
    @{Name='h5';Expression={[String]$_.h5}},   
    @{Name='h6';Expression={[String]$_.h6}},   
    @{Name='h7';Expression={[String]$_.h7}},   
    @{Name='h8';Expression={[String]$_.h8}}  
    



$import | % {
Write-host "$($_.h2) $($_.h3.ToString("dd.MM.yyyy")) $($_.h4.ToString("dd.MM.yyyy")) $($_.h8)"}  
Das geht auch einfacher.
$Source = "C:\Pfad\zur\Datei"  

Foreach ($Line in Get-Content $Source) {
  "{0:d8}  {1:dd.MM.yy} {2:dd.MM.yy} {3}" -f [int]$Line.Substring(10,5), [datetime]::ParseExact($Line.Substring(18,8),'yyyyMMdd',$null), [datetime]::ParseExact($Line.Substring(29,8),'yyyyMMdd',$null), $Line.Substring(49,4)  
}

Oder alternativ mit Import-CSV
$Source = "C:\Pfad\zur\Datei"  

Foreach ($Line in Import-CSV -Delimiter ',' -Header (1..8) $Source) {  
  "{0:d8}  {1:dd.MM.yy} {2:dd.MM.yy} {3}" -f [int]$Line.2, [datetime]::ParseExact($Line.3,'yyyyMMdd',$null), [datetime]::ParseExact($Line.4,'yyyyMMdd',$null), $Line.8  
}

Gruß Thomas