Input/Output Java Übersetzung

BoreX

Mitglied
Hey ihr :)
ich wollte mal nachfragen, ob es einen Befehl gibt, um eine .txt auszulesen und diese nach bestimmten sachen zu untersuchen.
also als Beispiel:
Java:
import javax.swing.*;

import java.io.*;
public class ueberSetzung 
{
	public static void main(String baum[]) throws IOException
	{
		String eingabe[]=JOptionPane.showInputDialog(null, "Bitte geben Sie Ihren Text ein.").split(" ");
		
		
		JOptionPane.showMessageDialog(null, "Aus welcher Datei soll die Übersetzung stattfinden?");
		JFileChooser open= new JFileChooser();
		open.showOpenDialog(null);
		File openFile = open.getSelectedFile();
		RandomAccessFile rf1 = new RandomAccessFile(openFile,"rw");
		
		String str;
		String zeile =rf1.readLine();
		String zeile2 = rf1.readLine();
		String feld [] = zeile.split(" ");
		String feld2[]= zeile2.split(" ");
		
		
		if (eingabe[0].equals(feld[0]))
			{
			str = eingabe[0].replaceAll(eingabe[0],feld[1]);
			System.out.print(str);
			}
		else if(eingabe[0].equals(feld2[0]))
			{
			str = eingabe[0].replaceAll(eingabe[0],feld2[1]);
			System.out.print(str);
			}
		else if(eingabe[1].equals(feld[0]))
			{
			str=eingabe[1].replaceAll(eingabe[1],feld[1]);
			System.out.print(str);
			}
		else if(eingabe[1].equals(feld2[0]))
			{
			str=eingabe[1].replaceAll(eingabe[1],feld2[1]);
			System.out.print(str);
			}
		else if (eingabe[0].equals(feld[0]) && eingabe[1].equals(feld2[0]))
			{
			str = feld[1]+" "+feld2[1];
			System.out.print(str);
			}
		else if (eingabe[0].equals(feld2[0]) && eingabe[1].equals(feld[0]))
		{
		str = eingabe[0].replaceAll(eingabe[0],feld2[1])+" "+eingabe[1].replaceAll(eingabe[1],feld[1]);
		System.out.print(str);
		}
		
		
		
	}

	

	

}

Es geht darum, dass ich da eine Übersetzungs.txt habe, aus der die Übersetzung gelesen werden soll. Die möchte ich dann mit dem
Code:
.split(" ")
aufteilen. In meiner .txt sind 4 Wörter bisher vorhanden und sieht genau so aus:

Hallo Hello
Leute People

sind also 4 abschnitte die ich durch
Code:
.split(" ")
erhalte ([0] - [3]).
So ich möchte nun einen Inputdialog erstellen, der am Ende des Programmes abfragt, ob ich neue Übersetzungen hinzufügen möchte. Und diese sollen automatisch in das Programm mit einbezogen werden. Sodass es sich immer vergrößern kann und mir am ende ein Wörterbuch zur Verfügung stehen könnte. Leider fehlt mir dahingehend die Erfahrung zu programmieren. Die eigentliche Aufgabe bestand darin, es mit den 4 abschnitten zu bearbeiten und einfach mit .replaceAll die Übersetzung durchzuführen und eben mit If-Fallunterscheidungen.
Kann mir diesbezüglich jemand helfen? :(

P.S.: Tschuldigung für manche umständliche Sachen ich hab keine ahnung wie ich das alles genau erklären soll :/ Einfach gezielt nachfragen ich beantworte dann wie ich das meine falls unverständlichkeiten auftreten :>
 
Zuletzt bearbeitet:

rogue

Mitglied
Ich hatte mal vor ein paar Wochen ein bisschen zum lernen rumexperimentiert. Vielleicht kann dir der Quellcode helfen.

Er kann eine Datei einlesen, splitten und ausgeben. Ist aber noch sehr umständlich aufgebaut.

Java:
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.regex.*;

public class readin {

    BufferedReader reader;
    String temp = null;
    String[] inhalt;
    String a[];
    String b[];
    String c[];
    String d[];
    String e[];
    String f[];
    int i = 0;

    public void open(String filename) throws FileNotFoundException, IOException{

        reader = new BufferedReader(new FileReader(filename));

        // Zählen der Zeilenanzahl

        while ( reader.readLine() != null ) {

            i++;

        }
  
        a = new String[i];
        b = new String[i];
        c = new String[i];
        d = new String[i];
        e = new String[i];
        f = new String[i];

        // Den Reader und Zähler zurücksetzen.

        reader = new BufferedReader(new FileReader(filename));
        i = 0; //

        while ((temp = reader.readLine()) != null){
         
            inhalt = Pattern.compile("\\|").split(temp);

            a[i] = inhalt[0];
            b[i] = inhalt[1];
            c[i] = inhalt[2];
            d[i] = inhalt[3];
            e[i] = inhalt[4];
            f[i] = inhalt[5];
            
            i++;

        }

        i = 0;

        while(i < a.length){

            System.out.println(a[i] + ", " + b[i] + ", " + c[i] + ", " + d[i]);

            i++;
        }

    }



}
 

BoreX

Mitglied
Mh ... nee das is nich das was ich suche >.< ... ich splitte ja schon die datei die ich einlese... ich aktualisier gleich nochmal den quelltext wie weit ich momentan bin ... ich möchte das Programm aufbauen wie ne Enzeklopedie (keine ahnung ob das wort richtig is xD) dass man immer etwas in die .txt reinschreiben kann was dann im nächsten durchlauf als übersetzung verwendet werden könnte.
 

XHelp

Top Contributor
So ganz steige ich da bei der Beschreibung nicht durch. Aber du hast im Moment auch andere Probleme:
1. String werden mit equals verglichen, nicht mit
Code:
==
2.
Code:
eingabe[0].replaceAll(eingabe[0], feld[1]);
was soll denn da deiner Meinung nach passieren? Warum nicht gleich
Code:
eingabe[0]=feld[1]
?
3. replaceAll (wie auch alle andere String-Methoden) verändert nicht den String, sondern gibt einen neuen zurück, d.h. es sollte wohl
Code:
str = str.replaceAll(..
sein.
 

BoreX

Mitglied
So, soweit verbessert. die Übersetzung erfolgt mit if-fallunterscheidungen. Aber mein eigentliches Problem liegt ja darin, dass ich in das Dokument schreiben möchte mittels des programms und die neuen Sachen auch abgefragt werden können. :( so als englisch wörterbuch :) gibts nicht so nen
Code:
.seek
befehl oder so dafür? :(
 

BoreX

Mitglied
fällt niemandem mehr etwas ein? ): ... okay ... naja :) ... was solls ... ich gucke was sich noch machen lässt ): wird schon nicht so schwierig werden ;D
 

BoreX

Mitglied
ja die vorherigen fragen sind beantwortet ich suche halt immer noch nach nem befehl für die txt bearbeitung wie
Code:
 .seek
wie ich es für bilder gelernt hab, also ab wann ich wo was in ein .bmp reinschreiben kann. Es geht mir darum ein Wörterbuch für meinen Computer zu entwickeln, dass durch Eingabe die Wörter in eine .txt schreibt und dann auch im selben Programmablauf durch ne Schleife auch die Wörter (auch die neu hinzugefügten Wörter) abfragen und richtig übersetzen kann. Dazu sollte es auch ganze Wörter übersetzen können. Also im prinzip sowie der google übersetzer nur halt als java programm
 
M

MiDniGG

Gast
Ich versuch es mal zusammenzufassen. :)

Du möchtest die "Wörtbuchdatei" einlesen und prüfen, ob das eingetragene Wörterpaar (D/E) schon vorhanden ist. Wenn nicht, soll es der Textdatei hinzugefügt werden. Richtig?!

Das mit readLine() schaut ja schon gut aus.
Mach einfach eine while-Schleife, die alle Einträge durchgeht.

Java:
String eingabe = JOptionPane.showInputDialog(null, "Bitte geben Sie Ihren Text ein.");
JOptionPane.showMessageDialog(null, "Aus welcher Datei soll die Übersetzung stattfinden?");
JFileChooser open= new JFileChooser();
open.showOpenDialog(null);
File openFile = open.getSelectedFile();
RandomAccessFile rf1 = new RandomAccessFile(openFile,"rw");
String zeile = "";
boolean vorhanden = false;
while((zeile = rf1.readLine()) != null) { //geht die Datei solange durch, wie es Zeilen gibt.
   if(zeile.equals(eingabe)) { //Prüft, ob die Eingabe schon in der Datei steht.
      vorhanden = true;
      break;
   }
}
if(!vorhanden) { //Wenn die Eingabe noch nicht vorhanden ist
   FileWriter fw = new FileWriter(openFile, true); //true heißt, das geschriebene wird hinzugefügt und ersetzt nicht alles.
   fw.write(eingabe);
   fw.flush();
   fw.close(); //Stream wird geschlossen und Datei geschrieben
}

So in etwa sollte es funktionieren. Habe es jetzt hier im Forum geschrieben, daher keine Garantie! ;)

Edit: Vielleicht noch einen Zeilenumbruch mit
Code:
System.getProperty("line.separator");
einfügen.
 

BoreX

Mitglied
ja richtig genau sowas hab ich gesucht. Dankeschön :) ... jetz muss ich das ganze nur noch ein wenig mit ausgaben bearbeiten... Er soll ja so funktionieren, dass ich per
Code:
JOptionPane.showInputDialog
einen deutschen Text einlese und er soll einen englischen ausgeben. Mein erster gedanke war halt wie oben beschreiben, dass ich das alles einzeln abfrage mit nem
Code:
.split(" ")
und er dann mit
Code:
.replaceAll
den eingabeDialog so manipuliert, dass er ins englische übersetzt wird. Hast du da noch i-eine idee?
 

XHelp

Top Contributor
Code:
split
und
Code:
replaceAll
zusammen zu benutzen macht kein Sinn. Entweder oder.
Fang aber klein an. Schreibe dir eine Methode, die dir zu einem gegebenen Wort eine Übersetzung liefert.
 

BoreX

Mitglied
Hab ich auch schon dran gedacht. Aber unser Lehrer verlangt ein Programm ohne unterschiedlichen Methoden wo halt die festgesetzten Wörter übersetzt werden. Da ich aber einer der begabtesten (jaa is leider wirklich so... :( ) programmierer hier bin möchte / soll ich das Programm so erweitern, dass es als Übersetzer fungiert und auch sachen speichern kann. Seine Worte waren: "Du könntest das Programm mal so erweitern, dass beliebige Wörter eingelesen werden können und diese übersetzt werden. Wenn das eingebene Wort nicht vorhanden ist, soll eine Abfrage nach der Übersetzung stattfinden, und in dem Muster gespeichert werden wie die ersten 2 Wörter mit der Übersetzung. Dabei kannst du den
Code:
.split(" ")
befehl benutzen, damit die eingabe in die einzelnen wörter geteilt wird und abgefragt werden können". So, da ich jetzt alle Zeilen mit dem neuen Programmteil lesen kann fehlt mir dennoch der Übersetzungsschritt. Wir haben solche komplizierten Dinge nie gelernt aber für meine 15 Punkte muss ich das schaffen deswegen wende ich mich an euch ):
 

XHelp

Top Contributor
Habe ich schon fast vermutet... Ich lese da nix von "Text übersetzen" raus. Viel mehr sollten da wohl einzelne Wörter übersetz werden, nur eben mit der Möglichkeit anschließend ein weiteres Wort zu übersetzen.
Aber der "ohne unterschiedliche Methoden"-Teil ergibt für mich keinen Sinn. Aber wie dem auch sei... dann schreib eben zuerst ein Teil der main-Methode, der ein bestimmtes Wort übersetzt.
 

BoreX

Mitglied
Für mich ergibt dass ja auch keinen sinn aber ich soll halt im rahmen der klasse bleiben und nicht wieder zu weit vorgreifen. Die einzelne wort übersetzung krieg ich ja schon hin mit dem programm was ich als erstes gepostet hab. Aber halt nur die vorgegeben wörter. Mit dem neuen programmcode jetzt kann ich ja die komplette .txt auslesen aber es findet keine übersetzung statt ): da ich nich weiß wie ich, bei dem lesen, wenn er was findet, wie ich das splitten soll dass er die übersetzung statt des Wortes im string speichert und ich es ausgeben kann
 

XHelp

Top Contributor
Java:
private static final String PATH = "c:/wasauchimmer.txt";
public static void main(String[] args) {
  String einWort = "Nudelsuppe";

  String uebersetzung = "";
  //HIER FEHLT WAS

  System.out.println("Übersetzung für "+einWort+" ist "+uebersetzung);
}

Vervollständige fürs erste das da.
 

BoreX

Mitglied
Java:
private static final String PATH = "c:\\wasauchimmer.txt"; // hier war nen fehler von dir:D
public static void main(String[] args) {
  String einWort = "Nudelsuppe";
 
  String uebersetzung = "";
  boolean vorhanden = false;
		while((einWort = PATH.readLine()) != null) 
{ 
		   if(einWort.equals(PATH)) {
		      vorhanden = true;
		      break;
		   }
if (vorhanden = true)
{
   uebersetzung = PATH + ; //ab hier weiß ich nich mehr weiter -.- will in der .txt ein wort weiter gehen ... hab grad black out :/
}

 
  System.out.println("Übersetzung für "+einWort+" ist "+uebersetzung);
}
 

XHelp

Top Contributor
Warum
Code:
boolean vorhanden
? Mach doch erstmal das eine fertig, denn das ist komplett falsch was du da stehen hast.
 

BoreX

Mitglied
wieso ist das denn komplett falsch? ich muss doch die .txt auslesen und aus ihr die übersetzung für den string ziehen oder nicht?
 

BoreX

Mitglied
ja das mit der übersetzung ist klar dass das noch fehlt aber ich les doch mit dem readline befehl in der while schleife den PATH ein und gleich ihn damit ab o.o oder seh ich da was falsch?
 

XHelp

Top Contributor
Ja, du siehst es falsch. Du ließt keine Datei ein, sondern hast einfach irgendwohin readLine hingeschrieben in der Hoffnung, dass es funktioniert.
Galileo Computing :: Java ist auch eine Insel – 4.8 Zerlegen von Zeichenketten
Schau dir die Klasse Scanner, die sich dafür eignen würde.
Wenn das ganze für dich zu kompliziert ist, dann geh ein Schritt zurück und versuche erstmal ein Programm zu schreiben, welche einfach nur deine txt einließt und auf den Bildschirm ausgibt.
Und nicht einfach den Quelltext schreiben, sondern auch selber ausprobieren.
 

BoreX

Mitglied
?? bei dem allerersten post also dem mit dem ich den thread erstellt hab liest er doch ein und verarbeitet halt nur mit
Code:
 .split()
und
Code:
.replaceAll
was prinzipiell ziemlich unsinnig ist bei genauerer überlegung, aber bei mir funktioniert. Er kann ein Wort einlesen es übersetzen und auch richtig ausgeben, es funktioniert eben nur nicht mit sätzen und ich kann keine wörter in die txt reinschreiben.
 

XHelp

Top Contributor
Kann sein, dass Teile des Programms richtig waren, aber im großen und ganzen funktioniert es doch nicht. Deswegen ist es einfacher Schritt für Schritt es richtig zu tun.
Meine letzten Aussagen bezogen sich allerdings auf deinen neuen Code
 

BoreX

Mitglied
ja der neue code den hab ich von nem post n paar posts vorher. Ich hab in meinem Original programm noch meinen alten code stehen, zwar auskommentiert, aber er steht drin. ich hab verschiedene sachen probiert um mit der while schleife mehrere sachen einzulesen. Was nun leider nicht klappt. Daher rührt ja auch meine frage, ob es einen anderen Befehl für java gibt eine text datei auszulesen wie mit
Code:
.seek
bei bilddateien. zb würde ich theoretisch sagen wollen :
Code:
 .seek(eingabe)
und das er mir das wenn als ergebnis
Code:
true
rauskommt er reingeht, ein leerzeichen überspringt und das wort dann als Übersetzung in dem String speichert.
 

XHelp

Top Contributor
Nein, das gibt es nicht, vor allem wenn du angeblich keine Methoden erstellen darfst.
Ließ die Datei doch einfach Zeilenweise ein und such selber. Sind grob geschätzt 5 Zeilen Code...
 

BoreX

Mitglied
ja hab ich doch in meinem Ursprungstext, aber ich kann ja kein .txt einlesen das auf unbestimmt viele zeilen beschrieben werden kann und als Übersetzungs-Datenbank dienen soll.
 

BoreX

Mitglied
Ja richtig sozusagen als Datenbank soll ich die txt benutzen -.- mein lehrer ist umständlich er sagte ich soll für die übersetzung auf die datenbank zugreifen wie auf eine art datenbank <.< frag mich nich <.< ich kreuz das thema ab >.< danke an alle die helfen wollten :)
 

Neue Themen


Oben