| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: Jlink: Textfile durchgehen und ersetzen (665 mal gelesen)
|
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 01. Nov. 2007 07:30 <-- editieren / zitieren --> Unities abgeben:
Hi, ich schreibe die Beziehungen in ein Textfile im Arbeitsverzeichnis. Dann will ich in diesem Beziehungs-File gewisse Parameter in den Formeln durch ihre Zahlenwerte aus der Parameterliste ersetzen. Die Zuordnungen, welcher konkrete Zahlenwert hinter einem Paramter steckt, habe ich bereits in einer ArrayList gespeichert (diese Wertepaare darin sind korrekt). Jetzt gehe ich einfach jede Zeile des Beziehungs-File durch und vergleiche, ob darin ein Parameter aus der ArrayList enthalten ist - wenn ja, dann will ich einfach den entsprechenden Zahlenwert im Beziehungs-File einsetzen. Natürlich erzeuge ich dabei parallel ein neues Beziehungsfile mit den veränderten und unveränderten Zeilen, damit ich dieses am Schluß wieder in ProE einlesen kann, um es für die weitere Arbeit zu benutzen. Allerdings funktioniert das Ersetzen der Parameter durch die kongreten Zahlenwerte irgendwie nicht mit Jlink. Als separates Javaprogramm getestet klappt das 1a! Hier mal der Code:
Code:
//in alParams stehen bereits alle Paramter und Zahlenwerte drin ArrayList alParams = getParameters(sParam, model); String line =""; BufferedReader buff = new BufferedReader(new FileReader(path + "relations.txt")); //jede Zeile der Textdatei durchgehen while ( (line = buff.readLine()) != null) { Iterator iter = alParams.iterator(); while(iter.hasNext()){ MyParameters data = (MyParameters) iter.next(); String sName = data.get_sParam(); //ist der Paramtername double dValue = data.get_sParamValue(); //ist der Paramterwert if( line.contains(sName) == true ){ JOptionPane.showMessageDialog(null, "Zeile enthält ArrayList-Eintrag" +sName); line = line.replaceAll(sName, (new Double(dValue)).toString()); } } strBuffer.append(line + "\n"); } //löscht evtl. exist. Textfile, bevor es neu gefüllt wird File f = new File(path + "relations_changed.txt"); if(f.exists()){ f.delete(); } //schreibt verändertes Orginalfile in neues Beziehungsfile (für import verwendet) BufferedWriter buff2 = new BufferedWriter(new FileWriter(path + "relations_changed.txt")); buff2.write(strBuffer.toString()); buff2.close();
Irgendwie springt das Programm nicht in die if-Bedingung der while-Schleife rein - Ich bekomme garnicht die JOptionPane-Mitteilung angezeigt, obwohl diese kommen sollte!!! Nur warum nicht??? Diesen Code in einem nicht-Jlink-Programm getestet und es funktioniert einwandfrei!!! Hab ich vielleicht irgendwo nen Fehler???Danke und Gruß. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fly Mitglied Leitender Angestellter
Beiträge: 176 Registriert: 02.08.2004 WF3 M230 Windchill 9.1 FCS R630 WinXP SP3
|
erstellt am: 05. Nov. 2007 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Hallo! Hatte mal ein ähnliches Problem (2 Strings vergleichen: Mit Pro-E hat er obwohl sie gleich waren immer false ausgegeben) Ich würde deine ArrayList in eine HashMap schreiben (Param, PraramValue) dann brauchst du die while schleife in der while-Schleife nicht sondern kannst direkt in der Hashmap suchen. Bei mir hat das damals funktioniert. Was er auch nicht sogerne hat ist wenn man einen Paramter ständig überdeckt: In der while schleife : String sName = data.get_sParam(); Versuch mal den Parameter außerhalb der while schleife zu deklarieren und dann erst zu überschreiben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 06. Nov. 2007 09:42 <-- editieren / zitieren --> Unities abgeben:
Danke für den Tip. Aber selbst wenn ich meine Daten aus der ArrayList in eine HashMap speichere, spare ich mir doch deshalb nicht die while-Schleife, da ich Daten aus einer HashMap doch auch nur so iterieren kann, oder nicht?! Beispiel: Code:
HashMap map = new HashMap(); //füllt mir ein HashMap mit Daten map = countModel(curSession, model, map);//HashMap auslesen, wenn diese nicht leer ist if(map.isEmpty() == false){ Iterator iter = map.keySet().iterator(); while(iter.hasNext()){ String name = (String) iter.next(); Integer menge = (Integer)map.get(name); } }
Wie soll ich denn sowas denn sonst ohne while-Schleife lösen können?Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|