Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Stringlänge parsen (https://www.delphipraxis.net/193739-stringlaenge-parsen.html)

TiGü 4. Sep 2017 17:28

AW: Stringlänge parsen
 
Zitat:

Zitat von EWeiss (Beitrag 1380292)
Nun ja wirklich weiter bin ich noch nicht muss mich mal schlau machen was Glados mit QuickSort meint.
Kenn mich damit nicht aus.

Der Vorschlag bringt dich auch nicht weiter.
Da muss man auch nichts sortieren.

PseudoCode:

Delphi-Quellcode:
function GetTextWidth(MyStrings: TStrings {ja, nur ein Beispiel, kannst auch Array nehmen}): Integer;
var
  Result, NewWidth: Integer;
  MyString: string;
begin
  Result := 0;
  NewWidth := 0;
  for MyString in MyStrings do
  begin
    NewWidth := GetTextBoundOnlyWidth(MyString); // Platzhalterfunktion zum Ermitteln der Breite des Strings
    if NewWidth > Result then // Immer wenn die Breite größer ist von diesen String, dann Result entsprechen erhöhen
      Result := NewWidth;
  end;
end;

Glados 4. Sep 2017 18:00

AW: Stringlänge parsen
 
Zitat:

Der Vorschlag bringt dich auch nicht weiter.
Da muss man auch nichts sortieren.
Ich habe nicht gesagt, dass man zwingend sortieren muss. Aber mit QuickSort kann man den längsten String ausfindig machen.

Was anderes macht dein Code auch nicht!
Ob nun dein Vorschlag oder meiner: das Ergebnis ist am Ende dasselbe je nachdem wie man es auswertet.

Neutral General 4. Sep 2017 18:05

AW: Stringlänge parsen
 
Zitat:

Zitat von Glados (Beitrag 1380294)
Was anderes macht dein Code auch nicht!
Ob nun dein Vorschlag oder meiner: das Ergebnis ist am Ende dasselbe je nachdem wie man es auswertet.

Doch. Um die Strings sortieren zu können musst du für jeden String in einer Schleife erst mal die Länge ermitteln.
Danach noch zu sortieren ist Unsinn weil man sich in der Schleife auch grad immer merken kann ob das aktuelle Element das (bisher) größte ist:
Delphi-Quellcode:
if NewWidth > Result then // Immer wenn die Breite größer ist von diesen String, dann Result entsprechen erhöhen
  Result := NewWidth;

EWeiss 4. Sep 2017 18:05

AW: Stringlänge parsen
 
Zitat:

Zitat von TiGü (Beitrag 1380293)
Zitat:

Zitat von EWeiss (Beitrag 1380292)
Nun ja wirklich weiter bin ich noch nicht muss mich mal schlau machen was Glados mit QuickSort meint.
Kenn mich damit nicht aus.

Der Vorschlag bringt dich auch nicht weiter.
Da muss man auch nichts sortieren.

PseudoCode:

Delphi-Quellcode:
function GetTextWidth(MyStrings: TStrings {ja, nur ein Beispiel, kannst auch Array nehmen}): Integer;
var
  Result, NewWidth: Integer;
  MyString: string;
begin
  Result := 0;
  NewWidth := 0;
  for MyString in MyStrings do
  begin
    NewWidth := GetTextBoundOnlyWidth(MyString); // Platzhalterfunktion zum Ermitteln der Breite des Strings
    if NewWidth > Result then // Immer wenn die Breite größer ist von diesen String, dann Result entsprechen erhöhen
      Result := NewWidth;
  end;
end;

Danke das ist ein Anhaltspunkt.
TStrings sind ok..

gruss

Glados 4. Sep 2017 18:15

AW: Stringlänge parsen
 
Zitat:

Ob nun dein Vorschlag oder meiner: das Ergebnis ist am Ende dasselbe je nachdem wie man es auswertet.
Zitat:

Doch.
:roll::wall:

Neutral General 4. Sep 2017 18:18

AW: Stringlänge parsen
 
Zitat:

Zitat von Glados (Beitrag 1380297)
Zitat:

Ob nun dein Vorschlag oder meiner: das Ergebnis ist am Ende dasselbe je nachdem wie man es auswertet.
Zitat:

Doch.
:roll::wall:

Ok, dass "Doch" hat in dem Kontext nicht gepasst, der Rest trifft trotzdem zu.

:roll: :wall:

:roll:

Rollo62 4. Sep 2017 20:20

AW: Stringlänge parsen
 
Ich bin wahrscheinlich schon OffTopic weil ich das Problem falsch verstehe,
oder dieser Vorschlag steht hier schonmal irgendwo im Thread:

Aber du könntest die Strings einmalig beim Erzeugen parsen und die Längen und was auch immer separat verwalten, z.B. als Liste oder Array, o.ä.
Damit könntest du die Länge relativ schnell über das Array finden.

Mal so hingeschrieben, ohne Test und Sicherheitsabfragen.
Delphi-Quellcode:
  intMax := SucheMaxLänge(intStart, intAnzahl);

function SucheMaxLänge(intStart, intAnzahl) : Integer;
begin
   Result := 0;

   while intAnzahl > 0 do
   begin
     if FLenArray[intStart+IntAnzahl] > Result then
        Result := FLenArray[intStart+IntAnzahl];
     Dec(intAnzahl);
   end;
end;
Dazu müsste aber das Array immer mit der Stringliste synchron laufen, ein Insert, Delete, etc. wenn du das gewährleisten kannst.

Rollo

EWeiss 4. Sep 2017 20:26

AW: Stringlänge parsen
 
Theoretisch ist das machbar praktisch leider nicht weil sich die Menüs immer ändern dynamisch.
Irgendwelche Strings im Speicher halten würde also nicht viel bringen.

Bei jeden neuen Film sieht das anders aus.

gruss

Rollo62 4. Sep 2017 20:37

AW: Stringlänge parsen
 
Nur die Längen im Speicher halten ...

hoika 4. Sep 2017 23:38

AW: Stringlänge parsen
 
Hallo,
gibt es hier überhaupt ein Performance-Problem,
oder ist es eine theoretische Diskussion?

"Minimal-Bsp." bitte, was das Problem zeigt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 4 von 6   « Erste     234 56      

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 by Thomas Breitkreuz