Hi,
ich habe ein Textfile, welches ich zeilenweise durchgehe. In einem ersten Schritt habe ich bereits einige bekannte Strings darin mit Zahlenwerten ersetzt. Nun sieht das File so aus:
Im nächsten Schritt gehe ich dieses wieder von Anfang an durch und schicke die rechte Seite der Gleichung in einen Formelparser und rechne mir somit sigma und tau aus. Diese Ergebnisse speichere ich in einer ArrayList(String, double) ab.
Dann will ich mir sigma_v ausrechnen, muss dazu aber erst das eben errechnete sigma und tau einsetzen, um es in den Formelparser zu schicken usw.
Ich weiß aber leider nicht recht, wie ich quasi zur Laufzeit mir ein Ergebnis ausrechne, es dann aber sofort in der nächsten (oder folgenden) Zeile(n) einsetze und wieder ausrechnen lasse. Ich erhalte immer eine Fehlermeldung vom Formelparser, dass die Formel nicht korrekt ist - das ist auch logisch, da ich eine nicht aufgelöste Formel (enthält noch Worte wie sigma und tau) hineinschicke!
Hier einfach mal der bisherige Code:
Mein Problem ist einfach, dass ich nicht sicher bin, ob das vom Prinzip her funktionieren würde, oder ob ich einige (wichtige) Sachen evtl. nicht bedacht habe.
Was meint ihr dazu - wie würdet ihr sowas angehen?
Danke und Gruß.
ich habe ein Textfile, welches ich zeilenweise durchgehe. In einem ersten Schritt habe ich bereits einige bekannte Strings darin mit Zahlenwerten ersetzt. Nun sieht das File so aus:
Code:
sigma = (1.0/5.0 + 2.0/6.0 + 10.0/4.0)
tau = (3.0/7.0 + 8.0/4.0 + 9.0/4.0)
sigma_v=sqrt(sigma^2+3*tau^2)
s_b=4.0/sigma_v
s_bv=6.0/sigma_v
Dann will ich mir sigma_v ausrechnen, muss dazu aber erst das eben errechnete sigma und tau einsetzen, um es in den Formelparser zu schicken usw.
Ich weiß aber leider nicht recht, wie ich quasi zur Laufzeit mir ein Ergebnis ausrechne, es dann aber sofort in der nächsten (oder folgenden) Zeile(n) einsetze und wieder ausrechnen lasse. Ich erhalte immer eine Fehlermeldung vom Formelparser, dass die Formel nicht korrekt ist - das ist auch logisch, da ich eine nicht aufgelöste Formel (enthält noch Worte wie sigma und tau) hineinschicke!
Hier einfach mal der bisherige Code:
Code:
...
Parser14 parser14 = new Parser14();
ArrayList alZwischenErg = new ArrayList();
StringBuffer strBuffer = new StringBuffer();
File fi = new File(path + filename);
if(fi.exists()){
BufferedReader buff = new BufferedReader(new FileReader(path + filename));
//jede Zeile durchgehen
//Startmarke gefunden...
while ( (line = buff.readLine()) != null) {
String erg;
String formel;
//linker Teil der Gleichung - Zwischenergebnis
erg = line.substring(0, line.indexOf("="));
//rechter Teil der Gleichung ab '='
formel = line.substring(line.indexOf("=")+1, line.length());
//formel in Parser schicken, ausrechnen lassen und in alZwischenErg speichern
try{
//in ergebnis steht das ausgerechnete Ergebnis der Gleichung, bspw. sigma oder tau
ergebnis = parser14.parse( formel );
}catch(IllegalArgumentException err){
//Parser wirft Exception, da in Formel noch nicht alles ersetzt wurde!
System.out.println("der Formelparser kommt mit der Eingabe nicht klar" + "\n");
}
//in ArrayList speichern
alZwischenErg.add( new MyParameters( erg ,ergebnis.doubleValue() ) );
//hier die Strings mit den entspr. Werten ersetzen
Iterator iter = alZwischenErg.iterator();
while(iter.hasNext()){
MyParameters data = (MyParameters) iter.next();
String sName = data.get_sParam();
double term = data.get_dParamValue();
String liTeil = line.substring(0, line.indexOf("=")+1);
String reTeil = line.substring(line.indexOf("=")+1, line.length());
if( line.contains(sName) == true){
line = liTeil + reTeil.replaceAll( sName, (new Double(term).toString()) );
}
}
strBuffer.append(line + "\n");
}
}
//hier dann noch den neuen strBuffer in ein neues Textfile schreiben, in dem dann alle vorkommenden Gleichungen ausgerechnet
//und die Zwischenergebnisse jeweils in den darauffolgenden Zeilen eingesetzt sind
Mein Problem ist einfach, dass ich nicht sicher bin, ob das vom Prinzip her funktionieren würde, oder ob ich einige (wichtige) Sachen evtl. nicht bedacht habe.
Was meint ihr dazu - wie würdet ihr sowas angehen?
Danke und Gruß.