Autor Beitrag
Kralle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: So 17.07.11 11:24 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: 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

Für diesen Beitrag haben gedankt: Kralle
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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

Für diesen Beitrag haben gedankt: Kralle
Kralle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: So 17.07.11 11:55 
Hallo Dirk,
user profile iconTryer hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: Beiträge zusammengefasst---

Moin,

user profile iconAXMD hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: 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

Für diesen Beitrag haben gedankt: Kralle
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: So 17.07.11 12:06 
user profile iconKralle hat folgendes geschrieben Zum zitierten Posting springen:
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

Für diesen Beitrag haben gedankt: Kralle
Kralle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: 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
Einloggen, um Attachments anzusehen!
Kralle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: 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