Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Semikolon separierte Datei schnell einlesen

Empfohlene Antworten

Veröffentlicht

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

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[]).

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 :rolleyes: (wobei man dabei ja nicht viel falsch machen kann :hells: )

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.

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();

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.