Daten aufbereiten

A

algebraiker

Gast
Hallo,

ich habe nachstehenden Datensatz in der Textdatei "test.txt" gegeben. An dieser Datei soll nichts verändert werden.

Auszug:

Code:
real;unreal
3437,5;
3447,5;
3447;
3446,5;2558
3446;3446,65442
3445,5;3446,222
3445;3445,88833
3444,5;3445,0473
3444;3444,56226
...
;3445,0123

Die drei Punkte in der vorletzten Zeile sollen ausdrücken, dass noch mehr Werte dazwischen stehen. Der Strichpunkt bedeutet eine Trennung.

Frage:

Wie kann ich den Datensatz so gestalten, dass ich daraus mit Hilfe von JFreeChart ein Liniendiagramm erstellen kann?

Folgendes habe ich versucht:

Java:
private XYDataset createData() throws FileNotFoundException {
			File files = new File("C:/test/test.txt");
			BufferedReader in = new BufferedReader(new FileReader(files));
			String zeile = null;
			String[] text = null;
			List<Double> lines = new ArrayList<Double>();
                        List<Double> lines2 = new ArrayList<Double>();
			try {
				while ((zeile = in.readLine()) != null) {

					text = zeile.split(";");
					lines.add(Double.parseDouble(text[0]));
                                        lines2.add(Double.parseDouble(text[1]));
				}
				lines.remove(0);
			} catch (IOException e) {
				e.printStackTrace();
			}

			XYSeries xyseries = new XYSeries("re");

			try {
				while ((zeile = in.readLine()) != null) {
					xyseries.add(Double.parseDouble(zeile), lines.get(Integer.parseInt(zeile)));
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

			
			XYSeriesCollection xyseriescollection = new XYSeriesCollection(
					xyseries);
			
                        XYSeries xyseries1 = new XYSeries("pre");
			try {
				while ((zeile = in.readLine()) != null) {
					xyseries.add(Double.parseDouble(zeile), lines2.get(Integer.parseInt(zeile)));
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			xyseriescollection.addSeries(xyseries1);
			return xyseriescollection;
		}

Aber da bekomme ich natürlich Fehler.

Code:
Exception in thread "main" java.lang.NumberFormatException: For input string: "t"
	at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
	at java.lang.Double.parseDouble(Unknown Source)
	at testpackage.XYSplineRendererDemo1$DemoPanel.createSampleData(XYSplineRendererDemo1.java:46)
	at testpackage.XYSplineRendererDemo1$DemoPanel.<init>(XYSplineRendererDemo1.java:115)
	at testpackage.XYSplineRendererDemo1.createDemoPanel(XYSplineRendererDemo1.java:127)
	at testpackage.XYSplineRendererDemo1.<init>(XYSplineRendererDemo1.java:122)
	at testpackage.XYSplineRendererDemo1.main(XYSplineRendererDemo1.java:131)

Kann mir jemand helfen, wie ich den Datensatz so gestalte, dass die erste Zeile nicht betrachtet wird und alle Kommata zu Punkten werden? Und selbst wenn ich aus der Text-Datei die erste Zeile manuell lösche und alle Kommate zu Punkte konvertiere (wiederum manuell) und dann den Code laufen lasse, bekomme ich:

Code:
Exception in thread "main" java.lang.NumberFormatException: empty String
	at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
	at java.lang.Double.parseDouble(Unknown Source)
	at testpackage.XYSplineRendererDemo1$DemoPanel.createSampleData(XYSplineRendererDemo1.java:46)
	at testpackage.XYSplineRendererDemo1$DemoPanel.<init>(XYSplineRendererDemo1.java:115)
	at testpackage.XYSplineRendererDemo1.createDemoPanel(XYSplineRendererDemo1.java:127)
	at testpackage.XYSplineRendererDemo1.<init>(XYSplineRendererDemo1.java:122)
	at testpackage.XYSplineRendererDemo1.main(XYSplineRendererDemo1.java:131)


Weiß jemand Rat? Danke.
 
D

Dow Jones

Gast
Welches Format erwartet FreeChart denn? Ich habe ehrlich gesagt keine Lust das selber zu ergoogeln, daher wäre es nett wenn du das mal kurz beschreiben könntest.

Wenn FreeChart lediglich eine Liste von Zahlenpaaren erwartet, dann würde ich das Textfile wohl als Text behandeln und die erste Zeile löschen (falls sie keine Zahlen enthält). Die Zeilen mit fehlenden Werten müsste man dann vermutlich entweder ebenfalls löschen, oder die nicht vorhandenen Werte mit Nullen auffüllen. Das könnte so aussehen:
[Java]
text = text.replaceAll("^;", "0.0;");
text = text.replaceAll(";$", ";0.0");
[/Java]
 
A

algebraiker

Gast
Ja, es verlangt double-Werte.

Mein Problem von vorhin kann ich euch anhand dieser Testklasse demonstrieren:

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Modify {
	public void testData() throws FileNotFoundException {
		File files = new File("C:/test/test.txt");
		BufferedReader in = new BufferedReader(new FileReader(files));
		String zeile = null;
		String[] text = null;
		List<String> lines = new ArrayList<String>();
		List<Integer> linesInt = new ArrayList<Integer>();
		try {
			while ((zeile = in.readLine()) != null) {

				text = zeile.split(";");
				lines.add(text[0]);
			}
			lines.remove(0);
		} catch (IOException e) {
			e.printStackTrace();
		}
		int i = lines.size();
		for(i = 0; i < lines.size(); i++)
		{
			linesInt.add(Integer.parseInt(lines.get(i)));
		}
		System.out.println(linesInt);
	}
	
	public static void main(String[] argv) throws FileNotFoundException{
		Modify m = new Modify();
		m.testData();
	}
}

Wenn ich es als Double-Werte parsen möchte, bekomme ich Fehler...

Java:
Exception in thread "main" java.lang.NumberFormatException: For input string: "3447.5"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at test.Modify.testData(Modify.java:32)
	at test.show.Modify.main(Modify.java:39)
 

Michael...

Top Contributor
Java:
BufferedReader in = new BufferedReader(new FileReader(files));
...
while ((zeile = in.readLine()) != null) {
...
while ((zeile = in.readLine()) != null) {
...
while ((zeile = in.readLine()) != null) {
Zunächst mal machen die drei while Schleifen nicht viel Sinn. Wenn der Reader einmal durch ist, dann ist er auch durch.
Wenn Du die erste Zeile nicht verarbeiten willst/kannst dann lies sie einfach aus und "schmeíß" sie weg anstatt sie in eine Liste zu speichern.
Das
Code:
lines.remove(0);
in Zeile 15 kommt ein bisschen spät ;-) uns ist überflüssig, wenn man erst gar nichts reinsteckt.

Wie ersetzt Du denn die Kommas?
Zwei Möglichkeiten die mir spontan einfallen um einen String in ein double zu parsen ist NumberFormat (hier hätte man sogar die Möglichkeit die Locale aktiv zu setzen) und eventuelle Kommas in Punkte zu wandeln.

Java:
	NumberFormat format = NumberFormat.getInstance();
	double d = format.parse("1,2").doubleValue();
	System.out.println(d);
	
	System.out.println(Double.parseDouble("1,2".replaceAll(",", ".")));

Programmieren funktioniert Schritt für Schritt zu erst fängt man mit den elementaren Dingen an und fügt sie zu komplexeren Systemen zusammen...
 
A

algebraiker

Gast
Hallo Michael,

wie würde ich denn die erste Zeile sinnvoll umgehen? Könntest du vielleicht ein Minimalbeispiel dazu geben?

Und ich hätte noch eine Frage: Warum gibt es die Fehler in meiner Klasse Modify, selbst wenn ich die Textdatei ohne die erste Zeile und mit Punkt anstatt Komma vorliegen habe?
 

Michael...

Top Contributor
wie würde ich denn die erste Zeile sinnvoll umgehen? Könntest du vielleicht ein Minimalbeispiel dazu geben?
Einfach nur
Code:
in.readLine()
aufrufen und schon ist die erste Zeile gelesen und "weg".
Und ich hätte noch eine Frage: Warum gibt es die Fehler in meiner Klasse Modify, selbst wenn ich die Textdatei ohne die erste Zeile und mit Punkt anstatt Komma vorliegen habe?
Wie split hier nur ein Array mit der Länge 1 zurückliefert, Du aber im Code von der Länge 2 ausgehst.
 
A

algebraiker

Gast
Cool, das Weglassen der ersten Zeile funktioniert ja wie geschmiert. Dankeschön. :)

Wie kann ich denn auf die Werte nach dem Strichpunkt zugreifen, wenn das Array nur die Länge von 1 hat?
 

algebraiker

Aktives Mitglied
So, endlich registriert..

Gut, dann stelle ich die Frage anders. Was muss ich tun, um auf den Wert nach dem Strichpunkt i.A. zu kommen? Muss ich die Datei anders einbinden? Weil so, wie ich es im Moment mache, wird es ja wohl nie funktionieren. Sehe ich das richtig?
 

algebraiker

Aktives Mitglied
Ich seh' schon, ich drücke mich missverständlich aus. Sorry!

Also ich gehe von obiger test.txt-Datei aus. Nach dem Strichpunkt sind ja noch weitere Werte enthalten. Diese und die vor dem Semikolon stehenden Werte möchte ich in ArrayList<Double> einlesen. Bloß krieg ich das nicht hin. :)
 

Michael...

Top Contributor
keine Ahnung, ob das o in der Art sein soll:
Java:
        File files = new File("C:/test/test.txt");
        BufferedReader in = new BufferedReader(new FileReader(files));
        String zeile = null;
        
        List<Double> realList = new ArrayList<Double>();
        List<Double> unrealList = new ArrayList<Double>();
        try {
        	in.readLine();
            while ((zeile = in.readLine()) != null) {
 
            	String[] text = zeile.split(";");
            	double real = ...// text[0] in double parsen
                realList.add(real);
                if (text.length>=2) {
                	double unreal = ... // text[1] in double parsen
                	unrealList.add(unreal);
                }
                else {
                	//keine Ahnung ob hier was passieren muss
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Daten zum Drucken aufbereiten Allgemeine Java-Themen 8
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
padde479 Collections Daten in Dreiecksform Allgemeine Java-Themen 13
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
A Hartgecodete Daten auslagern Allgemeine Java-Themen 4
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
S Webservices für binäre Daten? Allgemeine Java-Themen 5
OnDemand Daten in RAM zwischenspeichern oder lieber aus DB holen? Allgemeine Java-Themen 24
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
S Entities aus XML - Daten. Allgemeine Java-Themen 1
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
M Daten aus MatLab Datei lesen Allgemeine Java-Themen 8
N Daten einer JCoTable in JTextArea anzeigen Allgemeine Java-Themen 7
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
C Daten für Klassifikationsverfahren gewinnen Allgemeine Java-Themen 6
J Daten von Quelltext Allgemeine Java-Themen 5
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
J Jasper Reports - Daten vom Hoster Allgemeine Java-Themen 2
kodela Daten während Laufzeit zugriffsbereit Allgemeine Java-Themen 15
J Millisekunde zwischen 2 Daten Allgemeine Java-Themen 6
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
R Android Daten online senden Allgemeine Java-Themen 0
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
K Gespeicherte Daten von einer LinkedList auf vier LinkedList verteilen Allgemeine Java-Themen 6
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
OnDemand Desktop-Applikation schreiben, wie daten persistent? Allgemeine Java-Themen 9
S Erste Schritte Fehlender Gedanken-Ansatz bei Interpretation von Daten Allgemeine Java-Themen 1
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
K Große Mengen an Daten speichern Allgemeine Java-Themen 9
D Daten in MySQL-Datenbank schreiben Allgemeine Java-Themen 13
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
M Daten aus anderen Programmen auslesen Allgemeine Java-Themen 2
D Best Practice Login-Daten: Wie am besten abrufen? Allgemeine Java-Themen 6
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
J Serial Port Daten empfangen Allgemeine Java-Themen 5
H Daten via COM Schnittstelle erhalten Allgemeine Java-Themen 2
J Daten persistent speichern Allgemeine Java-Themen 14
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
G Daten aus Website auslesen Allgemeine Java-Themen 7
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
O Serial Port Daten als Tastaturanschlag senden Allgemeine Java-Themen 0
N Zeitabstand zwischen 2 Daten(Mehrzahl von Datum) Allgemeine Java-Themen 3
T Input/Output Daten in eine Datei schreiben Allgemeine Java-Themen 4
Z daten bindung Allgemeine Java-Themen 1
A Datentypen Gregorian Calendar - 2 Daten sind gleich?? Allgemeine Java-Themen 3
L Vergleich-Xml-Daten Allgemeine Java-Themen 3
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
A Daten in Formularen/Vorlagen erstellen und ausdrucken Allgemeine Java-Themen 3
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
Todesbote Excel Blattschutz aufheben und Daten einfügen Allgemeine Java-Themen 3
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
OnDemand PC identifizieren / Daten auslesen Allgemeine Java-Themen 15
G Combobox füllen mit daten aus einer Tabelle Allgemeine Java-Themen 4
J Maven .war enthält veraltete Daten Allgemeine Java-Themen 3
N Daten aus Jar laden Allgemeine Java-Themen 10
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
M Best Practice: Daten aufnehmen-speichern-bereitstellen Allgemeine Java-Themen 8
T Daten effizient verwalten Allgemeine Java-Themen 4
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
R Daten aus DB auslesen in ein formular (JSP) Allgemeine Java-Themen 13
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
H OOP Daten über TCP Allgemeine Java-Themen 5
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
D Daten eines User auslesen. Allgemeine Java-Themen 5
B Input/Output Einbinden von Daten in Java Allgemeine Java-Themen 3
L Einbinden von Daten in ausführbare Jar Allgemeine Java-Themen 6
N Methoden Einzelne Daten aus "Person" auslesen Allgemeine Java-Themen 3
R SerialPort auslesen und Daten verarbeiten Allgemeine Java-Themen 23
ARadauer Wo liegen die Daten der Preferences Klasse Allgemeine Java-Themen 3
Madlip Erste Schritte Java speichert Daten im Programm?!? Allgemeine Java-Themen 9
S JDialog Daten ins JFrame übergeben Allgemeine Java-Themen 5
F Threads synchronisierung des Zugriffes auf daten Allgemeine Java-Themen 4
O Amazon S3 Anmelden / Daten downloaden Allgemeine Java-Themen 2
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
L Speichern von Daten in JKS Allgemeine Java-Themen 5
K JFreeCharts - Dummy für fehlende Daten Allgemeine Java-Themen 6
M Daten aus doc, pdf .... auslesen Allgemeine Java-Themen 12
Z Daten von einer Klasse in eine andere übertragen Allgemeine Java-Themen 8
A Login-Daten Formular automatisch ausfüllen Allgemeine Java-Themen 10
C Daten speichern und verwalten Allgemeine Java-Themen 3
Z Daten aus einer Internetseite auslesen? Allgemeine Java-Themen 2
E BlueJ Daten in Textdatei schreiben Allgemeine Java-Themen 21
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
ruutaiokwu META-INF-daten bei ungepackten library-projekten während der entwicklung mit einbeziehen...? Allgemeine Java-Themen 2
K Server Daten Visualisieren Allgemeine Java-Themen 3
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5
A Java Projekt (Daten Eingeben, Speichern und in Listen Ausgeben) Allgemeine Java-Themen 6
L Sicherstellen das 2x die gleichen Daten unter bestimmten Keys enthalten sind. Allgemeine Java-Themen 6
A XML-Daten komprimieren Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben