Parameterdiskussion in Java

disputator1991

Neues Mitglied
Hallo zusammen,

ich bin noch relativ unerfahren im Umgang mit Java und habe gleich zu Anfang meiner Arbeit mit dieser Programmiersprache 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 benötige, darunter sind jedoch jeweils zwei Parameter von jeweils unterschiedlichen Genen (z.B. "decay rate: dm: 0.12", "decay rate:df: 0.09", "production rate: dm: 0.14" oder "production rate: df: 0.04") angegeben und genau die sollen entsprechend variiert werden. In der neuen Textdatei sollten dann wenn die Standardabweichung bswp. 0.01 ist, z.B. "decay rate:dm: 0.011" und "production rate:dm: 0.15" sein, was auch für die anderen Gene entsprechend dem jeweiligen Anfangswert gelten sollte. Die übrigen Daten in der Textfile sollten unverändert wieder ausgegeben werden. Wie man Strings aus Textfiles ausliest und verändert wieder ausgibt ist mir klar, was mir hauptsächlich Schwierigkeiten bereitet ist das individuelle Einlesen dieser Zahlen, die stets immer hinter den gesuchten Strings stehen. Ich habe mir bereits dutzende Tutorials auf Youtube angesehen und zahlreiche Anleitungen im Internet durchgelesen, doch ich komme der Lösung scheinbar einfach nicht näher.

Wäre über jeden Tipp oder Ansatz, der mir bei der Lösung dieses Problems helfen könnte, dankbar.


MfG
Dispu

Hab die entsprechende Textfile angehängt, falls sich jemand ein genaueres Bild machen möchte.
 

Anhänge

Zuletzt bearbeitet:
Hallo disputator1991,

aha, Du weißt wie man Strings aus Textdateien einliest und wieder herausschreibt.

Auch zeilenweise?

Dafür benutzt man den BufferedReader.

Am besten benutzt Du eine ArrayList<String> zum Vermerken der einzelnen Zeilen.

Für die Zeilen-Prefixe 'decay rate: dm:' usw würde ich Dir zum Anlegen von Konstanten raten:

Java:
static final String DECAY_RATE_DM_PREFIX = "decay rate: dm:";

Natürlich außerhalb einer Methode, als statische Member deiner Klasse.

Dann eine Schleife über die ArrayList.

Prüfen des Anfangs der Zeile mit

Java:
if ( list.get( i ).startsWith( *_PREFIX ) ) {
   ...
}

Natürlich für alle Deine Prefixe.

Abschneiden des führenden String-Teils mit substring

Java:
String restStr = list.get( i ).substring( *_PREFIX.length() );

Eventuell noch trim, aber Leerzeichen schienen in der Beispiel-Datei nicht drin zu sein.

Umwandeln des Rest-Strings in eine Zahl mit BigDecimal:

Java:
BigDecimal number = new BigDecimal( restStr );

Den Grund für BigDecimal solltest Du herausbekommen,
wenn Du Dich mit den Problemen der Zahlendarstellung
in Computern beschäftigst.

Dann rechnen.

Den vorherigen Zeilen-String ersetzen:

Java:
list.set( i , *_PREFIX + number );

Der Plus-Operator wandelt in Java alles in Strings um,
wenn Strings im Ausdruck vorkommen.

Und dann zurückschreiben.

Aber das kannst Du ja bereits.

Viel Erfolg
 
Zuletzt bearbeitet:
Hallo nochmal,

Vielleicht hätte ich gleich zu Anfang meinen bisherigen Code beifügen sollen. Ich bin jetzt zumindest schon soweit, alle gesuchen Werte in Java einzulesen und entsprechend der vorgegebenen prozentualen Abweichung zu variieren. In Java bekomme ich die richtigen Werte angezeigt. Allerdings ersetzt er mir diese Werte nicht korrekt in die neue Textfile. In dem hier gezeigten Code, wollte ich sehen welche Werte er mir in die Textfile einsetzt, habe also einfach "production rate" ersetzen lassen. Allerdings erhalte ich immer NaN. Hat jemand eine Idee wie ich meinen Code modifizieren könnte um das Problem zu umgehen?

MfG
Dispu

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 = "", newtext = "";
		             Double returnValue = null; 
	
		             while((line = reader.readLine()) != null) // && (line1 = reader.readLine()) != null)
		                 {
		                 oldtext += line + "\r\n";
		          
		                 
		                 if(line.contains("decay")){       // such nach Wort decay in Textfile
		                	
		                	 // 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 NewDecayRate = (a1*(b1 + Math.random())); 
		                    
		               
		                	
		                	 System.out.println("New decay rate: " + NewDecayRate);
		                	 
		          
		                	 
		                	String NewDecayRate1 = Double.toString(NewDecayRate);
		                	
		                	
		                	 
		          
				             
			                 newtext = oldtext.replaceAll("production rate", NewDecayRate1);
		                	
		                 }
		                 
		             
		                         
		             }
		             
		             
		             reader.close();
		           
		             
		            
		             
		             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();
		         }
		     }
		}
}
 

Zurück
Oben