Java Txt Datei verarbeiten Java

savage66

Newbie
Registriert
Juli 2020
Beiträge
7
Hallo, ich bin ziemliche Anfängerin in Java und hätte gerne Hilfe bei einer Aufgabe.
Ich habe eine leere Methode in der ich eine text Datei verarbeiten soll. Die Text Datei enthält 3 Mio Queries.
Mit diesen Daten soll ich danach eine Trie erstellen (Die Methoden dafür sind schon implementiert) Was wäre da am sinnvollsten?
 
Wie sieht denn dein bisheriger Ansatz aus? Wie man eine Datei (zeilenweise) einliest, sollte im Internet schon oft in Tutorials behandelt worden sein.
 
Ich habe noch keinen Ansatz, weil ich mir nicht sicher war was sinnvoll wäre, um daraus dann ein Trie zu erstellen..
 
In welcher Form erwartet deine Methode zum Erstellen des Trie denn den Input?
 
Ergänzen Sie Ihre Klasse Trie.java um eine Methode eval(). Verarbeiten Sie in dieser Methode die Datei xyz. Diese enthält einen Datensatz mit 3 Millionen Queries. Jede Zeile besteht aus einem Query und seiner Häufigkeit (getrennt durch ein Semikolon):
  • trump
  • german
  • mo
  • paw
  • secret
  • best
  • pro
  • small
  • snow
  • soc

Erstellen Sie mit den Daten einen Trie. Vervollständigen Sie dann mit dem gelernten Trie folgende Präfixe und geben Sie die Ergebnisse ab (es reicht jeweils ein vollständiger Query, der vom Trie zurückgeliefert wird):

Nur das steht dazu. Ich habe schon Methoden zum erstellen eines Triies gemacht (SearchTree, TrieNode und Trie). So lautet die ganze Aufgabenstellung. Ich weiß nicht was sinnvoll wäre, bei 3 Mio Queries?!
 
Dann geh doch die Inputdatei zeilenweise durch und speicher die Daten im Trie ab.
 
Das ist klar eine Hausaufgabe, also kann hier eh zu.

... und vom Code wurde nach wie vor eh nix gezeigt, was soll man da noch helfen.

"Sinnvoll" ist auch relativ. Dass man die Zeilen als Stream einliest sollte klar sein. Der Rest ist dann einfach eine Zeile einlesen, resp. Wort und in deine Methode werfen. Die ist ja angeblich shcon da, also verstehe ich die Frage auch nicht so ganz. "Text zeilenweise einlesen in Java" gibt es doch Tausende von Code Snippets im Netz.
 
  • Gefällt mir
Reaktionen: maloz
Wichtig wäre das Format der Textdatei zu sehen. Es gibt Bibliotheken die auf CSV spezialisiert sind. Im Allgemeinen würde ich die Klasse "Scanner" verwenden. Die ist zum Einlesen gedacht.

Als erstes solltes du die Datei in Objekte abbilden - z.b. 3 Mio Query Objekte. Je nach dem was du damit machen willst.

Wenn du mir mal die Textdatei oder einen Teil hier zeigst kann man vielleicht mehr sagen.
 
abcddcba schrieb:
Das ist klar eine Hausaufgabe, also kann hier eh zu.
Naja das es eine Aufgabe ist, habe ich bereits erwähnt. Ich möchte auch keine Lösung, sondern Hilfe beim lösen...

dermoritz schrieb:
Wenn du mir mal die Textdatei oder einen Teil hier zeigst kann man vielleicht mehr sagen.

hackathon ideas;1620
kurir dnevne novine najnovije vesti;7840
hackaday;46960
game show family feud;1120
 
In java.nio.file.Files findet man seit Java 8 Methoden um Dateien mittels java.util.Stream effizient zeilenweise einzulesen. Die einzelnen Zeilen kann wie oben gezeigt mittels split() zerlegen und die Daten entsprechend verarbeiten.
 
Danke für die Antworten! Könnt ihr mir sagen, wie ich damit eine Trie anlegen kann? Also wenn ich z.B. "trump",20
in die Trie hinzufügen möchte, gehe ich so vor:
Java:
Trie trie = new Trie();

trie.add("trump stinks", 2);

wie könnte ich dann die eingelesene Datei vom Scanner in den Trie einfügen?
 
Da die Daten als Strings vorliegen, muss der zweite Wert nach Integer (bzw. int) konvertiert werden. Dafür gibt es eine Methode in der Runtime.

Edit: Falls man Scanner verwendet, findet man dort auch Möglichkeiten die Daten in dem gewünschtem Typ zu lesen.
 
Zuletzt bearbeitet:
savage66 schrieb:
wie könnte ich dann die eingelesene Datei vom Scanner in den Trie einfügen?
Wie sieht denn dein Ansatz für einen Scanner aus, um eine Zeile einzulesen und anschließend an deine add-Methode zu übergeben? Zeig doch mal deinen Code, dann können wir dir helfen.

Dir einfach stumpf eine Lösung vorzusagen ist nicht Sinn und Zweck von diesem Forum, denn dann hast Du nichts gelernt. Das würde außerdem gegen die Forenregeln verstoßen und dann ist hier gleich der Thread zu.
 
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Scannertest {

    public static void main(String[] args) throws FileNotFoundException {
            File file=new File("C:\\Users\\karde\\eclipse-workspace\\ADSAbgabe\\src\\de\\hsrm\\ads\\gebemichaus.txt");
            Scanner sc=new Scanner(file);
            sc.useDelimiter("\\Z");
            System.out.println(sc.next());
        
    }
}

So sieht mein Scanner aus, mit der ich jetzt eine Testdatei ausgeben lassen habe.. Aber habe leider keine Ahnung, wie ich jetzt die ausgelesene Datei an eine Methode übergeben kann.
 
savage66 schrieb:
Das hab ich nicht ganz verstanden. 🤔

Ich bin davon ausgegangen, dass die Datei zeilenweise verarbeitet wird. Nach dem Splitten hat man dann zwei Strings. Deine Trie Methode erwartet aber einen String und ein int, also müsste man den zweiten String nach int konvertieren.

Mit Scanner kann die man Werte direkt als String oder int auslesen. Tutorials für Scanner gibt es zuhauf...

EDIT: Ich habe Scanner mit nextInt() mal getestet. Funktioniert, aber für einen Anfänger nicht empfehlenswert. Bliebe die zeilenweise Verarbeitung und dafür gibt es wie gesagt bessere Möglichkeiten, weil Code-Komplexität und Laufzeit gegen Scanner sprechen.
 
Zuletzt bearbeitet:
Zurück
Oben