![]() |
Stringlist nach fehlenden Werten durchsuchen?!?
Hallo,
habt Ihr ein Denkanstoss für mich? Eine Stringliste hat viele Werte: 100 101 102 103 106 107 110 usw. Nun möchte ich prüfen, wo und welche Lücken existieren? Also: Nummer 104 und 105 sind nicht vorhanden, neu anlegen und liste wieder durchgehen. Wer kann mir helfen? Gruss Marco |
Re: Stringlist nach fehlenden Werten durchsuchen?!?
Erstelle dir ein Array, in dem die Werte, die die Liste enthalten soll, gespeichert sind, und lösche diese Werte aus dem Array, wenn sie gefunden werden. Die Werte, die nicht in der Liste enthalten sind, sind am Ende in dem Array.
|
Re: Stringlist nach fehlenden Werten durchsuchen?!?
Danke,
aber ich weiss beim erstellen der Stringliste nicht welche Werte und welcher Bereich eingelesen wird. Das kann mal sein, dass der Bereich von 100 bis 200 geht und mit 100 anfängt, das kann aber auch bei Tausend beginnen und bis Zehntausend laufen. usw. usw. |
Re: Stringlist nach fehlenden Werten durchsuchen?!?
Delphi-Quellcode:
// minimalen und maximalen Wert feststellen
minWert := MaxInt; maxWert := MinInt; for i := 0 to StringListe.count-1 do begin wert := StrToInt(StringListe[i]); if wert > maxWert then maxWert := wert else if wert < minWert then minWert := Wert; end; // prüfen, welchen Werte dazwischen fehlen for i := minWert+1 to maxWert-1 do begin if StringListe.IndexOf(IntToStr(i)) = -1 then begin // Wert fehlt StringListe.Add(IntToStr(i)); end; end; |
Re: Stringlist nach fehlenden Werten durchsuchen?!?
danke,
das werde ich gleich mal ausprobieren. |
Re: Stringlist nach fehlenden Werten durchsuchen?!?
hi,
wenn du nur eine liste vervollständigen willst, dann wäre der einfachste und schnellste weg einmal den minimalwert und dann den maximalwert festzustellen, so wie es der erte teil von shmia's funktion zeigt
Delphi-Quellcode:
und dann einfach eine neue liste mit werten zwischen min und max erstellen... dann sparste dir die vielen vergleiche
// minimalen und maximalen Wert feststellen
minWert := MaxInt; maxWert := MinInt; for i := 0 to StringListe.count-1 do begin wert := StrToInt(StringListe[i]); if wert > maxWert then maxWert := wert else if wert < minWert then minWert := Wert; end; denn:
Delphi-Quellcode:
IndexOf vergleicht die werte in der liste solange bis er einen findet, oder wenn er keinen findet gibt er -1 zurück
if StringListe.IndexOf(IntToStr(i)) = -1 then
also einmal die ganze liste durchsuchen wäre genauso wie einmal die ganze liste neu zu schreiben.... nur beim duchsuchen wiederhot er die suche bei 100 einträgen 100mal also 1mal schreiben oder 100mal suchen...?
Delphi-Quellcode:
ich hoffe ich habe dein problem richtig verstanden.. ;)
// minimalen und maximalen Wert feststellen
minWert := MaxInt; maxWert := MinInt; for i := 0 to StringListe.count-1 do begin wert := StrToInt(StringListe[i]); if wert > maxWert then maxWert := wert else if wert < minWert then minWert := Wert; end; // einfach alle werte in dem bereich anlegen..... for i := minWert+1 to maxWert-1 do NeuStringListe.Add(IntToStr(i)); wenn du natürlich wissen willst welche werte fehlen, dann hilft meine version nicht ansonst kannst du die liste vorher sortieren und dann einfach überprüfen ob die zahlen aufeinander folgen, wenn nicht mußt du eine einfügen das spart auch ein haufen sucherrei ;) mfg Dano |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz