CSV Daten in ArrayList speichern und sortieren..

so kannst du die Spalten an die einzelnen setter übergeben

Code:
		String x = "198500;8a;58;PHOENIX;ARD";
		StringTokenizer st = new StringTokenizer(x, ";");
		setSpalte1(st.nextToken());
		setSpalte2(st.nextToken());
		setSpalte3(st.nextToken());
		setSpalte4(st.nextToken());
		setSpalte5(st.nextToken());

gibt da durchaus elegantere Lösungen aber zum allgemeinen Verständnis sollte dies mal so reichen.
 
okay super..
hab es jetzt an mich angepasst...
public void readFileData() {

// Einlesen des Files und spliten
FileReader myFile = null;
BufferedReader buff = null;
ArrayList<Bean> lines = new ArrayList<Bean>();

try {
myFile = new FileReader("Kanalscan.csv");
buff = new BufferedReader(myFile);
String line;
while ((line = buff.readLine()) != null) {
System.out.println(line); // kontrolle was eingelesen
Bean bean = new Bean();
StringTokenizer st = new StringTokenizer(line, ";");
bean.setFrequenz(st.nextToken());
bean.setKanal(st.nextToken());
bean.setQualität(st.nextToken());
bean.setProgramm(st.nextToken());
bean.setAnbieter(st.nextToken());
lines.add(bean);
}

und wie lass ich jetzt noch nach der 3ten spalte sortieren und in der konsole ausgeben?
mit code wäre ideal..

danke vielmals...
 
Hallo,

erstmal mein Code:
Code:
package pack;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;

import javax.swing.JWindow;

public class Testzwecke implements Comparator<Bean> {
	public void readFileData() {

		// Einlesen des Files und spliten
		FileReader myFile = null;
		BufferedReader buff = null;
		ArrayList lines = new ArrayList();

		try {
			myFile = new FileReader("Kanalscan.csv");
			buff = new BufferedReader(myFile);
			String line;
			while ((line = buff.readLine()) != null) {
				System.out.println(line); // kontrolle was eingelesen
				Bean bean = new Bean();
				StringTokenizer st = new StringTokenizer(line, ";");
				bean.setFrequenz(st.nextToken());
				bean.setKanal(st.nextToken());
				bean.setQualität(st.nextToken());
				bean.setProgramm(st.nextToken());
				bean.setAnbieter(st.nextToken());
				lines.add(bean);
			}

			// Collections.sort(lines, compare));
		} catch (IOException e) {
			System.err.println("Error2 :" + e);
		} finally {
			try {
				buff.close();
				myFile.close();
			} catch (IOException e) {
				System.err.println("Error2 :" + e);
			}
		}
	}

	public int compare(Bean o1, Bean o2) {
		if (o1.getQualität() > o2.getQualität())
			return 1;
		if (o1.getQualität() < o2.getQualität())
			return -1;
		else
			return 0;
	}
}

ich hab einpaar probleme und wollte fragen ob ihr mir bitte weiterhelfen könnt.
1. meine compare methode funktioniert nur wenn die getmethode ein "int,char" ist..
aber wenn ich dies änder funktioniert mein "nextToken" nicht mehr.
was für eine lösung gibt es da?

2. hab ich die compare metode richtig programmiert? ich möchte dass nach "qualität" sortiert wird... Wenn ja wie übergebe ich richtig die parameter der Collection.sort()

Bitte noch neu in Java wäre super wenn mit jemand helfen könnte da ich wirklich nicht mehr weiter weiß....
 
warst eigentlich schon ganz nah dran:

Code:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class CSV{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// Einlesen des Files und spliten
		FileReader myFile = null;
		BufferedReader buff = null;
		ArrayList<Bean> lines = new ArrayList<Bean>();

		try {
			myFile = new FileReader("Test.txt.txt");
			buff = new BufferedReader(myFile);
			String line;
			while ((line = buff.readLine()) != null) {
				System.out.println(line); // kontrolle was eingelesen
				Bean bean = new Bean();
				StringTokenizer st = new StringTokenizer(line, ";");
				bean.setFrequenz(st.nextToken());
				bean.setKanal(st.nextToken());
				bean.setQualitaet(st.nextToken());
				bean.setProgramm(st.nextToken());
				bean.setAnbieter(st.nextToken());
				lines.add(bean);
			}
			 Collections.sort(lines);
		} catch (IOException e) {
			System.err.println("Error2 :" + e);
		} finally {
			try {
				buff.close();
				myFile.close();
			} catch (IOException e) {
				System.err.println("Error2 :" + e);
			}
		}
	}

}

und deine Beans:
Code:
public class Bean implements Comparable<Bean>{
	
	String frequenz;
	
	String kanal;
	
	String qualitaet;
	
	String programm;
	
	String anbieter;
	
	public Bean(){
		
	}

	public String getFrequenz() {
		return frequenz;
	}

	public void setFrequenz(String frequenz) {
		this.frequenz = frequenz;
	}

	public String getKanal() {
		return kanal;
	}

	public void setKanal(String kanal) {
		this.kanal = kanal;
	}

	public String getQualitaet() {
		return qualitaet;
	}

	public void setQualitaet(String qualitaet) {
		this.qualitaet = qualitaet;
	}

	public String getProgramm() {
		return programm;
	}

	public void setProgramm(String programm) {
		this.programm = programm;
	}

	public String getAnbieter() {
		return anbieter;
	}

	public void setAnbieter(String anbieter) {
		this.anbieter = anbieter;
	}

	@Override
	public int compareTo(Bean o) {
		return qualitaet.compareTo(o.getQualitaet());
	}
}

vielleicht noch als kleine Anmerkung: Umlaute gehören nicht in Variablenbezeichnungen ;)
 
achja die Ausgabe auf der Console:

in der Klasse Bean legst du eine Methode an z.B:

Code:
	public String toString(){
		return frequenz + "\t" + kanal  + "\t" + qualitaet  + "\t" + anbieter; 
	}

dann musst du dür die Ausgabe nur noch folgendes implementieren

Code:
			 for(int i=0;i<lines.size();i++){
				 System.out.println(lines.get(i));
			 }
 
super vielen dank...
läuft einwandfrei...

die letzte frage welche klassen oder methoden gibt es denn um die ausgabe schön formatiert auszugeben..
also unter frequenz dass immer der wert steht, unter qualität dann genau der qualität wert?

weil momentan hab ich die ausgabe:
Code:
for (int i = 0; i < lines.size(); i++) {
				System.out.println(lines.get(i));
			}
 
ja klar...
denke auch dass es net so schwer ist..
kannst du mir nur sagen welche methoden schon von java vordefinerit sind für sowas?
 
Zurück