JeFi Geschrieben 26. März 2007 Teilen Geschrieben 26. März 2007 Hallo, wie bereits aus dem Titel zu entnehmen ist möchte ich gerne eine Semikolon separierte Datei schnellst möglich einlesen.(und natürlich auch aufsplitten! Also nach ";" aufteilen und die einzelnen Datenfelder auslesen) Nun stellt sich mir die Frage, welche Variante ist die Schnellste und verbraucht am wenigsten Speicher? Vorschläge von mir wären da z.B.: 1. BufferdInputStream 2. BufferedReader Und die Zerteilung der einzelnen Datenfelder dann z.B. mit 1. Scanner 2. StringBuilder (indexof(";") und substring) 3. StringTokenizer Vielen Dank im Voraus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cobinja Geschrieben 27. März 2007 Teilen Geschrieben 27. März 2007 Fürs Einlesen liegst du genau richtig. Fürs Zerteilen würde ich an deiner Stelle dann die Methode String.split() benutzen. Diese bekommt eine RegEx als Parameter und bei jedem Treffer wird zerteilt. Zurück bekommst du dann ein String-Array (String[]). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JeFi Geschrieben 27. März 2007 Autor Teilen Geschrieben 27. März 2007 Hi Cobinja! Danke für deine schnelle Antwort. Mit String.split hatte ich es zuerst auch mal versucht dauerte aber länger also mit dem StringBuilder.substring! Oder lags an mir (wobei man dabei ja nicht viel falsch machen kann :hells: ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cobinja Geschrieben 28. März 2007 Teilen Geschrieben 28. März 2007 Ich hatte einen ähnlichen Fall, wo ich allerdings eine lange Datei hatte, bei der enzelne Zeilen splitten musste. Dabei ist String.split() sehr schnell. Eine Datei mit 6500 Zeilen waren innerhalb von 2-3 Sekunden aufgeteilt. Ich habs jetzt mal mit einer sehr langen Zeile ausprobiert (Die gleiche Datei, als wäre es eine Zeile), und dabei war der Rechner mal eben 140 Sekunden beschäftigt. Wenn du mit deinem Eigenbau schneller bist, dann benutz ihn. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Paulus2408 Geschrieben 28. März 2007 Teilen Geschrieben 28. März 2007 Hi! Habe hier ein Beispiel bezüglich des Auslesens einer CSV-Datei, bei der die Strings mit einem ; getrennt sind. Kann Dir allerdings nicht sagen, ob das wirklich schnell ist. Außerdem lese ich die Datei zeilenweise aus und verarbeite die Strings (Tokens[]) anschließend. Falls ein Feld zwischen den Trennzeichen nicht gefüllt ist(Beispiel: 1;2;;4;5) wird es auf den Wert "null" gesetzt(hier: 1 2 null 4 5). Naja, vielleicht kannst Du damit ja trotzdem etwas anfangen! CODE: lBufferedReader = new BufferedReader(new FileReader(lFile)); lBufferedReader.readLine(); //Falls du keine Header in der CSV-Datei hast //kannst du diese Zeile löschen while((lLine = lBufferedReader.readLine()) != null) { StringTokenizer lTokenizer = new StringTokenizer(lLine, ";", true); String lTemp = null; String prevTemp = ";"; String Tokens[] = new String[100]; int stcount = 0; while(lTokenizer.hasMoreTokens()) { lTemp = lTokenizer.nextToken(); //Auslesen einer CSV-Datei unter Berücksichtigung von leeren Feldern // -> z.B 1;2;;4 if(lTemp.equals(prevTemp)) { Tokens[stcount] = "null"; prevTemp = ";"; stcount++; } else{ if(lTemp.equals(";")) { prevTemp = ";"; }else{ Tokens[stcount] = lTemp; prevTemp = lTemp; stcount++; } } } if(prevTemp.equals(";")) { Tokens[stcount] = "null"; stcount++; } //Verarbeite Stringarray Tokens[] für die jeweilige Zeile doSomething(Tokens); } lBufferedReader.close(); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.