große Textdatei filtern

donchris

Aktives Mitglied
Ich habe eine große Textdatei (~200MB) zu filtern. Leider gibt es keine Zeilen, sodass alles ein langer Block von Stichwörtern, getrennt durch Leerzeichen ist. Daher wollte ich zuerst mit Scanner.next(), aber die Datei ist zu groß und ich bekomme einen OutOfMemoryError. Danach habe ich einen BufferedReader probiert, doch hier kann man auch nicht readLine verwenden und jedes Zeichen einzeln auslesen und weiterverarbeiten ist doch sicherlich nicht performant.

Wie könnte ich das machen?? (Ich will nur alle ",", ".", ";", "." und "#" herausfiltern.

mfg
donchris
 

donchris

Aktives Mitglied
Ich habe jetzt folgendes Skript (ich habe eine tolle Webseite gefungen Articles: Tuning Java I/O Performance), das bis auf ein Problem sehr gut funktioniert. Damit kann ich einzelne Zeichen testen und ersetzten und das funktioniert recht schnell 135MB/ 1,4Minuten. Leider habe ich anscheinend ein Problem bezüglich Kodierung, da Umlaute etc. nicht korrekt dargestellt werden.

Bsp:
"oᅡᅠyouᅡᅠfindᅡᅠaᅡᅠbri"

in den Quadraten sind dann noch oft andere Zeichen wie ein F über einem C.

wie könnte ich damit eine UTF-8 codierte Datei korrekt parsen und dann ausgeben?

Java:
import java.io.*;
 public class HPFilter {
   public static void main(String args[]) {
   
    try {
	FileInputStream fis = new FileInputStream("/root/merge.txt");
      
      byte buf[] = new byte[2048];
          
      int n;
        while ((n = fis.read(buf)) != -1) {
          for (int i = 0; i < n; i++) {
          
          //zeichen filtern
            switch (buf[i]){
            case '.':
            	System.out.print(" ");
            	break;
            case ':':
            	System.out.print(" ");
            	break;
            case ';':
            	System.out.print(" ");
            	break;
            case '#':
            	System.out.print(" ");
            	break;
            case '*':
            	System.out.print(" ");
            	break;
            default :
            	System.out.print((char)buf[i]);
          }
        }
        }
        fis.close();
    }
    catch (IOException e) {
      System.err.println(e);
    }
  }
 }
 
S

SlaterB

Gast
FileReader, BufferedReader, notfalls InputStreamReader zur Angabe eines Encodings,
und dann char[] lesen, nicht byte[]
 

donchris

Aktives Mitglied
Jetzt sehe ich in der Ausgabe auf den ersten Blick keine "falschen Zeichen mehr", aber es fehlen welche:

Code:
“You an't rove t as e!” Promise ou on't ook!” Promise ou on't emember!” Promise ou on't ell!” I idn't rite y ame n t!” Isn't he nternet lready nonymous?”

Java:
 InputStream inputStream = new FileInputStream("/root/merge.txt");
    Reader reader = new InputStreamReader(inputStream, "UTF-8");

    int b;
        while ((b = reader.read()) != -1) {
//
}
 
S

SlaterB

Gast
vielleicht ist es kein UTF-8?
poste bitte eine Test-Datei im Original als Anhang eines Postings hier,

nur mit 1-2 Zeilen, keine x MB
 

donchris

Aktives Mitglied
Code:
root@server ~ # file --mime xoutput4.txt
xoutput4.txt: text/plain; charset=utf-8

..also sollte es doch UTF8 sein, oder?

eine Probe befindet sich im Anhang. Die Datei habe ich per pdftotext erhalten (und hier wurde in der config utf8 gewählt).
 

Anhänge

  • down.txt
    4,9 KB · Aufrufe: 10
S

SlaterB

Gast
den Text 'Promise', wie von dir vorher als Teil einer fehlerhaften Zeile gepostet, kann ich in down.txt nicht finden,
was bringt ein ANDERES Beispiel ohne Beschreibung von Problemen damit?

bei mir sieht die Datei unter Ubuntu im Texteditor und in Java gleich aus,
Probleme kann ich höchstens z.B. bei Zeichen vor ' 21C3: Firewall Piercing' feststellen, ein Zeichen zur Markierung von Listen-Elementen?

normaler Text wie 'Promise ou on't emember!' ist jedenfalls noch nicht zu testen
 

donchris

Aktives Mitglied
Mein Fehler! Ich habe die Input Datei gezeigt. Diese ist in UTF8. Aber wenn ich die Ausgabe meines Programmes in eine Datei Umleite, dann kommen die Fehler zu Stande und der Typ der Datei ist:
Code:
root@server ~ # file --mime fehler.txt
fehler.txt: application/octet-stream; charset=binary

Wie kann ich das Ändern?
 
S

SlaterB

Gast
es gibt alles analog, Chars nur mit FileOutputStream als bytes zu speichern kann Fehler enthalten,
höheres ist FileWriter, BufferedWriter, OutputStreamWriter für Angabe eines Encodings,

überall das Gegenstück, alles dasselbe, da du noch gar nichts zum Schreiben gepostet hast kann ich nicht mehr sagen,
oder gehts um System.out, wird das umgeleitet?
 

donchris

Aktives Mitglied
Es wird mit Sytem.out.print ausgegeben und dann per Pipe in eine Datei umgeleitet. Byte? Ich speichere es ja nun in einem int und wandle diesen in ein char um :bahnhof:
 
S

SlaterB

Gast
sammle die chars bitte nebenher testweise in einem char[], StringBuilder und/oder String,
printe diesen String, an System.out sowie nebenher in eine Datei, mit UTF-8-Encoding und normal ohne Extras

macht es einen Unterschied wenn du nicht aus einer Datei einliest, sondern die chars eines im Programm definierten Strings verarbeitest?

leite System.out erstmal nicht um sondern gib alles normal aus,
es muss doch möglich sein, "Hello World" und ähnliches auszugeben, das ist schließlich das erste Programm überhaupt


das sind keine konkreten Lösungen von mir, sondern bisschen Informationen sammeln in alle Richtungen,
was funktioniert alles, was nicht?
 

donchris

Aktives Mitglied
Jetzt habe ich alle Dateien gelöscht, wieder (gleich) geschrieben (aus dem Forum kopier) und jetzt geht es ohne Probleme ???:L

Danke für deine Hilfe (und Ausdauer)!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
F Große Datenmengen effizient programmieren Allgemeine Java-Themen 51
N Das große O berechnen Allgemeine Java-Themen 2
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
R Große Zahlen in Worten abkürzen Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
K Große Mengen an Daten speichern Allgemeine Java-Themen 9
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
P Große Datenstruktur im Speicher halten Allgemeine Java-Themen 13
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
P Datentypen Große Datenmenge Sortiert halten Allgemeine Java-Themen 12
M Große Datei mit Regex durchsuchen Allgemeine Java-Themen 4
R POI große Exceldatei schreiben Allgemeine Java-Themen 7
R Dateigestützte Collection für große Datenmengen Allgemeine Java-Themen 5
K Scanner - große Textfile, nur 0 ab betim. Wert Allgemeine Java-Themen 4
trash Das große Problem: .jar Archiv Allgemeine Java-Themen 19
J Große Datei einlesen und gestückelt verarbeiten Allgemeine Java-Themen 4
I Große Datei am effektivsten/performantesten auslesen und auswerten? Allgemeine Java-Themen 6
S große CSV-Dateien Importieren. Beste Lösung ?! AWS,S3,Hadoop!? Allgemeine Java-Themen 4
P große double Zahlen und modulo Allgemeine Java-Themen 8
O Große Anzahl Bilder laden Allgemeine Java-Themen 7
A Mit RegEx große Dokumente erfassen Allgemeine Java-Themen 14
X Wie verdammt große Datein öffnen? Allgemeine Java-Themen 2
G Große Datenmengen per JDBC Allgemeine Java-Themen 5
P Große Datenmenge wie speichern (HashMap? TreeMap?) Allgemeine Java-Themen 11
G Große XML-Dateien einlesen und auswerten . Allgemeine Java-Themen 2
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
I JNI - Große Daten übertragen Allgemeine Java-Themen 6
T Große Dateibestände löschen - Speicherproblem Allgemeine Java-Themen 20
S Große ArrayListen Allgemeine Java-Themen 8
S große Datei einlesen! Allgemeine Java-Themen 7
J Große Zahl (double) as text ausgeben? Allgemeine Java-Themen 2
S Kleines Eclipse Problem, große Wirkung Allgemeine Java-Themen 7
H Referenzen statt Objekte für große Speicherstrukturen Allgemeine Java-Themen 19
K Große Herausforderung Allgemeine Java-Themen 2
F Zu große Werte beim byteweisen Lesen mit BufferedReader.read Allgemeine Java-Themen 5
D Große Klasse - was fällt euch so ins Auge? Kritik bitte! Allgemeine Java-Themen 10
M Große Dateien laden Allgemeine Java-Themen 2
F Große Dateien schnell einlesen Allgemeine Java-Themen 14
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
S Textdatei statt von Dateisystem aus .jar lesen Allgemeine Java-Themen 3
curranux Ausgabe als Textdatei schreiben. Allgemeine Java-Themen 2
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
M In Textdatei schreiben Allgemeine Java-Themen 3
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
OnDemand Download Textdatei falsches Charset Allgemeine Java-Themen 1
K Textdatei als Objekt Allgemeine Java-Themen 4
O JAR Export Textdatei benutze Allgemeine Java-Themen 14
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
L Filewriter schreibt Zahlen in Textdatei Allgemeine Java-Themen 2
D Input/Output Zeilen werden "ignoriert" beim Einlesen aus einer Textdatei Allgemeine Java-Themen 3
T Synchronisation einer Textdatei im Groupshare Allgemeine Java-Themen 1
I String einer Textdatei anfügen Allgemeine Java-Themen 2
S Von Wav Datei mit Morsecode in Morsecode als Textdatei Allgemeine Java-Themen 2
R Duplikate aus einer Textdatei entfernen? Allgemeine Java-Themen 20
K Input/Output Ausgabe in Textdatei Allgemeine Java-Themen 7
Iron Monkey Inhalt von JTable in die Textdatei mit StringWidth schreiben Allgemeine Java-Themen 3
J Textdatei auslesen, die gerade benutzt wird Allgemeine Java-Themen 8
P Textdatei aus Ressourcen laden. Allgemeine Java-Themen 8
W Auslesen von Textdatei Allgemeine Java-Themen 16
M gleichzeitiger Zugriff auf eine Textdatei Allgemeine Java-Themen 6
S TextDatei in Panel anzeigen Allgemeine Java-Themen 10
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
S Input/Output Latin-9 (ISO 8859-15) Textdatei einlesen Allgemeine Java-Themen 2
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
F In mitten einer Textdatei schreiben Allgemeine Java-Themen 7
N Textdatei in Jar Problem Allgemeine Java-Themen 6
B Leerzeile in Textdatei Allgemeine Java-Themen 3
B Textdatei Zeilen auslesen Allgemeine Java-Themen 7
E BlueJ Daten in Textdatei schreiben Allgemeine Java-Themen 21
K Textdatei komplett auslesen bis auf 2 Zeilen Allgemeine Java-Themen 2
H Textdatei (1GB) einlesen und verarbeiten Allgemeine Java-Themen 15
S String verschlüsselt in Textdatei speichern Allgemeine Java-Themen 3
E Text ans Ende einer Textdatei anfügen Allgemeine Java-Themen 2
Balbes Dateipfad in den JFileChooser aus Textdatei einlesen Allgemeine Java-Themen 7
S Textdatei mit externen Editor öffnen Allgemeine Java-Themen 8
G Textdatei einlesen unter Windows 7 Allgemeine Java-Themen 4
A Textdatei im Applet einlesen Allgemeine Java-Themen 2
C Textdatei einlesen Allgemeine Java-Themen 3
L Textdatei nach Wörter durchsuchen Allgemeine Java-Themen 3
Psypsy Bits in Textdatei und zurück Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
ModellbahnerTT Problem: Schleife über Textdatei Allgemeine Java-Themen 5
W Auslesen einer Textdatei Allgemeine Java-Themen 2
D HILFE - Textdatei im jar auslesen Allgemeine Java-Themen 10
T Auslesen und schreiben in eine Textdatei.HILFE!HILFE! Allgemeine Java-Themen 23
G Mit FileWriter in Textdatei über jar Allgemeine Java-Themen 4
E textdatei über "öffnen mit" aufrufen Allgemeine Java-Themen 6
A Objekte in Textdatei weiterschreiben Allgemeine Java-Themen 5
M Textdatei auslesen / schreiben (Server) Allgemeine Java-Themen 9
D Textdatei umbenennen Allgemeine Java-Themen 2
C Software für Windows PC mit integierter Db oder Textdatei? Allgemeine Java-Themen 19
G 2 zeilen in textdatei beim auslesen verbinden Allgemeine Java-Themen 10
D Zeilenvorschub aus einer Textdatei rausnehmen Allgemeine Java-Themen 11
J Textdatei oder doch DB? Allgemeine Java-Themen 2
T GUI mit DB oder Textdatei? Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben