Hallo liebe Java-Freunde,
ich habe die Aufgabe ein Programm zu schreiben, welches .txt Dateien einließt und verarbeitet.
Dafür habe ich eine Klasse geschrieben die die Grunddaten beschreibt:
Die Parser-Klasse sieht folgendermaßen aus (die System.out-Anweisungen sind zur Kontrolle und werden später gelöscht)
Das TableModel habe ich wie folgt geschrieben:
Der Aufruf des JTable sieht folgendermaßen aus:
Ziel ist das die eingelesen Daten in der JTable aufgelistet werden. Dies funktioniert leider nicht.
Leider habe ich in diesem Bereich kaum Erfahrung und komme überhaupt nicht weiter. :bahnhof:
Kann mir ja jemand helfen?
Vielen Dank im Voraus
ich habe die Aufgabe ein Programm zu schreiben, welches .txt Dateien einließt und verarbeitet.
Dafür habe ich eine Klasse geschrieben die die Grunddaten beschreibt:
Java:
package testing2;
public class Zaehlpunkt {
//Hilfs/Kontrollvariablen
private int id; //Zählervariable
private boolean gueltig; //Prüfvariable
private String ref; //Referenz
//Datendeklarierung
private String msg_sender; //Nachrichtensender
private String msg_receiver; //Nachrichtenempfänger
private String zp_bez; //Zählpunkt-Bezeichnung
private String zp_dat; //Zählpunkt-Datum
private String zp_zlger; //Zählpunkt-Zählgerät
private String zp_obis; //Zählpunkt-Geräte/OBIS-Kenennung
private String zp_qual; //Zählpunkt-Qualifyer
private String zp_zlstand; //Zählpunkt-Zählerstand
private String zp_zldatum; //Zählpunkt-Zählerdatum
private String zp_zlgr; //Zählpunkt-Grund
private String zp_status; //Zählpunkt-Status
private String zp_wandfak; //Zählpunkt-Wandlerfaktor
//Konstruktor
public Zaehlpunkt(int id, String ref, String msg_sender, String msg_receiver,
String zp_bez, String zp_dat, String zp_zlger, String zp_obis,
String zp_qual, String zp_zlstand, String zp_zldatum,
String zp_zlgr, String zp_status, String zp_wandfak) {
super();
this.id = id;
this.ref = ref;
this.msg_sender = msg_sender;
this.msg_receiver = msg_receiver;
this.zp_bez = zp_bez;
this.zp_dat = zp_dat;
this.zp_zlger = zp_zlger;
this.zp_obis = zp_obis;
this.zp_qual = zp_qual;
this.zp_zlstand = zp_zlstand;
this.zp_zldatum = zp_zldatum;
this.zp_zlgr = zp_zlgr;
this.zp_status = zp_status;
this.zp_wandfak = zp_wandfak;
}
// Getter & Setter
public String getMsg_sender() {
return msg_sender;
}
public void setMsg_sender(String msg_sender) {
this.msg_sender = msg_sender;
}
public String getMsg_receiver() {
return msg_receiver;
}
public void setMsg_receiver(String msg_receiver) {
this.msg_receiver = msg_receiver;
}
public String getZp_bez() {
return zp_bez;
}
public void setZp_bez(String zp_bez) {
this.zp_bez = zp_bez;
}
public String getZp_dat() {
return zp_dat;
}
public void setZp_dat(String zp_dat) {
this.zp_dat = zp_dat;
}
public String getZp_obis() {
return zp_obis;
}
public void setZp_obis(String zp_obis) {
this.zp_obis = zp_obis;
}
public String getZp_qual() {
return zp_qual;
}
public void setZp_qual(String zp_qual) {
this.zp_qual = zp_qual;
}
public String getZp_zlstand() {
return zp_zlstand;
}
public void setZp_zlstand(String zp_zlstand) {
this.zp_zlstand = zp_zlstand;
}
public String getZp_zldatum() {
return zp_zldatum;
}
public void setZp_zldatum(String zp_zldatum) {
this.zp_zldatum = zp_zldatum;
}
public String getZp_wandfak() {
return zp_wandfak;
}
public void setZp_wandfak(String zp_wanfak) {
this.zp_wandfak = zp_wanfak;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isGueltig() {
return gueltig;
}
public void setGueltig(boolean gueltig) {
this.gueltig = gueltig;
}
public void setZp_status(String zp_status) {
this.zp_status = zp_status;
}
public String getZp_status() {
return zp_status;
}
public void setRef(String ref) {
this.ref = ref;
}
public String getRef() {
return ref;
}
public void setZp_zlger(String zp_zlger) {
this.zp_zlger = zp_zlger;
}
public String getZp_zlger() {
return zp_zlger;
}
public void setZp_zlgr(String zp_zlgr) {
this.zp_zlgr = zp_zlgr;
}
public String getZp_zlgr() {
return zp_zlgr;
}
}
Die Parser-Klasse sieht folgendermaßen aus (die System.out-Anweisungen sind zur Kontrolle und werden später gelöscht)
Java:
package testing2;
import java.io.*;
import java.text.BreakIterator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class FileParser {
// Datendeklaration Speichervariablen
private static int tmp_id; // Zählpunkt-ID
private static String tmp_msg_sender; // Nachrichtensender
private static String tmp_msg_receiver; // Nachrichtenempfänger
private static String tmp_zp_bez; // Zählpunkt-Bezeichnung
private static String tmp_zp_dat; // Zählpunkt-Datum
private static String tmp_zp_zlger; // Zählpunkt-Zählgerät
private static String tmp_zp_obis; // Zählpunkt-Geräte/OBIS-Kenennung
private static String tmp_zp_qual; // Zählpunkt-Qualifyer
private static String tmp_zp_zlstand; // Zählpunkt-Zählerstand
private static String tmp_zp_zldatum; // Zählpunkt-Zählerdatum
private static String tmp_zp_zlgr; // Zählpunkt-Ablesegrund
private static String tmp_zp_status; // Zählpunkt-Status
private static String tmp_zp_wandfak; // Zählpunkt-Wandlerfaktor
private static ArrayList<Zaehlpunkt> tmp_zlpnkt = new ArrayList<Zaehlpunkt>();
private static int hcounter; // Hilfsvariable fürs Zählen!
// private static String file; //Pfad/Dateiname
private Zaehlpunkt temp_zlpnkt;
// Übergabe der Files
public static void start(String file) throws IOException {
// Setzen Zählervariable auf 0
hcounter = 0;
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
// Zeilenweises einlesen
System.out.println("Neue MSCONS-Datei: " + file);
System.out.println("-----------------------");
while ((line = reader.readLine()) != null) {
// Zerlegen in Segemente bei Trennzeichen "'".
String[] result = line.split("'");
// Durchlaufen der Segmente
for (int x = 0; x < result.length; x++) {
// System.out.print(x + " ");
// System.out.println(result[x]);
// Beginn Verarbeitung
// Auslesen Sender
if (result[x].startsWith("NAD+MS")) {
Pattern patternMn = Pattern.compile("\\+(\\d+):");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Nachrichten-Sender");
System.out.println(matcherMn.group(1));
tmp_msg_sender = matcherMn.group(1);
continue;
}
}
// Auslesen Sender
if (result[x].startsWith("NAD+MR")) {
Pattern patternMn = Pattern.compile("\\+(\\d+):");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Nachrichten-Empfänger");
System.out.println(matcherMn.group(1));
tmp_msg_receiver = matcherMn.group(1);
continue;
}
}
// Beginn Mscons-Zählpunkte
if (result[x].startsWith("NAD+DP")) {
if (hcounter > 1) {
// Übergabe der gesammelten Werte an temporäre ArrayList
// tmp_zlpnkt
tmp_id = hcounter++;
tmp_zlpnkt.add(new Zaehlpunkt(tmp_id, file,
tmp_msg_sender, tmp_msg_receiver, tmp_zp_bez,
tmp_zp_dat, tmp_zp_zlger, tmp_zp_obis,
tmp_zp_qual, tmp_zp_zlstand, tmp_zp_dat,
tmp_zp_zlgr, tmp_zp_status, tmp_zp_wandfak));
System.out.println(tmp_id + ". Zählpunkt");
continue;
}
hcounter++;
tmp_id = hcounter;
System.out.println(tmp_id + ". Zählpunkt");
continue;
}
// Auslesen Zählpunkt
if (result[x].startsWith("LOC+172")) {
Pattern patternMn = Pattern.compile("\\+(\\w+):");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Zählpunkt");
System.out.println(matcherMn.group(1));
tmp_zp_bez = matcherMn.group(1);
continue;
}
}
// Auslesen Zählgerät
if (result[x].startsWith("RFF+MG")) {
Pattern patternMn = Pattern.compile("\\:(\\w+)");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Zählgerät");
System.out.println(matcherMn.group(1));
tmp_zp_zlger = matcherMn.group(1);
continue;
}
}
// Auslesen Datum
if (result[x].startsWith("DTM+9")) {
Pattern patternMn = Pattern.compile("\\:+(\\w+):");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Zähler-Datum");
System.out.println(matcherMn.group(1));
tmp_zp_dat = matcherMn.group(1);
continue;
}
}
// Auslesen Gerätenummer/Obis
if (result[x].startsWith("PIA+5")) {
Pattern patternMn = Pattern.compile("\\:+(\\p{Graph}+):");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Geräte/Obis-Nummer");
System.out.println(matcherMn.group(1));
tmp_zp_obis = matcherMn.group(1);
continue;
}
}
// Auslesen Qualifyer-Nr
if (result[x].startsWith("QTY+")) {
Pattern patternMn = Pattern.compile("\\++(\\w+):");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Qualifyer-Nr");
System.out.println(matcherMn.group(1));
tmp_zp_qual = matcherMn.group(1);
continue;
}
}
// Auslesen Zählerstand mit :
if (result[x].startsWith("QTY+")) {
Pattern patternMn = Pattern.compile("\\:(\\p{Graph}+):");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Zählerstand");
System.out.println(matcherMn.group(1));
tmp_zp_zlstand = matcherMn.group(1);
// Wenn Zähler gefunden neue Prüfung überspringen
continue;
}
}
// Auslesen Zählerstand
if (result[x].startsWith("QTY+")) {
Pattern patternMn = Pattern.compile("\\:(\\d+)");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Zählerstand");
System.out.println(matcherMn.group(1));
tmp_zp_zlstand = matcherMn.group(1);
continue;
}
}
// Auslesen Ablesgrund
if (result[x].startsWith("CCI+ACH")) {
Pattern patternMn = Pattern.compile("\\+\\W(\\w++)");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Ablesegrund");
System.out.println(matcherMn.group(1));
tmp_zp_zlgr = matcherMn.group(1);
continue;
}
}
// Auslesen Ablesestatus
if (result[x].startsWith("CCI+16")) {
Pattern patternMn = Pattern.compile("\\+\\D(\\w++)");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Zählerstatus");
System.out.println(matcherMn.group(1));
tmp_zp_status = matcherMn.group(1);
continue;
}
}
// Auslesen Wandlerfaktor
if (result[x].startsWith("MEA+SV+RY+A9")) {
Pattern patternMn = Pattern.compile("\\:(\\p{Graph}+)");
Matcher matcherMn = patternMn.matcher(result[x]);
if (matcherMn.find()) {
System.out.println("Wandlerfaktor");
System.out.println(matcherMn.group(1));
tmp_zp_wandfak = matcherMn.group(1);
continue;
}
}
}
// Übergabe der Werte an den tmporäre ArrayList tmp_zlpnkt
if (hcounter == 1) {
tmp_zlpnkt.add(new Zaehlpunkt(tmp_id, file, tmp_msg_sender,
tmp_msg_receiver, tmp_zp_bez, tmp_zp_dat, tmp_zp_zlger,
tmp_zp_obis, tmp_zp_qual, tmp_zp_zlstand, tmp_zp_dat,
tmp_zp_zlgr, tmp_zp_status, tmp_zp_wandfak));
}
}
// Erzeugen einer neuen Instanz MscFile pro File
addZaehlpunkt(tmp_zlpnkt);
}
public static void addZaehlpunkt(ArrayList<Zaehlpunkt> tmp_zaehlpunkt) {
}
}
Das TableModel habe ich wie folgt geschrieben:
Java:
package testing2;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class ZaehlpunktTableModel extends AbstractTableModel {
public static final int SENDER_COLUMN = 0;
public static final int RECEIVER_COLUMN = 1;
public static final int BEZ_COLUMN = 2;
public static final int DAT_COLUMN = 3;
public static final int ZLGER_COLUMN = 4;
public static final int OBIS_COLUMN = 5;
public static final int QUAL_COLUMN = 6;
public static final int ZLSTAND_COLUMN = 7;
public static final int ZLGR_COLUMN = 8;
public static final int STATUS_COLUMN = 9;
public static final int WANDFAK_COLUMN = 10;
public static final int COLUMN_COUNT = 11;
private final ArrayList<Zaehlpunkt> zaehlpunkte = new ArrayList<Zaehlpunkt>();
public void add(ArrayList<Zaehlpunkt> newZaehlpunkte) {
int first = zaehlpunkte.size();
int last = first + newZaehlpunkte.size() - 1;
zaehlpunkte.addAll(newZaehlpunkte);
fireTableRowsInserted(first, last);
}
public void add(Zaehlpunkt zaehlpunkt) {
int index = zaehlpunkte.size();
zaehlpunkte.add(zaehlpunkt);
fireTableRowsInserted(index, index);
}
public void remove(int index){
zaehlpunkte.remove(index);
}
public int getRowCount() {
return zaehlpunkte.size();
}
public int getColumnCount() {
return COLUMN_COUNT;
}
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
public Zaehlpunkt getZaehlpunkt(int row) {
return zaehlpunkte.get(row);
}
public Object getValueAt(int row, int column) {
Zaehlpunkt zaehlpunkte1 = zaehlpunkte.get(row);
switch (column) {
case SENDER_COLUMN:
return zaehlpunkte1.getMsg_sender();
case RECEIVER_COLUMN:
return zaehlpunkte1.getMsg_receiver();
case BEZ_COLUMN:
return zaehlpunkte1.getZp_bez();
case DAT_COLUMN:
return zaehlpunkte1.getZp_dat();
case ZLGER_COLUMN:
return zaehlpunkte1.getZp_zlger();
case OBIS_COLUMN:
return zaehlpunkte1.getZp_obis();
case QUAL_COLUMN:
return zaehlpunkte1.getZp_qual();
case ZLSTAND_COLUMN:
return zaehlpunkte1.getZp_zlstand();
case ZLGR_COLUMN:
return zaehlpunkte1.getZp_zlgr();
case STATUS_COLUMN:
return zaehlpunkte1.getZp_status();
case WANDFAK_COLUMN:
return zaehlpunkte1.getZp_wandfak();
}
return null;
}
}
Der Aufruf des JTable sieht folgendermaßen aus:
Java:
private JTable getJTableMSCONS() {
if (jTableMSCONS == null) {
jTableMSCONS = new JTable();
jTableMSCONS.setAutoCreateRowSorter(true);
jTableMSCONS.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
jTableMSCONS.setModel(new ZaehlpunktTableModel());
jTableMSCONS.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}
return jTableMSCONS;
}
Leider habe ich in diesem Bereich kaum Erfahrung und komme überhaupt nicht weiter. :bahnhof:
Kann mir ja jemand helfen?
Vielen Dank im Voraus