Textfile durchlaufen und ersetzen

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
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:
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
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:
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ß.
 

fehlerfinder

Bekanntes Mitglied
Was erwartet denn die Funktion "Parser14.parse()" für einen Parameter-Typ? Ich vermute mal (da du es nicht geschrieben hast ;-) ), dass die auftretende Fehlermeldung die aus dem catch-Block ist!?

Ich glaube, du verquickst da zwei Dinge miteinander: einmal das zahlenmäßige Ausrechnen der Formeln, das du natürlich benötigst, um die Variablen im String ersetzen zu können und dann noch die gerade schon genannte (String-)Ersetzung, die einfach nur der leserlichen Anzeige deiner Formeln dient.

Konkret:
Du setzt den String "sigma" gleich dem String (1.0/5.0 + 2.0/6.0 + 10.0/4.0). Um dein sigma_v berechnen zu können, benötigst du aber den Zahlwert von sigma, also 3.03333...

Eine mögliche Lösung könnte sein, den Formelparser zu erweitern, indem bereits bekannte Werte z.B. aus einem Hashtable geholt werden.

Code:
Hashtable<String, float> konstanten = new Hashtable<String, float>();
konstanten.put("sigma", 3.033);

Dein Parser prüft dann, ob z.B. "sigma" im Hash vorhanden ist und setzt dann den entsprechenden Wert in die Formel ein.
 

magic_halli

Bekanntes Mitglied
as erwartet denn die Funktion "Parser14.parse()" für einen Parameter-Typ?
...sie erwartet einen String. Das ist hier der rechte Teil der Gleichung. Darin dürfen aber nur Zahlenwerte vorkommen - und keine Wörter (außer natürlich pow, sqrt, sin usw.).

Der Formelparser ist hier aus dem Forum (von Beni geschrieben) :wink: . Darin will/kann ich aber nichts mehr ändern. Wenn, dann ändere ich nur was an meinem Code.
Ich speichere nach jeder Berechnung einer Formel den String (z.B. sigma) und den entspr. Zahlenwert in einer ArrayList ab.
Nur hab ich wahrscheinlich vom Ablauf her noch nicht den richtigen Algorithmus gefunden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Textfile mit StringTokenizer einlesen und sortiert ausgeben Java Basics - Anfänger-Themen 8
F Textfile auslesen und durchsuchen Java Basics - Anfänger-Themen 13
N User Eingabe mit Zeile aus TextFile vergleichen Java Basics - Anfänger-Themen 13
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
A Textfile wird nur unvollständig eingelesen Java Basics - Anfänger-Themen 4
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
L Textfile mit BufferReader einlesen Java Basics - Anfänger-Themen 4
A Textfile verarbeiten. Java Basics - Anfänger-Themen 15
M textfile mit java auslesen Java Basics - Anfänger-Themen 4
mwildam Textfile lesen und schreiben - so viele Möglichkeiten Java Basics - Anfänger-Themen 5
M if-else-endif in Textfile erkenne Java Basics - Anfänger-Themen 8
M in Textfile Strukturen erkennen Java Basics - Anfänger-Themen 5
M in Textfile Textphrase ersetzen Java Basics - Anfänger-Themen 13
P Textfile einlesen Java Basics - Anfänger-Themen 8
S Ringbuffer-Speicher mit einem Textfile Java Basics - Anfänger-Themen 2
H Mit JSP in ein Textfile schreiben Java Basics - Anfänger-Themen 2
H Header von Textfile bearbeiten Java Basics - Anfänger-Themen 14
G Stringmaipulation, Textfile einelsen und Suchen und Ersetzen Java Basics - Anfänger-Themen 12
M Textfile in einer JTextArea anzeigen Java Basics - Anfänger-Themen 3
R Textfile vs Serialized Objects Java Basics - Anfänger-Themen 4
A Abspeichern von werten in einer textfile. Java Basics - Anfänger-Themen 2
G wie 'tabs' und 'zeilenumbruch' in textfile einbauen? Java Basics - Anfänger-Themen 5
G Textfile bearbeiten und speichern Java Basics - Anfänger-Themen 3
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
TimoN11 Array -> Schleife wieder von vorne durchlaufen lassen Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
E Baum pfadweise durchlaufen Java Basics - Anfänger-Themen 11
S Array X-mal durchlaufen und dann N-mal durchlaufen Java Basics - Anfänger-Themen 20
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
I Methoden Schleife immer wieder durchlaufen lassen Java Basics - Anfänger-Themen 15
S Rekursives Durchlaufen eines Verzeichnisses - AccessDeniedException behandeln Java Basics - Anfänger-Themen 1
T Objekt-Arrays mit einer Schleife durchlaufen/ausgeben Java Basics - Anfänger-Themen 2
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
B OOP Liste durchlaufen Java Basics - Anfänger-Themen 12
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
C Laufzeitverhalten beim zeilenweise durchlaufen eines 2 dimensional array Java Basics - Anfänger-Themen 6
W If_Bedingung in statischer Methode beim zweiten Mal nicht durchlaufen Java Basics - Anfänger-Themen 14
L Klassen nacheinander durchlaufen? Java Basics - Anfänger-Themen 5
A do while Schleife wird 2 mal durchlaufen Java Basics - Anfänger-Themen 3
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
K Stammbaum durchlaufen (Iteration etc) Java Basics - Anfänger-Themen 9
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
R Switch: Nach durchlaufen des Case wieder zum Menü Java Basics - Anfänger-Themen 3
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
A Array wird nicht durchlaufen Java Basics - Anfänger-Themen 10
A Treeset per For-Schleife durchlaufen Java Basics - Anfänger-Themen 2
K Objektbaum durchlaufen Java Basics - Anfänger-Themen 7
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
A Datentypen Iterator von hinten nach vorne durchlaufen Java Basics - Anfänger-Themen 4
M Zweidimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
C dynamische JTextFields durchlaufen Java Basics - Anfänger-Themen 5
J äußere for schleife wird nur einmal durchlaufen Java Basics - Anfänger-Themen 8
T Datentypen Verschachtelte Map durchlaufen Java Basics - Anfänger-Themen 4
N Map Durchlaufen Java Basics - Anfänger-Themen 20
R Fehler in Rekursion (Unterordner durchlaufen) Java Basics - Anfänger-Themen 2
J Problem Arraylist durchlaufen Java Basics - Anfänger-Themen 7
K methode wird nur einmal korrekt durchlaufen Java Basics - Anfänger-Themen 4
B Array durchlaufen und sortieren Java Basics - Anfänger-Themen 9
N HashMap mit Iterator durchlaufen Java Basics - Anfänger-Themen 11
P Klassen-konstanten durchlaufen Java Basics - Anfänger-Themen 9
M Durchlaufen von Sets Java Basics - Anfänger-Themen 11
H Monat durchlaufen Java Basics - Anfänger-Themen 2
W Textfiles durchlaufen Java Basics - Anfänger-Themen 11
M Durchlaufen eines Verzeichnisbaums Java Basics - Anfänger-Themen 5
G Rekursion mit Return - Baum durchlaufen Java Basics - Anfänger-Themen 4
F Objektnamen mit Schleife durchlaufen. Java Basics - Anfänger-Themen 10
G [Threads]: Mit mehreren Threads 1 ArrayList durchlaufen Java Basics - Anfänger-Themen 19
G HashMap durchlaufen und alle keys mit values ausgeben Java Basics - Anfänger-Themen 4
M Variablen einer Klasse zu durchlaufen möglich? Java Basics - Anfänger-Themen 5
K 2D Array spaltenweise durchlaufen Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
M textboxen mit schleife durchlaufen. Java Basics - Anfänger-Themen 5
G Alle Componente eines JFrame durchlaufen Java Basics - Anfänger-Themen 3
P Schleife wird falsch durchlaufen!? Java Basics - Anfänger-Themen 3
H HashMap durchlaufen Java Basics - Anfänger-Themen 4
M Verzeichnisse rekursiv durchlaufen und dann RegEx Java Basics - Anfänger-Themen 6
J Durchlaufen von Vektoren Java Basics - Anfänger-Themen 14
G Array mit Schleife durchlaufen - guter Stil? Java Basics - Anfänger-Themen 20
K durchlaufen einer methode zählen Java Basics - Anfänger-Themen 15
M for-Schleife und Variablen automatisch durchlaufen Java Basics - Anfänger-Themen 2
W Baum durchlaufen Java Basics - Anfänger-Themen 3
M String mit For Each durchlaufen Java Basics - Anfänger-Themen 4
E liste rekursiv durchlaufen? Java Basics - Anfänger-Themen 3
S NameValuePair durchlaufen Java Basics - Anfänger-Themen 4
D Verzeichnisse rekursiv durchlaufen Java Basics - Anfänger-Themen 3
M HashMap durchlaufen: Was stimmt nicht? Java Basics - Anfänger-Themen 7
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
obiwanke Ziffern durch ASCII Character ersetzen Java Basics - Anfänger-Themen 8
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
W Best Practice Tabulatoren verschiedener Länge ersetzen Java Basics - Anfänger-Themen 8
I String ersetzen, der Inhalt enthält Java Basics - Anfänger-Themen 4
T Zahl in Array ersetzen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben