Zum Inhalt springen

Semikolon separierte Datei schnell einlesen


JeFi

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...