Input/Output Text Dateien einlesen, bearbeiten und speichern

Lara_B

Mitglied
Hallo ihr Lieben

Ich will mit Java folgendes realisieren:

Ich habe eine Text-Datei mit m-Zeilen und n-Spalten, also wie eine Tabelle aufgebaut. Die Spalten werden durch Leerzeichen getrennt. Hier als Beispiel ein kleiner Auszug aus solch einer Datei:

Beispiel: 4 Zeilen und 11 Spalten
HETATM 1 N LIG 1 2.824 -0.042 0.738 1.00 0.00 N
HETATM 2 C LIG 1 3.563 -1.141 0.333 1.00 0.00 C
HETATM 3 O LIG 1 4.781 -1.166 0.347 1.00 0.00 O
HETATM 4 N LIG 1 2.850 -2.279 -0.120 1.00 0.00 N

Nun möchte ich ein Java Programm schreiben, welches solch eine Text-Datei einliest und "elementare Zeilen- und Spaltenoperationen" durchführt und dies danach in eine neue Text-Datei schreibt.

Zum Beispiel ein Programm, welches die 3. Spalte mit der 1. Spalte vertausch und die 6., 7. und 8. Spalte mit der 2., neuen 3. und 4. vertauscht und die restlichen Spalten löscht. In dem Beispiel würde das bedeuten:

N 2.824 -0.042 0.738
C 3.563 -1.141 0.333
O 4.781 -1.166 0.347
N 2.850 -2.279 -0.120

Wie macht man so etwas mit Java?

Vielen Dank für Hilfe.

Grüsse
Lara
 
man macht es einen Schritt nach dem anderen,
wenn du von Java all die Standard-Befehle, etwa eine Datei in ein String einlesen, einen String in eine Datei speichern,
einen String in der Mitte durchschneiden usw. nicht kennst,
dann kann man dazu auch nicht viel sagen, alle 400 benötigten Code-Zeilen aufzuzählen wäre etwas mühsam 😉

lies ein Lehrbuch von Anfang bis Ende bzw. schaue im Index nach String- und Dateimethoden, alles leicht zu finden
 
Zeilenoperationen sind kein Problem.
Du kannst das ganze mit einem [JAPI]BufferedReader [/JAPI]einlesen und in einer [JAPI]List[/JAPI] speichern.
Dann hast du jede Zeile in der richtigen Ordnung in dieser Liste und kannst an der Veränderungen durchführen.

Bei Spaltenoperationen musst du die Strings vorher splitten und die eventuell ebenfalls in einer Liste Speichern.
 
Danke für die zügigen Antworten. Ich bin noch blutige Anfängerin, lerne aber fleissig (bin bei Seite 78 🙂 ) mit dem Buch von Dietmar Ratz - Grundkurs Programmieren in Java: Band 1. Ich kenne bis jetzt nur die IOTools um Eingaben zu machen. Nun habe ich ein paar Begriffe bekommen nach denen ich recherchieren kann. Java lernen muss ich aus beruflichen gründen.

Zeilenoperationen will ich erst später machen. Jetzt will ich erst einmal lernen wie man Spalten vertauscht. Später sollen auch Zeilen getauscht werden.


Dazu eine neue Frage:

Gibt es in Java eine Klasse oder etwas das man importieren kann, welche Variablen direkt als Matrix betrachtet? Könnte man dann nicht die ganze Datei direkt als Matrix einlesen und bearbeiten mit Befehlen, die gezielt Spalten tauschen etc.?

Liebe Grüsse
Lara
 
Hi,

standardmäßig gibt's keine Matrix-Klasse. Du kannst aber wie oben schon genannt die Datei Zeilenweise in eine Liste (die Array-Objekte hält) bzw ein 2-Dimensionales-Array einlesen. Letzteres jedoch nur, wenn Zeilenanzahl der Datei bekannt.

Dann kannst du auf der Liste/dem Array die ganzen Vertauschungen durchführen.

Gruß
Jodo.
 
Wenn du mal eingelesen hast, dann ist's mit
Java:
String[] array = eingabe.split(" ");
schnell zerlegt.
Aber das ganze Programm wird dir hier wohl keiner vortippen.
 
Gibt es in Java eine Klasse oder etwas das man importieren kann, welche Variablen direkt als Matrix betrachtet? Könnte man dann nicht die ganze Datei direkt als Matrix einlesen und bearbeiten mit Befehlen, die gezielt Spalten tauschen etc.?
Nein so etwas spezielles bietet java mit boardmitteln nicht, ist aber nicht schwer sowas zu schreiben...
 
Okay, danke euch für die Hilfe. Ich werde mein Buch weiter lesen und nach den neuen Begriffen, die hier genannt wurden, recherchieren und melde mich dann zu diesen, oder meinem Problem wieder.

Liebe Grüsse
Lara

p.s.
@AquaBall
Das möchte ich auch gar nicht. Ich muss es doch selbst lernen, sonst killt mich meine Chefin vermutlich, doch ich bin wie gesagt erst ganz kurz dabei, also learning by doing
 
Vielleicht hilft dir auch das weiter - Google Suche nach "java tabelle csv einlesen":
Tutorials.de hat gesagt.:
Java:
public static void main(String[] args) {
 
    // Einlesen des Files und spliten
    FileReader myFile = null;
    BufferedReader buff = null;
    final List<String> lines = new ArrayList<String>();
 
    try {
        myFile = new FileReader("zahlen.csv");
        buff = new BufferedReader(myFile);
        String line;
        while ((line = buff.readLine()) != null) {
            System.out.println(line); // kontrolle was eingelesen
 
            lines.add(line);
        }
    } catch (IOException e) {
        System.err.println("Error2 :" + e);
    } finally {
        try {
            buff.close();
            myFile.close();
        } catch (IOException e) {
            System.err.println("Error2 :" + e);
        }
    }
 
    final String[][] valuesArray = new String[lines.size()][];
    int cnt = 0;
    for (final String line : lines) {
        valuesArray[cnt++] = line.split(",");
    }
 
    // Ausgabe des Array
    for (String[] arr : valuesArray) {
        System.out.println(Arrays.toString(arr));
    }
}

Nur musst du in Zeile eben deine Datei angeben und in Zeile 31 anstelle von
Code:
valuesArray[cnt++] = line.split(",");
Code:
valuesArray[cnt++] = line.split(" ");
schreiben, da bei dir ja die Spalten durch ein Leerzeichen getrennt sind (warum auch immer!?!).
 

Neue Themen


Zurück
Oben