import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Minusbg extends Thread { double dim, rang, mi, sta; String datei; Thread t; // Constructor public Minusbg(double dim, double rang, double mi, String datei) { this.dim = dim; this.rang = rang; this.mi = mi; this.datei = datei; } // Start überschreiben public void start(Thread thread, int sta) { this.sta = sta; t = thread; super.start(); } // Überschriebene RUN public void run() { if(t != null){ try{t.join();t = null;} catch(InterruptedException e) {} } if(sta == 1) { Stammfenster.loglist.setText(Stammfenster.loglist.getText()+"Einlesen abgeschlossen\n"); Stammfenster.loglist.setText(Stammfenster.loglist.getText()+"Minimierung Background gestartet...\n"); } else if(sta == 2) { Stammfenster.loglist.setText(Stammfenster.loglist.getText()+"Background minimiert\n"); } // Dateinamenverarbeitung int point = datei.indexOf("."); datei = datei.substring(0,point); String output = datei+"minbg.mrg"; datei = datei+"celcdf.mrg"; try { minbg((int)dim, (int)rang, (int)mi, datei, output); } catch (IOException e) { e.printStackTrace(); } Stammfenster.loglist.setText(Stammfenster.loglist.getText()+"Einlesen abgeschlossen\n"); Stammfenster.progress.setValue(Stammfenster.progress.getValue()+3); } float values[][]; float nu, ne = 0; HashMap erg = new HashMap (); float mini[]; // Übergabewerte: Kantenlänge des Chips, Umfeldgröße, Anzahl der Minimalwerte in % public void minbg(int dimension, int range, int min, String in, String out) throws IOException { // READ BufferedReader mrg = new BufferedReader(new FileReader(in)); // WRITE try {PrintWriter daten = new PrintWriter(out); String line = " "; float value; values = new float[dimension][dimension]; line = mrg.readLine(); while(line != null) { Pattern pat = Pattern.compile("(\\d+)\\s+(\\d+)\\s+(\\d+)\\.\\d\\s+(.*)"); Matcher mat = pat.matcher(line); Pattern pat2 = Pattern.compile("(\\d+)\\s+(\\d+)\\s+(\\d+)\\.\\d"); Matcher mat2 = pat2.matcher(line); if(mat.find()) { value = Float.parseFloat(mat.group(3)); values[Integer.parseInt(mat.group(1))][Integer.parseInt(mat.group(2))] = value; // Rest unter den Koordinaten abspeichern erg.put(mat.group(1) +"_"+ mat.group(2),mat.group(4)); } if(mat2.find()) { //System.out.println("MAT2"); value = Float.parseFloat(mat2.group(3)); values[Integer.parseInt(mat2.group(1))][Integer.parseInt(mat2.group(2))] = value; } line = mrg.readLine(); } int anz = (range*range)*min/100; // Jeden Punkt der Matrix durchlaufen for(int i = 0; i < dimension ;i++) { for(int j = 0; j < dimension;j++) { // Startpunkt untere rechte Ecke int xdim = i+(range/2), ydim = j+(range/2), count = 0; // Umfeld float tmp; mini = new float[range*range]; for(int zz = 0; zz < mini.length; zz++){mini[zz] = (int)(dim*dim);}// Dummi for(;xdim > 0;xdim--) { for(;ydim > 0;ydim--) { if(xdim >= 0 && ydim >= 0 && xdim < dimension && ydim < dimension) { try { for(int x = 0; x < anz; x++) { if(mini[x] > values[xdim][ydim]) // Wenn kleinster Wert { tmp = mini[x]; mini[x] = values[xdim][ydim]; for(int y = x+1; y < anz; y++) { try { tmp = mini[y]; mini[y] = mini[y+1]; } catch(Exception e){y = anz;} } break; // Verlassen der FOR-Schleife } else if(mini[x] <= values[xdim][ydim] && mini[x+1] > values[xdim][ydim]) { tmp = mini[x+1]; mini[x+1] = values[xdim][ydim]; for(int y = x+2; y < anz; y++) { try { tmp = mini[y]; mini[y] = mini[y+1]; } catch(Exception e){y = anz;} } break; // Verlassen der FOR-Schleife } } } catch(Exception e){} } } } nu = 0; for(int fl = 0; fl < anz; fl++) { if(mini[fl] == dim*dim){mini[fl] = 0;} // Dummi nu = nu + mini[fl]; } // Mittelwert nu = (int)values[i][j]-(nu/anz); if(nu < 10){nu = 10;} // Wert in Stream schreiben if(erg.get(i+"_"+j) != null) { daten.println(i+"\t"+j+"\t"+(int)nu+".0\t"+erg.get(i+"_"+j)); // Leerzeichen entfernt! } } } daten.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }