schnerpf
Goto Top

Split und eine Zeile zuviel

Hallo,
ich habe das Problem das ich zwei Datensätze habe, diese mit Split bearbeite und drei Datensätze herausbekomme.
Soweit ich mich eingelesen habe, liegt es daran eine Outline(?) Funktion bei der Ausgabe immer noch einen Zeilenumbruch (?) hinten ansetzt. Probiert habe ich es mit Trim und split \s+. Half aber alles nicht es kommen immer wieder drei Datensätze im Array an.

Hier Code:
$Daten = "Name: PC01, SerialNumber: Nr01x, Name: PC02, SerialNumber: Nr02x"  
cls
$ArrayDaten=@()
$ArrayDaten = $Daten -split "x"   
foreach($k in $ArrayDaten)
{
    echo "$k"  
 }
echo "Anzahl" $ArrayDaten.Length  
Das ist das Ergebnis:
Name: PC01, SerialNumber: Nr01
, Name: PC02, SerialNumber: Nr02

Anzahl
3
Für jeden Rat dankbar.
schnerpf

Content-ID: 7762902951

Url: https://administrator.de/forum/split-und-eine-zeile-zuviel-7762902951.html

Ausgedruckt am: 16.03.2025 um 02:03 Uhr

mayho33
Lösung mayho33 06.07.2023 aktualisiert um 16:42:39 Uhr
Goto Top
Hi,

Wenn du die Dot.Net-Vatiante der Split-Methode verwendest, kannst du leere Elemente ganz einfach so löschen:

string.Split("x",[System.StringSplitOptions]::RemoveEmptyEntries)  

Und ein Hinweis:
Du musst ein Array nicht vorher initialisieren wenn du es mit -Split befüllen willst.
Das kannst du dir also sparen:
$ArrayDaten=@()

Macht nur Sinn wenn du diesen machen wollen würdest:
$ArrayDaten=@()
ForEach($val in "a,b,c,d,e,f,g".Split(","))  
{
    $ArrayDaten += $val
}

Grüße!
Schnerpf
Lösung Schnerpf 07.07.2023 um 10:07:06 Uhr
Goto Top
Hallo mayho33,
vielen Dank für Deine Mühe. Da ich ein Newbi bin hatte ich eine liebe Not Deinen Vorschlag richtig interpretieren zu können. Mit viel Testen ist folgendes herausgekommen, was auch das macht was ich brauche
$Daten = "Name: PC01, SerialNumber: Nr01x, Name: PC02, SerialNumber: Nr02x"    

$OnceData = @($Daten.Split("x",[System.StringSplitOptions]::RemoveEmptyEntries))  

echo "Anzahl" $OnceData.count  

Ich muss gestehen, ohne die Hilfe eines Kollegen, wäre ich nie darauf gekommen, die Zeichenkette "string" vor ".splitt", als den zu ersetzende Platzhalter anzusehen. Dennoch vielen Dank für Deine Erläuterung, jetzt kann ich das endlich abschließen face-smile
7426148943
7426148943 07.07.2023 aktualisiert um 10:32:41 Uhr
Goto Top
Als Alternativen gehen auch
$oncedata = "Name: PC01, SerialNumber: Nr01x, Name: PC02, SerialNumber: Nr02x" -split 'x' | ?{$_ -notmatch '^\s*$'}  
oder
$oncedata = "Name: PC01, SerialNumber: Nr01x, Name: PC02, SerialNumber: Nr02x" -split 'x' | ?{$_.trim() -ne ''}  
oder
$oncedata = [regex]::matches("Name: PC01, SerialNumber: Nr01x, Name: PC02, SerialNumber: Nr02x",'(?i)(.+?)x').Captures | %{$_.Groups[1].Value}  
...
mayho33
mayho33 07.07.2023 um 12:33:05 Uhr
Goto Top
Zitat von @Schnerpf:

Hallo mayho33,
vielen Dank für Deine Mühe. Da ich ein Newbi bin hatte ich eine liebe Not Deinen Vorschlag richtig interpretieren zu können.
👍😁 Sorry! Wollte dich nicht überfordern.

Ich muss gestehen, ohne die Hilfe eines Kollegen, wäre ich ich darauf gekommen die Zeichenkette "string" vor ".splitt" als den zu ersetzende Platzhalter anzusehen.
Da habe ich wohl zu viel vorausgesetzt. Dachte das wäre klar.

Dennoch vielen Dank für Deine Erläuterung, jetzt kann ich das endlich abschließen face-smile
Gerne! Das war das große Ziel.