Hallo,
Ich habe erst vor ein paar Wochen Java gelernt, bitte schlagt mich noch nicht für unschönen Code
.
Folgende Schwierigkeit hat sich ergeben: Ziel ist es, eine Datei zeilenweise einzulesen, und Berechnungen über die Wortdimensionen anzustellen. Das klappt für einen deutschen Text ganz gut, jedoch will ich vor allem Sprachen mit anderen Zeichensätzen einlesen und bearbeiten (vor allem Hindi). Hier geschieht es jedoch, dass beim Auslesen noch gewisse Metainformationen über den Text als Inhalt mitgeliefert werden. Wie kann ich das vermeiden?
Im Dokument befindet sich nur 1 Zeile Hindi-Text, die Zahlen sind das Berechnungsergebnis, die Zeile davor das, was das Programm aus der Datei liest, es "erkennt" also 3 Zeilen.
Hier der Code der Klasse:
[HIGHLIGHT="Java"]
package job;
import java.io.*;
import java.util.StringTokenizer;
public class Routine {
//Konstruktor
public Routine(File Datei,String Font, int Fontsize )
{
try{
try{
// Inputdatei lesen
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(Datei), "UTF8"));
eingabe = in;
}
catch(Exception e){System.out.println("Eingabedatei konnte nicht gelesen werden");}
try{
// Outputdatei erstellen
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(ausgaben(Datei)), "UTF8"));
ausgb = out;
}
catch(Exception e){System.out.println("Ausgabedatei konnte nicht erstellt werden");}
// Breite des Leerzeichens ermitteln
Wort leer = new Wort(" ", Font, Fontsize);
int leerzeichen = leer.getWidth();
// Ausgabestring beginnen
ausgabe = "";
// Forschritt beginnen
fortschritt = 0;
// Berechnungen durchführen und in Outputdatei schreiben
while((tmp=eingabe.readLine())!=null){
StringTokenizer st = new StringTokenizer(tmp);
while (st.hasMoreTokens()) {
// Wort mit 3 Argumenten initialisieren
Wort akt = new Wort(st.nextToken(), Font, Fontsize );
// Höhe und Breite herausfinden
int hoehe = akt.getheight();
int breite = akt.getWidth();
// Den Satzstring weiter aufbauen
aufbau(hoehe, breite, leerzeichen);
}
// System.out.println(tmp);
// Ausgabestring in Datei schreiben
// String schreiben = ausgabe+"\n";
ausgb.write(ausgabe);
// System.out.println(ausgabe+" Geschrieben");
// Aufbauvariablen zurücksetzen
ausgabe ="";
fortschritt = 0;
}
// Aufräumen
eingabe.close();
ausgb.close();
}
catch(Exception e){ System.out.println("Routine konnte nicht erstellt werden");}
}
//Name der Ausgabedatei ermitteln
private String ausgaben(File eingabe)
{
return eingabe.getParent()+"\\AOI_"+eingabe.getName();
}
private void aufbau(int hoehe, int breite, int leer)
{
//String roher = fortschritt.toString();
// int start = fortschritt + leer;
int anfang = fortschritt;
int ende = fortschritt + breite;
ausgabe = ausgabe + anfang + ", " + ende + ", " + hoehe + "; ";
fortschritt = fortschritt + breite + leer;
}
// Instanzvariablen
String ausgabename,tmp, ausgabe;
BufferedReader eingabe;
Writer ausgb;
int fortschritt;
}
[/HIGHLIGHT]
Ich habe erst vor ein paar Wochen Java gelernt, bitte schlagt mich noch nicht für unschönen Code
Folgende Schwierigkeit hat sich ergeben: Ziel ist es, eine Datei zeilenweise einzulesen, und Berechnungen über die Wortdimensionen anzustellen. Das klappt für einen deutschen Text ganz gut, jedoch will ich vor allem Sprachen mit anderen Zeichensätzen einlesen und bearbeiten (vor allem Hindi). Hier geschieht es jedoch, dass beim Auslesen noch gewisse Metainformationen über den Text als Inhalt mitgeliefert werden. Wie kann ich das vermeiden?
Im Dokument befindet sich nur 1 Zeile Hindi-Text, die Zahlen sind das Berechnungsergebnis, die Zeile davor das, was das Programm aus der Datei liest, es "erkennt" also 3 Zeilen.
HTML:
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset1 Mangal;}{\f1\fnil\fcharset0 Courier New;}}
0, 378, 15; 381, 518, 15; 521, 562, 15; 565, 601, 15; Geschrieben
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20\u2319?\u2325? \u2310?\u2342?\u2350?\u2368? \u2360?\u2337?\u2364?\u2325?\f1\par
0, 68, 15; 71, 113, 15; 116, 433, 15; 436, 616, 15; 619, 833, 15; Geschrieben
}
0, 4, 15; Geschrieben
Hier der Code der Klasse:
[HIGHLIGHT="Java"]
package job;
import java.io.*;
import java.util.StringTokenizer;
public class Routine {
//Konstruktor
public Routine(File Datei,String Font, int Fontsize )
{
try{
try{
// Inputdatei lesen
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(Datei), "UTF8"));
eingabe = in;
}
catch(Exception e){System.out.println("Eingabedatei konnte nicht gelesen werden");}
try{
// Outputdatei erstellen
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(ausgaben(Datei)), "UTF8"));
ausgb = out;
}
catch(Exception e){System.out.println("Ausgabedatei konnte nicht erstellt werden");}
// Breite des Leerzeichens ermitteln
Wort leer = new Wort(" ", Font, Fontsize);
int leerzeichen = leer.getWidth();
// Ausgabestring beginnen
ausgabe = "";
// Forschritt beginnen
fortschritt = 0;
// Berechnungen durchführen und in Outputdatei schreiben
while((tmp=eingabe.readLine())!=null){
StringTokenizer st = new StringTokenizer(tmp);
while (st.hasMoreTokens()) {
// Wort mit 3 Argumenten initialisieren
Wort akt = new Wort(st.nextToken(), Font, Fontsize );
// Höhe und Breite herausfinden
int hoehe = akt.getheight();
int breite = akt.getWidth();
// Den Satzstring weiter aufbauen
aufbau(hoehe, breite, leerzeichen);
}
// System.out.println(tmp);
// Ausgabestring in Datei schreiben
// String schreiben = ausgabe+"\n";
ausgb.write(ausgabe);
// System.out.println(ausgabe+" Geschrieben");
// Aufbauvariablen zurücksetzen
ausgabe ="";
fortschritt = 0;
}
// Aufräumen
eingabe.close();
ausgb.close();
}
catch(Exception e){ System.out.println("Routine konnte nicht erstellt werden");}
}
//Name der Ausgabedatei ermitteln
private String ausgaben(File eingabe)
{
return eingabe.getParent()+"\\AOI_"+eingabe.getName();
}
private void aufbau(int hoehe, int breite, int leer)
{
//String roher = fortschritt.toString();
// int start = fortschritt + leer;
int anfang = fortschritt;
int ende = fortschritt + breite;
ausgabe = ausgabe + anfang + ", " + ende + ", " + hoehe + "; ";
fortschritt = fortschritt + breite + leer;
}
// Instanzvariablen
String ausgabename,tmp, ausgabe;
BufferedReader eingabe;
Writer ausgb;
int fortschritt;
}
[/HIGHLIGHT]