1. #1
    Avatar von exception
    Registriert seit
    27.03.2012
    Beiträge
    198
    Thanked 57 Times in 36 Posts

    Standard 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
           //...
    Bin mal gespannt ob jemand versteht was ich will
    Ich will Geld haben und zwar so viel, das ich auch mal sagen kann das es Wichtigeres gibt...

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.210
    Thanked 9.132 Times in 3.006 Posts
    Blog Entries
    5

    Standard AW: 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.


  3. #3
    Avatar von exception
    Registriert seit
    27.03.2012
    Beiträge
    198
    Thanked 57 Times in 36 Posts

    Standard 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
    Test Input(Textfile mit 177 Lines):
    Spoiler:

    danon39
    danone
    danonek07
    danoninho
    danookie
    danotomas
    danou123
    danou2486
    danouf
    danpile
    danpr1ce
    danpwnsu
    danrella2000
    danrella2009
    danrem
    danrivel
    danrivell
    danrocks
    danrol
    danryan
    dans-k
    dans0n
    dans123
    dans44
    dans55
    dans9999
    dansag
    dansbabe
    danscape12
    danscat
    danscat2
    danscotti
    danseb93
    dansexy
    danshachar
    danshen
    danshen95
    danshiel01
    danskenhbg
    dansmstd
    dansmstd1
    dansontang
    dansoy
    dansoy0909
    dansoypogi
    danspl
    danssir
    danssle
    danstabouche
    dansts
    dansty
    dansty11
    dansty1994
    dansty94
    danstydata
    danstyyy
    danstyyyy
    danswer01
    danswer02
    danswer03
    danswer04
    danswer05
    dantamus
    dantazya
    dante
    dante0008
    dante002
    dante018
    dante09
    dante1954
    dante1992
    dante2142
    dante2592
    dante46
    dante55
    dante56
    dante564
    dante66430
    dante666
    dante69
    dante81
    dante852
    dante88
    dante90
    dante9200
    dante9225
    dante94
    dante941
    dante942
    dante969
    dante979
    dante989
    danteboy123
    dantecastrus
    dantedevil
    dantedickmann
    dantedieckmann
    dantee
    danteinferna
    dantelopez
    dantemarkvii
    danuss2
    danut
    danuta
    danutzu12
    danuvelawliet
    danvid5
    danvid55
    danvid555
    danvon4
    danwan2
    danxp
    danxsan
    danxx93
    dany
    dany007
    dany10
    dany11222
    dany11223
    dany123
    dany1243
    dany15
    dany16
    dany1990
    dantemaycry
    dantemibu
    dantemibu1
    dantendo
    dantendo1
    dantendo11
    dantendo111
    dantendo12
    danter99
    danteredgrave
    danterod
    danterod01
    dantes
    dantes1love
    dantestyles
    dantetrusy
    dantevergil93
    dantexskate
    dantezin
    dantheman
    dantz12
    danu
    danubius
    danull
    danup
    danup1
    danup2
    danup3
    danuss2
    danut
    danuta
    danutzu12
    danuvelawliet
    danvid5
    danvid55
    danvid555
    danvon4
    danwan2
    danxp
    danxsan
    danxx93
    dany
    dany007
    dany10
    dany11222
    dany11223
    dany123
    dany1243
    dany15
    dany16
    dany1990
    lololol
    random123

    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!

    MfG
    Geä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...

  4. #4
    Avatar von exception
    Registriert seit
    27.03.2012
    Beiträge
    198
    Thanked 57 Times in 36 Posts

    Standard AW: Create Strings() from String()

    Zitat Zitat von exception Beitrag anzeigen
    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
    Test Input(Textfile mit 177 Lines):
    Spoiler:

    danon39
    danone
    danonek07
    danoninho
    danookie
    danotomas
    danou123
    danou2486
    danouf
    danpile
    danpr1ce
    danpwnsu
    danrella2000
    danrella2009
    danrem
    danrivel
    danrivell
    danrocks
    danrol
    danryan
    dans-k
    dans0n
    dans123
    dans44
    dans55
    dans9999
    dansag
    dansbabe
    danscape12
    danscat
    danscat2
    danscotti
    danseb93
    dansexy
    danshachar
    danshen
    danshen95
    danshiel01
    danskenhbg
    dansmstd
    dansmstd1
    dansontang
    dansoy
    dansoy0909
    dansoypogi
    danspl
    danssir
    danssle
    danstabouche
    dansts
    dansty
    dansty11
    dansty1994
    dansty94
    danstydata
    danstyyy
    danstyyyy
    danswer01
    danswer02
    danswer03
    danswer04
    danswer05
    dantamus
    dantazya
    dante
    dante0008
    dante002
    dante018
    dante09
    dante1954
    dante1992
    dante2142
    dante2592
    dante46
    dante55
    dante56
    dante564
    dante66430
    dante666
    dante69
    dante81
    dante852
    dante88
    dante90
    dante9200
    dante9225
    dante94
    dante941
    dante942
    dante969
    dante979
    dante989
    danteboy123
    dantecastrus
    dantedevil
    dantedickmann
    dantedieckmann
    dantee
    danteinferna
    dantelopez
    dantemarkvii
    danuss2
    danut
    danuta
    danutzu12
    danuvelawliet
    danvid5
    danvid55
    danvid555
    danvon4
    danwan2
    danxp
    danxsan
    danxx93
    dany
    dany007
    dany10
    dany11222
    dany11223
    dany123
    dany1243
    dany15
    dany16
    dany1990
    dantemaycry
    dantemibu
    dantemibu1
    dantendo
    dantendo1
    dantendo11
    dantendo111
    dantendo12
    danter99
    danteredgrave
    danterod
    danterod01
    dantes
    dantes1love
    dantestyles
    dantetrusy
    dantevergil93
    dantexskate
    dantezin
    dantheman
    dantz12
    danu
    danubius
    danull
    danup
    danup1
    danup2
    danup3
    danuss2
    danut
    danuta
    danutzu12
    danuvelawliet
    danvid5
    danvid55
    danvid555
    danvon4
    danwan2
    danxp
    danxsan
    danxx93
    dany
    dany007
    dany10
    dany11222
    dany11223
    dany123
    dany1243
    dany15
    dany16
    dany1990
    lololol
    random123

    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!

    MfG
    //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

  1. Antworten: 1
    Letzter Beitrag: 16.12.2013, 09:14
  2. Strings alphabetisch ordnen
    Von Saad im Forum Java
    Antworten: 8
    Letzter Beitrag: 12.11.2012, 13:45
  3. [C++] Strings verbinden?
    Von Minecraft im Forum C++
    Antworten: 6
    Letzter Beitrag: 25.04.2012, 19:23
  4. Anfänger 2 Strings mit einander verrechnen
    Von DeKaDeNz im Forum Aufgaben
    Antworten: 1
    Letzter Beitrag: 02.02.2012, 18:55
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.