Entwickler-Ecke
Sonstiges (Delphi) - Kniffelig: Automatische Aktualisierung von Bezügen
Kralle - So 17.07.11 11:24
Titel: Kniffelig: Automatische Aktualisierung von Bezügen
Hallo,
mir qualmt der Kopf aber ich komme auf keine Lösung.
Folgendes Problem (das mit den Worten ist nur als Beipiel - der wahre Inhalt ist komplexer):
In einer DialogChecklist befinde sich folgende Einträge
| Zitat: |
Wort,1,"Hallo"
Wort,2,"Du"
Wort,3,"schöne"
Wort,4,"grosse"
Wort,5,"Welt"
Satz,6,(1,3,5)
|
Mittels Dialog kann ich die Wert in der Klammer bei "Satz" verändern. -
Gelöst.
Mittels weiterem Dialog kann ich eine "Wort" Zeile einfügen oder löschen und alle anderen "Zeilennummern" werden angepasst. -
gelöst
Aber, die "Satz"-Teil-Nummern müssen mit angepasst werden.
Wenn ich die Zeile
Wort,2,"Du" lösche, dann sieht der Inhalt der Checklistbox so aus:
| Zitat: |
Wort,1,"Hallo"
Wort,2,"schöne"
Wort,3,"grosse"
Wort,4,"Welt"
Satz,5,(1,2,4)
|
Wie man jetzt sehen kann, haben sich die Werte in Klammern verändert (ist so nötig, damit der Satz erhalten bleibt).
Es sei denn , eine Zeile deren Nummer in der KLammer steht wird gelöscht, dann muss die Nummer aus der Zeile entfernt werden.
Ich zerbreche mir den Kopf wie ich die Werte in Klammern aktuell halten kann?
Ich habe es schon mit zwei Arrays probiert. Eines enthielt die Werte vor dem ergänzen/löschen das andere danach.
Aber da beide nicht gleich groß sind, kann ich auch nicht "einfach" den Wert von "Alt" in den Klammern suchen und gegen den Wert in "Neu" ersetzen.
Wie kann man das Problem lösen?
MfG
Heiko
Tryer - So 17.07.11 11:46
Mach aus den "Zeilennummern" eine "UniqueID",sprich lass sie unverändert und hänge neue Wort hinten an. Führe zwei Listen/Suchbäume: Nach ID bzw. alphabetisch sortiert. Beide referenzieren das "Wort-Item" welches aus Nummer und Wort besteht (darüber wird dann auch der wechselseitige Zugriff auf die Listen möglich)
Grüsse, Dirk
AXMD - So 17.07.11 11:47
Hallo Kralle!
Wenn sich Einträge nur einzeln löschen lassen, kannst du es einfach so machen: alle Verweise, deren Index kleiner ist als der gelöschte, bleiben gleich, alle anderen werden um 1 kleiner.
AXMD
Kralle - So 17.07.11 11:55
Hallo Dirk,
Tryer hat folgendes geschrieben : |
Mach aus den "Zeilennummern" eine "UniqueID",sprich lass sie unverändert
|
Genau das geht leider nicht. Die Anwendung die die Daten der CheckListBox nachher vorgesetzt bekommt,
MUSS durchgehende Zeilennummern haben und die "Satz"-Zeile MUSS die letzte Zeile sein (hatte ich vergessen beizuschreiben).
Gruß Heiko
---
Moderiert von
Narses: Beiträge zusammengefasst---
Moin,
AXMD hat folgendes geschrieben : |
Wenn sich Einträge nur einzeln löschen lassen, kannst du es einfach so machen: alle Verweise, deren Index kleiner ist als der gelöschte, bleiben gleich, alle anderen werden um 1 kleiner.
AXMD |
Es können durchaus mit einem mal x-Zeilen eingefügt oder gelöscht werden.
Und nun ...
Gruß Heiko
AXMD - So 17.07.11 12:02
Wenn n zusammenhängende Zeilen gelöscht werden, gilt das Gleiche wie oben, nur dass du n statt 1 subtrahieren musst. Wenn nicht-zusammenhängende Zeilen gelöscht werden, wird das Ganze kniffliger.
AXMD
Tryer - So 17.07.11 12:06
Kralle hat folgendes geschrieben : |
| Genau das geht leider nicht. Die Anwendung die die Daten der CheckListBox nachher vorgesetzt bekommt |
Das wäre doch unabhängig von dem Format in dem Du die Daten bearbeitest - zum Zweck der Ausgabe ist sowas schnell erstellt. Während der Verarbeitungsphase ist der Satz dann kein "zu zerpflückender String" sondern ein "Array of TWortItem".
Grüsse, Dirk
Kralle - So 17.07.11 17:52
Moin,
danke das Ihr mir versucht zu Helfen.
Anbei eine PDF in der ich mehrere Mögliche Zustandsvarianten dargestellt habe,
aktuell gehalten werden müssen, die Zahlen in den Zeilen "Dialog,1019" und "Dialog,1000".
Gruß HEiko
Kralle - Do 28.07.11 10:45
Hallo,
das Problem ist gelöst.
Ich habe vor dem Ändern der Zeilennummern die Zeilennummern in einem Array gespeichert und nach dem Ändern auch nochmal.
Dann zerlege ich die Zeilen mit den Bezügen in einzelne Werte und suche mit in dem AltArray die entsprechende Zeilennummer un ersetze sie gegen die aus dem NeuArray.
Gruß Heiko
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!