none
[regex]::Split() mit mehreren Separatoren RRS feed

  • Frage

  • Guten Morgen zusammen,

    ich versuche gerade eine Liste von Namen,Proxyadressen zu trennen. Eine Zeile dieser CSV sieht beispielsweise so aus:

    "Benutzer","SMTP:Benutzermail1 x400:Benutzermail2 smtp:benutzermail3"

    Solange der Benutzer nur eine Mailadresse hat bzw nur Proxyadressen die mit SMTP: beginnen kann ich mit folgendem Script arbeiten:

    Aus dem Export werden Einträge ohne Proxyadresse entfernt, leerzeichen gelöscht und Zeilen mit mehreren Proxyadressen aufgesplittet.

     

    [Array]$a = Import-Csv C:\export2.csv -header name, proxyaddresses
    [int]$z = 0;
    for($i = 0; $i -lt $a.length; $i++){
    [Array]$n = [regex]::Split( $a[$i].proxyaddresses, "SMTP:")
    for($t = 0; $t -lt $n.length; $t++){
    if (($i -eq "0") -and ($t -eq "0")){
    }else{ 
    $z = $z + 1
    }
    $ex = ($a[$i].name.Trim() + "," + $n[$t].Trim())
    $ex | Out-File -Append C:\angepasst.txt
    import-csv C:\angepasst.txt -header name, proxyaddresses | where {$_.proxyaddresses -ne ""} | Export-Csv C:\proxyxmailnickname.txt -Encoding UTF8 -NoTypeInformation
    }
    }

     

     

    Gibt es jetzt eine Möglichkeit mehrere Separatoren für den Split zu verwenden. In meinem Fall wären das x400: oder smtp:

     

    Besten Dank im Voraus!

     



    Mittwoch, 11. Mai 2011 07:03

Antworten

  • Es ist leider nicht ganz klar wie das von dir gewünschte Ergebnis aussehen soll. Wenn ich das richtig verstanden habe, möchtest du alle Emailadressen pro Benutzer aus der CSV lesen. Falls dem so ist, kannst du auch mit .matches statt split arbeiten, z.b.:

    [Array]$a = Import-Csv d:\test.txt -header name, proxyaddresses
    
    foreach ($entry in $a) {
     $alladr = ""
     $rgx = [regex]"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"
     $mailadr = $rgx.matches($entry.proxyaddresses)
     
     foreach ($addr in $mailadr){ $alladr += " " +$addr.value}
     Write-Host `n`r $entry.name $alladr
    }
    
    


    Das Script listet jeweils den Benutzernamen und alle zugehörigen Mailadressen in einer Zeile.
    Teste es mal. Fall das nicht das ist, was du wolltest, würde ich dich bitten mal ein ausführlicheres Beispiel der CSV mit allen möglichen Varianten, sowie ein entsprechendes Beispiel wie die Ausgabe genau aussehen soll, zu posten.

    Grüße, Denniver

     


    http://bytecookie.wordpress.com/
    Mittwoch, 11. Mai 2011 15:07
    Moderator