Benutzer mit den meisten Antworten
Collection in Array kopieren

Frage
-
Hallo,
Vielleicht hat jemand einen Tipp für mich:
Ich habe eine Collection mit gut 100.000 Elementen, die ich in ein Array kopieren möchte
Lt. MSDN müsste das irgendwie so in der Art funktionieren
http://msdn.microsoft.com/de-de/library/system.collections.specialized.stringcollection.copyto%28v=vs.110%29.aspx
$Collection = New-Object System.Collections.Specialized.StringCollection $Null = $Collection.Add("test0") $Null = $Collection.Add("test1") $Null = $Collection.Add("test2") $MyArray = @() $Collection.count $Collection.CopyTo($myArray,0) $myArray
Ich bekomme allerdings nur den Fehler, dass das Array nicht groß genug wäre. Ich habe schon einiges probiert ein Array der entsprechenden Länge vorab zu definieren, ohne Erfolg.
Ziel ist es, alle Collection-Elemente in eine csv-Datei zu schreiben. Aber aus Performancegründen nicht Zeile für Zeile mit Foreach etc., sondern in einem Stück als Array
Danke Euch
Kai
- Bearbeitet Yorck Kai Freitag, 21. März 2014 12:55
Antworten
-
Geht dies nicht:
$MyArray = @($Collection)
?
- Als Antwort vorgeschlagen Peter Kriegel Freitag, 21. März 2014 13:32
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 23. März 2014 12:40
Alle Antworten
-
Geht dies nicht:
$MyArray = @($Collection)
?
- Als Antwort vorgeschlagen Peter Kriegel Freitag, 21. März 2014 13:32
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 23. März 2014 12:40
-
Danke, ich habs jetzt selbst hinbekommen,
mit Gewalt :-)
$Collection = New-Object System.Collections.Specialized.StringCollection $Null = $Collection.Add("bla") $Null = $Collection.Add("test") $Null = $Collection.Add("test2") [Array]$myArray = $Collection Out-File -inputobject $myArray -FilePath "c:\temp\text.csv"
Danke Dir trotzdem!
Kai
-
Hallo Kai
Es gibt in der PowerShell Cmdlets die Extra dafür gemacht sind CSV Dateien zu verarbeiten und zu erstellen.
ConvertFrom-Csv
ConvertTo-Csv
Export-Csv
Import-Csv
Wenn jemand in der PowerShell CSV sagt dann gehen wir davon aus das diese Cmdlets benutzt werden sollen.
Out-File erstellt Textdateien keine echten CSV-Dateien.
Das CSV Format erzwingt zwar keine Header zeile für eine CSV Datei, doch PowerShell benötigt eine Header Zeile um eine Datei als CSV einzulesen.
Mit Outfile ertellst du eine Textdatei mit nur jeweils einem Wort in jeder Zeile ohne Header Zeile. Also aus sicht von powerShell ist das keine CSV Datei, da der Header fehlt.
Die Klammer mit dem At-Zeichen @() erzeugt genauso wie der Accelerator [Array] ein dummes PowerShell Array vom Typ System.Object[].
Die Antwort von PowerTurtle ist also richtig!
Ich habe nun mehrere, folgende, Code varianten durch probiert, alle liefern das selbe von dir gewünschte Ergebnis:
Ohne wandluung in ein Array geht es auch!
$Collection = New-Object System.Collections.Specialized.StringCollection $Null = $Collection.Add("bla") $Null = $Collection.Add("test") $Null = $Collection.Add("test2") Out-File -inputobject $Collection -FilePath "D:\temp\text.csv" Notepad "D:\temp\text.csv"
Wandlung in ein Array:
$Collection = New-Object System.Collections.Specialized.StringCollection $Null = $Collection.Add("bla") $Null = $Collection.Add("test") $Null = $Collection.Add("test2") Out-File -inputobject @($Collection) -FilePath "D:\temp\text.csv" Notepad "D:\temp\text.csv"
oder so Hier müssen Klammenr gesetzt werden!:
$Collection = New-Object System.Collections.Specialized.StringCollection $Null = $Collection.Add("bla") $Null = $Collection.Add("test") $Null = $Collection.Add("test2") Out-File -inputobject ([Array]$Collection) -FilePath "D:\temp\text.csv" Notepad "D:\temp\text.csv"
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+ -
Hallo Peter,
Vielen Dank für deine Mühe.
Die einzelnen Zeilen der Collection bestehen bei mir bereits aus kommaseparierten Einträgen, die ich in eine Textdatei reinschieben muss. Das habe ich gestern -warum auch immer- direkt trotz vieler Versuche nicht hinbekommen, daher der Umwegversuch über das Array
Mit deinen Beispielen klappts auf jeden Fall einwandfrei und ganz ohne Array :-).
Super!
Vielen Dank
Kai