Parameterdiskussion

disputator1991

Grünschnabel
Hallo zusammen,

ich bin relativ neu in Java und habe gleich zu Anfang eine mir doch sehr komplex erscheinende Aufgabe bekommen. Ich soll ein Programm in Java schreiben, dass aus einer Textfile Werte von bestimmten Parametern ausliest, die dann entsprechend einer bestimmten Standardabweichung nach dem Zufallsprinzip verändert und anschließend wieder in eine neue Textfile ausgeben werden sollen. Diese Textdatei enthält Unmengen an Daten die ich nicht brauche, darunter sind jedoch jeweils zwei Parameter von unterschiedlichen Bereichen "decay rate: dm: 0.12", "decay rate:df: 0.09", "production rate: dm: 0.14" oder "production rate: df: 0.04" angegeben sind und genau die sollen entsprechend variiert werden. Sprich in der neuen Datei sollten dann wenn die Standardabweichung meinetwegen 0.01 ist, z.B. "decay rate:dm: 0.011" und "production rate:dm: 0.15" sein. Was mir jetzt hauptsächlich Schwierigkeiten bereitet ist das individuelle Einlesen dieser Zahlen und die entsprechende Veränderung. Hat irgendjemand einen Tipp, ich hab schon zahlreiche Ansätze, aber keiner hat mich näher an die Lösung gebracht.


MfG
Dispu
 
Hi

etwas spät, aber der Grund, warum sich niemand meldet:
Keiner weiß, welche Ansätze du hast und wo das Problem liegt.
 
Hi,

ich habe es jetzt zumindest geschafft die Werte aus der textdatei individuell einzulesen und entsprechend einer prozentualen Standardabweichung abzuändern. In Java bekomme ich dann die entsprechenden Werte wieder zurück. Allerdings habe ich jetzt noch Schwierigkeiten damit, die alten Werte durch die neuen in der Textfile zu ersetzen und dann entsprechend in einer neuen File abzuspeichern.


Code:
public class TestProgram1 { 

    public static void main(String[] args) {
    
    
                {
                 try
                     {
                     File file = new File("C:\\Java Programing\\Java text files\\configfile.txt");
                     BufferedReader reader = new BufferedReader(new FileReader(file));
                     String line = "", oldtext = ""; 
                     while((line = reader.readLine()) != null) 
                         {
                         oldtext += line + "\r\n";
                        // oldtext1 += line1 + "\r\n"; 
                         
                         if(line.contains("decay")){      
                         
                             Double returnValue = null; 
                             int indexStartOfValue = line.lastIndexOf(":") + 1; 
                             String valuePart = line.substring(indexStartOfValue);
                             returnValue = Double.parseDouble(valuePart); 
                             
                            double a1=0;
                             double b1=0;
                             double min1=0;
                             double max1=0;
                             double x1 = returnValue; // value of decay rate
                             double p1= 0.1; // percentage of aberration from decay rate
                             
                             min1 = x1-p1*x1;
                            max1 = x1+p1*x1;
        
                            a1= max1-min1;
                            b1= min1/a1; 
        
                            Double NewDecayRate = (a1*(b1 + Math.random())); 
                            
                             System.out.println("New decay rate: " + NewDecayRate);
                             
                           
                         }
                         if(line.contains("production")){
                             Double returnValue = null; 
                             int indexStartOfValue = line.lastIndexOf(":") +1;
                             String valuePart = line.substring(indexStartOfValue); 
                             returnValue = Double.parseDouble(valuePart); 
                             
                            double a1=0;
                             double b1=0;
                             double min1=0;
                             double max1=0;
                             double x1 = returnValue; // value of production rate
                             double p1= 0.1; // percentage of aberration from production rate
                                 
                             min1 = x1-p1*x1;
                            max1 = x1+p1*x1;
            
                            a1= max1-min1;
                            b1= min1/a1; 
            
                            Double NewProductionRate = (a1*(b1 + Math.random())); 
                                
                            System.out.println("New production rate: " + NewProductionRate);
                                 
                         }
                       
                     }
                     
              
                     reader.close();
                     
              
                    
                    String newtext = oldtext.replace("production rate", "Produktionsrate");  //(ich hab mit diesem Befehl etwas herumexperimentiert, aber das hat bisher nicht wirklich funktioniert. Die Variablen lassen sich hier leider nicht einfügen, da sie hier nicht mehr definiert sind ......)
                
                    
                     FileWriter writer = new FileWriter("C:\\Java Programing\\Java text files\\newfile.txt");
                     writer.write(newtext); 
                     writer.close();
                    
                 }
                 catch (IOException ioe)
                     {
                     ioe.printStackTrace();
                 }
             }
        }
}

MfG
Dispu
 
Moin,

ich habe Deinen Code jetzt nur kurz überflogen und nicht im Detail nachvollzogen ...

Java:
String newtext = oldtext.replace("production rate", "Produktionsrate");  //(ich hab mit diesem Befehl etwas herumexperimentiert, aber das hat bisher nicht wirklich funktioniert. Die Variablen lassen sich hier leider nicht einfügen, da sie hier nicht mehr definiert sind ......)
Hier versuchst Du 'lediglich', innerhalb des Strings "oldtext" den Textteil "production rate" durch "Produktionsrate" zu ersetzen und dann da Geanze einen neuen Stringvariable zuzuweisen!
Wenn die gewünschten Variablen hier nicht gelten, musst Du entweder deren Sichtbarkeit erweitern oder diesen Aufruf verschieben (falls das möglich ist) !

Gruß
Klaus
 
Ich bin mir nicht ganz sicher, welche Variablen du da einfügen willst, aber das Problem lässt sich ganz leicht lösen: Du musst die Variabeldeklarationen VOR deine while-Schleife setzen. Also nehmen wir an, du willst die Variable a1 einfügen, dann muss
double a1;
vor der while-Schleife stehen.
 
Hi,

hab jetzt die Variablen vor die while-Schleife gesetzt und versucht mit diversen Ansätzen die alten Werte durch die neuen in der Textdatei zu ersetzen, aber leider funktioniert das bisher nicht. Er gibt mir zwar weiterhin die richtigen Werte in Java aus, nur in der neuen Textfile hat sich garnichts geändert. Hat vielleicht jemand eine Idee wie ich da weiterkommen könnte?

Code:
package day1.differentexercises;

import java.io.*;



public class TestProgram1 { 

	public static void main(String[] args) {
	
	
		        {
		         try
		             {
		             File file = new File("C:\\Java Programing\\Java text files\\configfile.txt");
		             BufferedReader reader = new BufferedReader(new FileReader(file));
		             String line = "", oldtext = ""; 
		             Double returnValue = null;  
		             int indexStartOfValue = 0; 
		             String valuePart = "";     
		           //  int indexStartOfValue = line.lastIndexOf(":") +1; 
		             while((line = reader.readLine()) != null) // && (line1 = reader.readLine()) != null)
		                 {
		                 oldtext += line + "\r\n";
		                // oldtext1 += line1 + "\r\n"; 
		                 
		                 if(line.contains("decay")){       // such nach Wort decay in Textfile
		                	// System.out.println("It does"); Gibt "It does" aus, wenn decay gefunden wurde
		                	 // Double returnValue = null; 
		                	 indexStartOfValue = line.lastIndexOf(":") + 1; // sucht : in Textfile und nimmt dahinter stehende Zahl auf (in dem Fall in der Zeile wo decay steht)
		                	 valuePart = line.substring(indexStartOfValue); // vielleicht hier der Wert 
		                	 returnValue = Double.parseDouble(valuePart); // nimmt Wert als Variable vom Typ double auf 
		                	 
		                	double a1=0;
		             		double b1=0;
		             		double min1=0;
		             		double max1=0;
		             		double x1 = returnValue; // value of parameter1
		             		double p1= 0.1; // percentage of aberration from parameter1
		             		
		             		min1 = x1-p1*x1;
		                    max1 = x1+p1*x1;
		
		                    a1= max1-min1;
		                    b1= min1/a1; 
		
		                	Double NewDecayRate = (a1*(b1 + Math.random())); 
		                    
		                	 System.out.println("New decay rate: " + NewDecayRate);
		                	 
		                	// int indexStartOfValue = line.lastIndexOf(":") + 1;
		         			//String valuePart = line.substring(indexStartOfValue);
		         			//returnValue = Double.parseDouble(valuePart);
		                 }
		                 /*if(line.contains("production")){
		                	 Double returnValue = null; 
		                	 int indexStartOfValue = line.lastIndexOf(":") +1;
		                	 String valuePart = line.substring(indexStartOfValue); 
		                	 returnValue = Double.parseDouble(valuePart); 
		                	 
		                	double a1=0;
			             	double b1=0;
			             	double min1=0;
			             	double max1=0;
			             	double x1 = returnValue; // value of parameter1
			             	double p1= 0.1; // percentage of aberration from parameter1
			             		
			             	min1 = x1-p1*x1;
			                max1 = x1+p1*x1;
			
			                a1= max1-min1;
			                b1= min1/a1; 
			
			                Double NewProductionRate = (a1*(b1 + Math.random())); 
			                    
			                System.out.println("New production rate: " + NewProductionRate);
			                	 
		                 }*/
		               
		             }
		             
		      
		             reader.close();
		             
		        
		            
		       
		             
		             
		          
		             
		         //String newindexStartOfValue = Integer.toString(indexStartOfValue);
		         String newreturnValue = Double.toString(returnValue);
		             
		           
		             //char c = (char)indexStartOfValue;
		             //char d = (char)valuePart; 
		            // char d = valuePart.charAt(0);

		         
		            String newtext = oldtext.replaceAll(valuePart, newreturnValue);  // statt newtext valuePart
		            //String replace(char oldChar, char newChar); 
		             
		          
		           //  String content = new String(Files.readAllBytes(path), charset);
		           //  oldtext = oldtext.replaceAll(newindexStartOfValue, newreturnValue);
		           //  Files.write(path, content.getBytes(charset));
		             
		             FileWriter writer = new FileWriter("C:\\Java Programing\\Java text files\\newconfigfile.txt");
		             writer.write(newtext); // hier vorher newtext
		             writer.close();
		            
		         }
		         catch (IOException ioe)
		             {
		             ioe.printStackTrace();
		         }
		     }
		}
}
 
Hi,

du ersetzt bei dem oldtext mit der falschen Variable zudem muss das ersetzen in der while schleife erfolgen, da verschiedene Werte mit verschiedenen Werten ersetzt werden:

Java:
package day1.differentexercises;

import java.io.*;
 
 
 
public class TestProgram1 { 
 
    public static void main(String[] args) {
    
    
                {
                 try
                     {
                     File file = new File("test_input.txt");
                     BufferedReader reader = new BufferedReader(new FileReader(file));
                     String line = "", oldtext = ""; 
                     double returnValue = 0;  
                     int indexStartOfValue = 0; 
                     String valuePart = "";   
                     double newDecayRate = 0;
                   //  int indexStartOfValue = line.lastIndexOf(":") +1; 
                     while((line = reader.readLine()) != null) // && (line1 = reader.readLine()) != null)
                         {
                         oldtext += line + "\r\n";
                       
                         
                         if(line.contains("decay")){     

                             indexStartOfValue = line.lastIndexOf(":") + 1; // sucht : in Textfile und nimmt dahinter stehende Zahl auf (in dem Fall in der Zeile wo decay steht)
                             valuePart = line.substring(indexStartOfValue); // vielleicht hier der Wert 
                             returnValue = Double.parseDouble(valuePart); // nimmt Wert als Variable vom Typ double auf 
                             
                            double a1=0;
                            double b1=0;
                            double min1=0;
                            double max1=0;
                            double x1 = returnValue; // value of parameter1
                            double p1= 0.1; // percentage of aberration from parameter1
                            
                            min1 = x1-p1*x1;
                            max1 = x1+p1*x1;
        
                            a1= max1-min1;
                            b1= min1/a1; 
        
                            newDecayRate = (a1*(b1 + Math.random())); 
                            
                             System.out.println("New decay rate: " + newDecayRate);
                             oldtext = oldtext.replaceAll(valuePart.trim(), String.valueOf(newDecayRate));

                         }
                     }
                     reader.close();                     
                     FileWriter writer = new FileWriter("test_output.txt");
                     writer.write(oldtext); // hier vorher newtext
                     writer.close();
                    
                 }
                 catch (IOException ioe)
                     {
                     ioe.printStackTrace();
                 }
             }
        }
}

Viele Grüße
Youza
 
Hi,

danke für die vielen Tipps, haben wirklich sehr geholfen. Mein Code ist soweit jetzt eigentlich fast fertig, da das Programm jetzt tatsächlich alle gesuchten Werte aus der alten Textfile ausliest und anschließend verändert in eine neue Textfile einfügt. Allerdings gibt es da noch ein kleines Problem. Obwohl ich in Java alle alten Werte (und die entsprechend dazugehörigen neuen Werte) richtig angezeigt bekomme fügt er diese nur sporadisch in die File ein. Häufig erhalte ich z.B. "decay rate:dpC:0.0.0.0.00222", obwohl er mir in Java den richtigen Wert anzeigt. Ich hab unten mal den Code eingefügt und wäre dankbar, wenn mir da nochmal jemand weiterhelfen könnte.

MfG
Dispu

Code:
package day1.differentexercises;

import java.io.*;
import java.text.NumberFormat;
import java.text.ParseException;


public class TestProgram3 {
	
		    public static void main(String[] args) throws ParseException {
		    
		    
		                {
		                 try
		                     {
		                     File file = new File("D:\\sim_model\\Hes7_DN\\configfile.txt");
		                     BufferedReader reader = new BufferedReader(new FileReader(file));	       
		                     String line = "", oldtext = "";
		                     int indexStartOfValue = 0;
		                     String valuePart = null;
		                     double returnValue = 0;
		               		                   
		                     
		                     while((line = reader.readLine()) != null) 
		                         {
		                    	 
		                         oldtext += line + "\r\n";
		                         
		                        		                    		                    
		                        if(line.contains("production rate") || line.contains("decay rate")){	
		                         
		                            indexStartOfValue = line.lastIndexOf(":") + 1; 
		                            valuePart = line.substring(indexStartOfValue); 
		                            // returnValue = java.lang.Double.parseDouble(valuePart); 
		                            
		                            NumberFormat nf = NumberFormat.getInstance();
		                            returnValue = nf.parse(valuePart).doubleValue();
		                            
		                            returnValue = Math.round(returnValue*100)/100000.0;
		                            

		                            
		                             double a=0;
		                             double b=0;
		                             double min=0;
		                             double max=0;
		                             double x = returnValue; // value of old decay rate
		                             double p= 0.1; // percentage of aberration from decay rate
		                            
		                             
		                            min = x-p*x;
		                            max = x+p*x;
		        
		                            a= max-min;
		                            b= min/a; 
		        
		                            
		                          double newDecayRate = (a*(b + Math.random())); 
		                            
		                  
		                            newDecayRate = Math.round(newDecayRate*10000)/10000.0;
		                            
		                         
		                          
		                             System.out.println("Old rate: " + returnValue);
		                             System.out.println("New rate: " + newDecayRate);
		                             
		                           oldtext = oldtext.replaceAll(valuePart.trim(), String.valueOf(newDecayRate));
		                        	 
		                     
			                         } 
		                         		                     
		                         }
		                     
		                     reader.close(); 

		               		                   		     		                   
		                   File newfile = new File("D:\\sim_model" + File.separator + "Hes7_DN", "newconfigfile.txt"); 
		                   
		                   if (!newfile.exists()) newfile.createNewFile();

		                   FileWriter writer = new FileWriter(newfile); 
		              
		                   writer.write(oldtext); 	
		                   		                   		                	                   
		                   writer.close();
		                   
		    
		                   		             
		                 }
		                 catch (IOException ioe)
		                     {
		                     ioe.printStackTrace();
		                 }
		             }
		        }
	}
 
Zuletzt bearbeitet:
Zurück