Guten Abend Community,
ich soll eine Logikminimierung mit dem Programm Espresso programmieren, also aus einer Datei 0 bzw. 1 oder - einlesen, diese in einer Tabelle anzeigen und dann über Espresso minimieren lassen.
Bisher klappt mein Programm soweit, dass ich die Eingangsvariablen und Ausgangsvariablen richtig einlesen kann(auch wenn es etwas umständlich ist) und die Tabelle dementsprechend zeichnen kann. Auch die Funktion, mit der eine Reihe hinzugefügt wird klappt einwandfrei. Das einzige Problem habe ich beim Einlesen der Datei, da diese am Anfang ".i 4" und ".o 2" stehen hat (.i = Anzahl der Eingangsvariablen, .o = Anzahl der Ausgangsvariablen), also keine reinen Int Werte.
Habt ihr eine Idee, wie ich diese "rausfiltern" kann, ohne die Datei selbst zu verändern? Ich habe mir das so gedacht, dass die Datei in eine Arraylist oder ähnliches eingelesen wird und dann, wenn sich ein int Wert am Anfang befindet, die Werte in ein neues Array gespeichert werden, am besten Zeichen für Zeichen.
Die Datei sieht so aus:
Meine Programm sieht so aus:
ich soll eine Logikminimierung mit dem Programm Espresso programmieren, also aus einer Datei 0 bzw. 1 oder - einlesen, diese in einer Tabelle anzeigen und dann über Espresso minimieren lassen.
Bisher klappt mein Programm soweit, dass ich die Eingangsvariablen und Ausgangsvariablen richtig einlesen kann(auch wenn es etwas umständlich ist) und die Tabelle dementsprechend zeichnen kann. Auch die Funktion, mit der eine Reihe hinzugefügt wird klappt einwandfrei. Das einzige Problem habe ich beim Einlesen der Datei, da diese am Anfang ".i 4" und ".o 2" stehen hat (.i = Anzahl der Eingangsvariablen, .o = Anzahl der Ausgangsvariablen), also keine reinen Int Werte.
Habt ihr eine Idee, wie ich diese "rausfiltern" kann, ohne die Datei selbst zu verändern? Ich habe mir das so gedacht, dass die Datei in eine Arraylist oder ähnliches eingelesen wird und dann, wenn sich ein int Wert am Anfang befindet, die Werte in ein neues Array gespeichert werden, am besten Zeichen für Zeichen.
Die Datei sieht so aus:
.i 4
.o 2
0000 01
0001 01
0010 00
0011 -0
0100 11
0101 11
0110 1-
0111 1-
1000 0-
1001 11
1010 00
1011 -1
1100 10
1101 11
1110 0-
1111 11
.e
.o 2
0000 01
0001 01
0010 00
0011 -0
0100 11
0101 11
0110 1-
0111 1-
1000 0-
1001 11
1010 00
1011 -1
1100 10
1101 11
1110 0-
1111 11
.e
Meine Programm sieht so aus:
Java:
package logikminimierung;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class Application extends JFrame implements ActionListener {
private static final long serialVersionUID = 17L;
String line;
Integer init1 = new Integer(loadInput()); // Anzahl der Variablen aus Datei
// laden
Integer init2 = new Integer(loadOutput()); // Anzahl der Funktionen aus
// Datei laden
Integer min = new Integer(0);
Integer max = new Integer(100);
Integer step = new Integer(1);
JTable truthTable;
SpinnerNumberModel num1 = new SpinnerNumberModel(init1, min, max, step);
JSpinner numSpin = new JSpinner(num1);
SpinnerNumberModel num2 = new SpinnerNumberModel(init2, min, max, step);
JSpinner funktionenSpin = new JSpinner(num2);
SpinnerNumberModel model = (SpinnerNumberModel) numSpin.getModel();
int vars = model.getNumber().intValue();
JPanel panelTOP = new JPanel();
JPanel panelEAST = new JPanel();
JPanel panelSOUTH = new JPanel();
JPanel panelCENTER = new JPanel();
JPanel panelNORTH = new JPanel();
JPanel cp;
JScrollPane sp1;
JLabel variablenLabel = new JLabel("Variablen");
JLabel funktionenLabel = new JLabel("Funktionen");
JButton minimizeButton = new JButton("Minimize");
JButton addrowButton = new JButton("Add Row");
JButton fillButton = new JButton("Fill");
FlowLayout flowlayout1 = new FlowLayout(FlowLayout.CENTER);
int anzahlVariablen;
int anzahlFunktionen;
int row;
ArrayList<Funktion> liste = new ArrayList<Funktion>();
public Application() throws IOException {
row = (int) Math.pow(2, anzahlVariablen);
cp = (JPanel) getContentPane();
setSize(500, 500);
cp.setLayout(new BorderLayout());
addrowButton.addActionListener(this);
fillButton.addActionListener(this);
minimizeButton.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initPanelNorth();
initPanelEast();
initPanelSouth();
truthTable = new JTable();
DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) truthTable
.getDefaultRenderer(Object.class);
renderer.setHorizontalAlignment(SwingConstants.CENTER);
sp1 = new JScrollPane(truthTable);
loadInput();
initPanelCenter();
setSize(500, 500);
row = (int) Math.pow(2, anzahlVariablen);
}
private int loadInput() throws IOException {
String inputFile = ".\\pla\\Bsp.pla";
Scanner input = new Scanner(inputFile);
try {
String zeile;
BufferedReader reader = new BufferedReader(
new FileReader(inputFile));
zeile = reader.readLine();
String[] tmp = zeile.split(" ");
anzahlVariablen = Integer.parseInt(tmp[1]);
while (zeile != null) {
zeile = reader.readLine();
}
} catch (FileNotFoundException e) {
System.out.println("Error: Datei nicht gefunden");
} catch (IOException e) {
System.out.println("Error:Fehler beim einlesen");
}
input.close();
return anzahlVariablen;
}
public static String readLine(int lineNumber) throws Exception {
if (lineNumber < 1)
return null;
String inputFile = ".\\pla\\Bsp.pla";
LineNumberReader f = new LineNumberReader(new FileReader(inputFile));
while (f.getLineNumber() < lineNumber - 1) {
if (f.readLine() == null)
break;
}
return f.readLine();
}
private int loadOutput() {
String inputFile = ".\\pla\\Bsp.pla";
Scanner input = new Scanner(inputFile);
try {
String zeile;
BufferedReader reader = new BufferedReader(
new FileReader(inputFile));
zeile = reader.readLine();
@SuppressWarnings("unused")
String[] tmp = zeile.split(" ");
String funktionen = readLine(2);
String[] tmp2 = funktionen.split(" ");
anzahlFunktionen = Integer.parseInt(tmp2[1]);
while (zeile != null) {
zeile = reader.readLine();
}
} catch (FileNotFoundException e) {
System.out.println("Error: Datei nicht gefunden");
} catch (IOException e) {
System.out.println("Error:Fehler beim einlesen");
} catch (Exception e) {
e.printStackTrace();
}
input.close();
return anzahlFunktionen;
}
private void initPanelNorth() {
panelNORTH.setLayout(flowlayout1);
panelNORTH.add(variablenLabel);
panelNORTH.add(numSpin);
panelNORTH.add(funktionenLabel);
panelNORTH.add(funktionenSpin);
panelNORTH.add(addrowButton);
panelNORTH.add(fillButton);
cp.add(BorderLayout.NORTH, panelNORTH);
cp.add(BorderLayout.CENTER, panelCENTER);
cp.add(BorderLayout.EAST, panelEAST);
cp.add(BorderLayout.SOUTH, panelSOUTH);
}
private void createTable() {
int anzahlVariablen = Integer.valueOf(num1.getValue().toString())
.intValue();
int anzahlFunktionen = Integer.valueOf(num2.getValue().toString())
.intValue();
String[] header = new String[anzahlVariablen + anzahlFunktionen];
String[][] werte = new String[row][anzahlVariablen]; // [Anzahl
// Zeilen(2^n)
int i = anzahlVariablen;
while (i + 1 > 0) {
header[i] = ("x" + i); // header füllen
i--;
}
int o = anzahlFunktionen - 1;
while (o + 1 > 0) {
header[anzahlVariablen + o] = ("y" + o); // header füllen
o--;
}
DefaultTableModel tableModel = new DefaultTableModel(werte, header);
DefaultTableModel model = (DefaultTableModel) truthTable.getModel();
String[] data = null; // vorbelegte Werte
model.addRow(data);
pack(); // Tabelle neu generieren
panelCENTER.add(sp1);
truthTable.setModel(tableModel);
}
private void initPanelCenter() {
panelCENTER.setLayout(flowlayout1);
createTable();
cp.add(panelCENTER, BorderLayout.CENTER);
}
private void initPanelEast() {
panelEAST.setLayout(flowlayout1);
}
private void initPanelSouth() {
panelSOUTH.setLayout(flowlayout1);
panelSOUTH.add(minimizeButton, BorderLayout.SOUTH);
cp.add(panelSOUTH, BorderLayout.SOUTH);
}
private void addRow() {
row++;
}
private void fill() throws IOException {
String uebergabeVariable;
ArrayList<Character> werteArray = new ArrayList<Character>();
String inputFile = ".\\pla\\Bsp.pla";
Scanner input = new Scanner(inputFile);
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
String[] tmp;
String str;
String zeile = "";
for (int i = 0; i < tmp.length; i++) {
zeile = reader.readLine();
}
tmp = (zeile.split(""));
for (int i = 0; i < tmp.length; i++) {
werteArray.add((char) reader.read());
}
for (int i = 0; i <tmp.length; i++) {
str = reader.readLine();
System.out.println("blaa");
if (str.equals("1") || str.equals("0")) { // || = oder
werteArray.add(str.charAt(0)); // Zeichen am Index 0 übergeben
// nach werteArray
System.out.println("fwafawf");
i++;
} else {
i++;
continue;
}
zeile = reader.readLine();
}
}
private void minimize() {
try {
String inputFile = ".\\pla\\Bsp.pla";
String outputFile = ".\\pla\\min.pla";
String options = "";
String command = "cmd /c .\\bin\\espresso " + inputFile + " > "
+ outputFile;
// System.out.println(command); //Test
Process espresso = Runtime.getRuntime().exec(command);
int errorCode;
try {
errorCode = espresso.waitFor();
} catch (InterruptedException e) {
System.out.println(e);
}
} catch (IOException e) {
System.out.println(e);
}
}
@Override
public void actionPerformed(ActionEvent arg0) {
switch (arg0.getActionCommand()) {
case "Minimize":
minimize();
break;
case "Fill":
initPanelCenter();
try {
fill();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case "Add Row":
addRow();
initPanelCenter();
}
}
}