AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlänge parsen

Ein Thema von EWeiss · begonnen am 4. Sep 2017 · letzter Beitrag vom 7. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Stringlänge parsen

  Alt 4. Sep 2017, 15:57
EDIT:

Graphics: GPGRAPHICS; // Tigü: Hier war ein falscher Typ (Cardinal)
Der Typ ist nicht falsch wenn er das wäre würde mein ganzer Quelltext nicht funktionieren.
Das ist eine Auslegungs Sache wie ich Graphics definiere.
IN VB ist es Long, in PowerBasik ist es DWORD und bei mir ist es Cardinal (DWORD) wenn du so willst.
Ich möchte dich an dieser Stelle ausdrücklich warnen!
Das funktioniert wunderbar für 32-Bit bis ans Ende aller Tage.

Aber unter 64-Bit wirst du schnell merkwürdige Fehler (höchstwahrscheinlich) bekommen (können).
Die GDIPLUS-DLL wird dir 64-Bit Zeiger geben (Länge 8 Byte) und du wirst hart auf 32-Bit Länge casten und damit die Adresse abschneiden.
Das führt unweigerlich zu merkwürdigen Fehlern und Zugriffsverletzungen.
Das gilt auch für alle anderen Typen wie bpsw. Brush, Texture, Gradienten, Pen, Image, Bitmap, StringFormat, FontFamily etc. pp.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Stringlänge parsen

  Alt 4. Sep 2017, 16:00
Hier mal ein Beispiel was falsche, nicht mitwachsende Typen für Ärger sorgen können:
http://www.delphipraxis.net/181512-s...imagelist.html
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Stringlänge parsen

  Alt 4. Sep 2017, 16:05
Das ist korrekt was du sagst deshalb verwende ich für 64Bit ja auch die "normale" GDIPlus vom http://www.progdigy.com

Ich weis das Graphics, Image und einige andere variablen Pointer sind.
Bei mir sind diese fast alle Cardinal und glaube mir in 32Bit gibt es keine Probleme.

Ich hatte einfach keine Lust 5 Units für 3 API Funktionen in meine LIB einzubinden die machen alleine schon 1MB aus.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Stringlänge parsen

  Alt 4. Sep 2017, 16:15
Nun ja wirklich weiter bin ich noch nicht muss mich mal schlau machen was Glados mit QuickSort meint.
Kenn mich damit nicht aus.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Stringlänge parsen

  Alt 4. Sep 2017, 16:28
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;
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#6

AW: Stringlänge parsen

  Alt 4. Sep 2017, 17:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Stringlänge parsen

  Alt 4. Sep 2017, 17:05
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;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Stringlänge parsen

  Alt 5. Sep 2017, 07:52
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.
Der Neutral General hat ja schon erklärt, warum es unsinnig ist sich die Ergebnisse zu merken und anschließend zu sortieren.
Nichtsdestotrotz möchte ich auf "Was anderes macht dein Code auch nicht!" mit folgenden Thread antworten:
http://www.delphipraxis.net/123215-p...umwandeln.html

Bitte lese ihn aufmerksam durch.
Alle Lösungen zur Aufgabenstellungen bringen das gleiche Ergebnis.
Finde die Parallelen hierzu.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Stringlänge parsen

  Alt 4. Sep 2017, 17:05
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
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#10

AW: Stringlänge parsen

  Alt 4. Sep 2017, 17:15
Zitat:
Ob nun dein Vorschlag oder meiner: das Ergebnis ist am Ende dasselbe je nachdem wie man es auswertet.
Zitat:
Doch.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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