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: Di 15.11.11 15:36 
Hallo,

ohne die Liste in einer Schleife durchlaufen zu lassen, gibt es noch einen weg festzustellen, in welcher Zeile sich der Letzte Inhalt befindet?
Leerzeilen in der Mitte gibt es nicht.

MfG
Heiko


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 15.11.2011 um 16:28
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 15.11.11 15:44 
Ja, die Stringlist hat die Eigenschaft "Count". Die gibt an, wie viele Einträge in der Liste sind.
Aber da die Liste 0-basiert ist, musst Du aufpassen. Der letzte Eintrag ist somit liste.strings[list.count - 1];

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 15.11.11 18:16 
Ich denke mal es geht um Leerzeilen, oder?

Und da gibt es theoretisch schon Möglichkeiten, aber die schnellste ist in einer Schleife von hinten angefangen nachzuschauen wie du meintest.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 15.11.11 18:56 
Oder man sucht den ersten Leerstring mit einer Binärsuche, wenn wirklich mittendrin keine Leerzeilen vorkommen.

_________________
We are, we were and will not be.
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: Mi 16.11.11 06:46 
Moin,

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Oder man sucht den ersten Leerstring mit einer Binärsuche, wenn wirklich mittendrin keine Leerzeilen vorkommen.


Hast Du ein Beispiel für diese Suche?

MfG
Heiko
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 16.11.11 07:22 
Guck mal hier:
de.wikipedia.org/wiki/Bin%C3%A4rsuche

Da gibts unten einen Pseudocode, den musst Du nur nach Delphi übersetzen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 16.11.11 07:49 
Die gängige Binärsuche muss man ja etwas anpassen, da man ja nicht abbricht, wenn das Element gefunden wurde, sondern erst dann, wenn sich linke und rechte Suchgrenze treffen.

Ich würde das so probieren
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 links := 0;
rechts := Liste.count-1;
solange rechts > links mache
    mitte := (links + rechts) DIV 2;
    wenn Liste[mitte] = '' dann
        rechts := mitte - 1
    else
        links := mitte + 1;
ende
ergebnis := links/rechts +/- 1; // da müsste man nochmal genauer schauen, wie das aussieht, 
                         //ggf noch eine Fallunterscheidung

_________________
We are, we were and will not be.