Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Pro ENGINEER
  Jlink: Textfile durchgehen und ersetzen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von magic_halli an!   Senden Sie eine Private Message an magic_halli  Schreiben Sie einen Gästebucheintrag für magic_halli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von fly an!   Senden Sie eine Private Message an fly  Schreiben Sie einen Gästebucheintrag für fly

Beiträge: 176
Registriert: 02.08.2004

WF3 M230
Windchill 9.1
FCS R630
WinXP SP3

erstellt am: 05. Nov. 2007 17:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für magic_halli 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von magic_halli an!   Senden Sie eine Private Message an magic_halli  Schreiben Sie einen Gästebucheintrag für magic_halli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz