Autor
|
Thema: mehrere Attribute durchsuchen (1156 mal gelesen)
|
Buexxxe Mitglied Student
 Beiträge: 9 Registriert: 03.12.2008
|
erstellt am: 04. Mrz. 2009 16:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich habe mal eine Frage bezüglich des Durchsuchen von einem BE nach Attributen. Folgende Situation: Meinem BE habe ich benutzerdefiniere Attribute zugewiesen. Sie heißen "Code001" und werden bis bis "Code140" durchlaufen. Sie sind vom Typen "String" und dort befindet sich eine Information. Diese Information möchte ich nun abrufen. Da ich die Codes ja durchnummeriert habe, könnte ich mir vorstellen, dass man eine Methode schreiben kann, in der die Attritube alle von Code001 bis Code140 durchlaufen werden und dabei soll ein bestimmter Z.B. ABC gesucht werden. Geht sowas in der Art??? Ich möchte quasi in einer Methode später überprüfen: durchsuche das BE nach allen "Codes00x" mit x als Laufindex nach dem String "ABC", falls vorhanden, dann mache dies und das. Über einen Tipp oder Link im Forum wäre ich dankbar. MfG Buexxxe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Homer Simpson Mitglied
 
 Beiträge: 345 Registriert: 14.09.2005
|
erstellt am: 05. Mrz. 2009 09:06 <-- editieren / zitieren --> Unities abgeben:          Nur für Buexxxe
so gehts: Code: is i : integer; name : string; do for i := 1 to 140 loop name := to_str(i); name := sprint("Code", copy("00",1,3-strlen(name)), name); print @.holeAttribut(name); next; end;
Es wäre übrigens einfacher, wenn die Namen keine führenden Nullen hätten. Außerdem würde ich in Erwägung ziehen, die Daten in einem einzigen Attribut vom Datentyp Tabelle zu halten.[Diese Nachricht wurde von Homer Simpson am 05. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Buexxxe Mitglied Student
 Beiträge: 9 Registriert: 03.12.2008
|
erstellt am: 05. Mrz. 2009 09:22 <-- editieren / zitieren --> Unities abgeben:         
moin homer, besten dank schon mal für die fixe antwort. ich habe zwei wege in betracht gezogen: einmal den, den ich hier gepostet habe, der andere sieht so aus, dass ich einen (ellen-)langen string mit sämtlichen codes habe, die nur in einem attibut (namens: code) sind. der string sieht ungefähr so aus "abc_def_ghi_usw". ne methode die 3er päckchen rauszu ziehen und dann zu verarbeiten hab ich auch, jedoch gibt es auch teilweise versch. abhängigkeiten, d.h. bei dem code "abc" würde aktion a ausgelöst werden, aber bei "abc" und "def" passiert was anderes. und das weiß ich nicht so genau zu trennen. da dacte ich mir, wenn ich jeden einzelnen code ein attribut zuordne, könnte ich das vielleicht besser handlen!??! wie meintest du das denn mit der tabelle?? besten dank nochmal
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ereignisverwalter Mitglied Simulant
 Beiträge: 7 Registriert: 04.03.2009
|
erstellt am: 05. Mrz. 2009 12:35 <-- editieren / zitieren --> Unities abgeben:          Nur für Buexxxe
|
Buexxxe Mitglied Student
 Beiträge: 9 Registriert: 03.12.2008
|
erstellt am: 05. Mrz. 2009 13:58 <-- editieren / zitieren --> Unities abgeben:         
hallo ereignisverwalter, aber ist dann dann nicht egal, ob ich die Werte aus der Tabelle oder aus allen Attributen einzeln rausziehe??? Hab jetzt ein kleines anderes Problem. Das mit der Methode, die Homer gezeigt hatte ist schon gut. Muss das ganze jetzt noch erweitern, so dass ich mit den Werten ne Aktion auslöse. Das klappt auch, so zum Beipiel: is i : integer; name : string; do for i := 1 to 137 loop name := to_str(i); name := sprint("Code", copy("00",1,3-strlen(name)), name); print @.holeAttribut(name); if @.holeAttribut(name) = "Z42" then @.umlagern(Rolle2); end; next; end; Das klappt wie gesagt. Jetzt hab ich aber ne code-abhängigkeit, z.b. wenn Z42 und Z01, dann soll was anderes passieren, als im obigen beispiel. wahrscheinlich muss ich doch jetzt ne zweite variable erstellen, den ersten Wert (Z42) hineinschreiben und im nächsten durchlauf überprüfen, ob beide Werte (Z42 udn Z01) vorhanden sind und dann mache dies und das... ist das so richtig?? Ich hab es leider bisher nicht hinbekommen, da ich denke, dass der erste Wert (Z42) verloren gegangen ist und nur noch Z01 im speicher ist. Kann das sein?? Das wäre meine erweiterte Methode:
is i : integer; name, k : string; do for i := 1 to 137 loop name := to_str(i); name := sprint("Code", copy("00",1,3-strlen(name)), name); print @.holeAttribut(name); if @.holeAttribut(name) = "Z42" then k:="Z42"; end; if @.holeAttribut(name) = "Z01" and K="Z42" then @.umlagern(Rolle2); else @.umlagern(Rolle1); end; next; end; Über Hilfe und Tipps wäre ich sehr dankbar...# Gruß Buexxxe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Buexxxe Mitglied Student
 Beiträge: 9 Registriert: 03.12.2008
|
erstellt am: 06. Mrz. 2009 08:39 <-- editieren / zitieren --> Unities abgeben:         
Soweit so gut.... Habs jetzt einigermassen hinbekommen. Allerdings hab ich jetzt ein neues (hoffentlich triviales) Problem. Beim Durchlaufen der COde geht Plant Simulation alphabetisch vor, was ja auch Sinn macht. Nur das Problem ist, wenn ich z.B. einen Wert "abc" und "def" habe, aber möchte das erst "def" ausgeführt wird und dann "abc", wird trotzdem erst "abc" ausgeführt, weil Plant Sim. ja den String "abc" als erstes sieht. Wie kann ich das umgehen?? Rausnehemen kann ich die Abfrage nicht, weil falls "def" nicht vorhanden ist, könnte ja "abc" ausgelöst werden, falls vorhanden. Sollte ich innerhalb einer Methode vielleicht zwei Schleifen einfügen, so wie hier: is i : integer; name, k : string; do for i := 1 to 137 loop name := to_str(i); name := sprint("Code", copy("00",1,3-strlen(name)), name); if @.holeAttribut(name) = "DEF" then @.umlagern(DEF); elseif @.holeAttribut(name) = "GHI" then @.umlagern(GHI); end; next; for i := 1 to 137 loop name := to_str(i); name := sprint("Code", copy("00",1,3-strlen(name)), name); if @.holeAttribut(name) = "ABC" then k:="ABC"; end; if @.holeAttribut(name) = "ACC" and k="ABC" then @.umlagern(ACC); elseif k = "ACC" then @.umlagern(ABC); end; next; end; Trotzdem wird in der ersten Schleife das umlagern nicht ausgelöst, wenn in den Attributen "ABC" vorhanden ist!?!? Kann man so ne Art "Prio" setzen oder so?? Vielleicht ist es sehr trivial, aber ich hab das Gefühl ich seh den Wald vor lauter Bäumen nicht. Besten Dank schon einmal im Voraus... MfG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Buexxxe Mitglied Student
 Beiträge: 9 Registriert: 03.12.2008
|
erstellt am: 06. Mrz. 2009 10:36 <-- editieren / zitieren --> Unities abgeben:         
jau, jetzt hab ichs  habe einfach zwei verschiedene Lauf-Indizes (i und j) benutzt, dann klappts!!! Besten Dank trotzdem nochmal für Eure Unterstützung und Tipps... werde bestimmt noch mal Einige brauchen. Bis dann Gruß Buexxxe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |