-
26.04.2015, 08:58 #1
Create Strings() from String()
Hallo,
versuche gerade ein String Array in mehrere String Arrays zu zerlegen. Klingt ansich ja nicht so schwierig aber ich bekomms nicht gebacken.^^
Beispiel:
Dim StrArr0() as String //Enthält 1250304 Einträge
Aus diesem Array will ich jetzt so viele Arrays wie Möglich mit 100 Einträgen erstellen.
Klar ist mir natürlich das ich die Anzahl der Einträge von StrArr0() durch 100 dividieren muss um die Anzahl der Möglichen 100er Arrays zu bekommen. Anschließend das Ergebniss wieder mit 100 multiplizieren und von der Gesamt Anzahl der Einträge(StrArr0.Count) subtrahieren um die Größe des letzt möglichen Arrays zu bekommen.
Kleines Snippet zum Verständnis:
Code://String Array mit vielen, vielen Einträgen Dim StrArr0() As String = File.ReadAllLines("C:\bla.txt") //Enthält die Anzahl von Max. Möglichen Arrays mit 100 Einträgen Dim _Count As Integer = StrArr0.Count / 100 //Enthält die Anzahl der übrigen Einträge die nicht mehr für ein Array mit 100 Items reichen Dim _Left As Integer = StrArr0.Count - _Count * 100 //Arrays erstellen //...
Ich will Geld haben und zwar so viel, das ich auch mal sagen kann das es Wichtigeres gibt...
-
26.04.2015, 10:16 #2
- Registriert seit
- 15.11.2011
- Beiträge
- 6.210
- Blog Entries
- 5
Thanked 9.132 Times in 3.006 PostsAW: Create Strings() from String()
var inputData = GetExampleData(1250304).ToList();
const int entrysPerElement = 100;
var outputData = new List<List<string>>();
for (int i = 0; i < inputData.Count / entrysPerElement; i++)
outputData.Add(inputData.GetRange(i * entrysPerElement, entrysPerElement));
GetExampleData ist durch deinen Array zu ersetzen. In meinem Fall ist das eine Funktion, die zum Testen einen String-Array generiert:
static string[] GetExampleData(int count) {
var exampleData = new string[count];
for (int i = 0; i < exampleData.Length; i++)
exampleData[i] = string.Format("Line{0}", i + 1);
return exampleData;
}
Ich weiß ja nicht was du vor hast aber über 1 Million Zeilen aus einer Datei auszulesen sieht verdächtig nach einem Designfehler aus. Würde es zumindest in Erwägung ziehen, eine Datenbank als Backend zu verwenden. Von der holst du dir dann über Abfragen nur diejenigen Datensätze, die auch gebraucht werden. In .NET kannst du mit dem Entity-Framework außerdem eine leistungsstarke ORM, die du als Wrapper für die Datenbank verwenden kannst. Das heißt du bastelst keine SQL-Abfragen zusammen sondern nutzt .NET Technologie dafür wie z.B. Listen, welche im Hintergrund in SQL-Code umgewandelt werden. Die Antwort der Datenbank wird ebenfalls wiederum automatisch geparst, sodass du letztendlich nur mit Objekten arbeitest.
-
26.04.2015, 13:38 #3
AW: Create Strings() from String()
Hey,
danke für die Antwort und das Snippet. Natürlich hast du Recht, ein Textfile ist für solch große Mengen an Daten
nicht gerade die beste Lösung. Hab mich trotzdem noch ein bisschen mit dieser "Aufgabenstellung" herumgespielt
da ich das einfach rein aus Prinzip schaffen wollte und bin nun im Endeffekt auf diese Lösung gekommen:
Code:Private Sub ArrayToArrays() 'Declare File & Load User Array Dim FilePath As String = "C:\Users\Daniel\Desktop\user2.txt" Dim UserArr() As String = File.ReadAllLines(FilePath) 'Declare Entries per SubArray Dim SubArrCount As Integer = 10 'Declare List for Sub Arrays Dim SubArrList As New List(Of String()) 'Create Sub Arrays & Add to List For i As Integer = 0 To UserArr.Count / SubArrCount - 1 Dim SubArr() As String = UserArr.Skip(i * SubArrCount).Take(SubArrCount).ToArray SubArrList.Add(SubArr) Next End Sub
Spoiler:
In der SubArrList befinden sich danach wie erwünscht 18 Arrays mit jeweils 10 Einträgen wobei das letzte logischerweise nur 7 Einträge hat!
MfGGeändert von exception (26.04.2015 um 13:39 Uhr)
Ich will Geld haben und zwar so viel, das ich auch mal sagen kann das es Wichtigeres gibt...
-
28.04.2015, 03:37 #4
AW: Create Strings() from String()
//EDIT:
Hier das ganze nochmal nur viel(!!!) performanter!
Benötigte Zeit bei einem File mit 12,9 Millionen: 6497ms
Der vorherige Code hat mehrer Minuten gebraucht.
Code:'Declare List for Sub Arrays Dim SubArrList As New List(Of String()) 'Declare Count per Sub Array Dim SubCount As Integer = 100 'Declare File Stream Dim StrReader As New StreamReader(FilePath) 'Loop while Stream is alive While Not StrReader.EndOfStream 'Create Sub Array Dim SubArr(SubCount - 1) As String 'Fill Sub Array For i As Integer = 0 To SubCount - 1 SubArr(i) = StrReader.ReadLine Next 'Add Sub Array to List SubArrList.Add(SubArr) End While 'Close Stream StrReader.Close()
Ich will Geld haben und zwar so viel, das ich auch mal sagen kann das es Wichtigeres gibt...
Ähnliche Themen
-
Was ist der Unterschied zwischen String und string?
Von Sido im Forum .NetAntworten: 1Letzter Beitrag: 16.12.2013, 09:14 -
Strings alphabetisch ordnen
Von Saad im Forum JavaAntworten: 8Letzter Beitrag: 12.11.2012, 13:45 -
[C++] Strings verbinden?
Von Minecraft im Forum C++Antworten: 6Letzter Beitrag: 25.04.2012, 19:23 -
Anfänger 2 Strings mit einander verrechnen
Von DeKaDeNz im Forum AufgabenAntworten: 1Letzter Beitrag: 02.02.2012, 18:55
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.