AGB  ·  Datenschutz  ·  Impressum  







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

Stringvergleich

Ein Thema von ngott2 · begonnen am 14. Dez 2016 · letzter Beitrag vom 14. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2      
ngott2

Registriert seit: 26. Aug 2013
81 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Stringvergleich

  Alt 14. Dez 2016, 07:54
Delphi-Version: XE6
Hallo Zusammen,
ich hatte gestern ein komisches Ereignis beim Stringvergleich in Delphi.
Wir haben eine Funktion wo wir ein String reingeben und aus einer XML die passende Farbe gesucht wird. Leider hatte nie die Farbe gefunden.
Dann wollte ich schauen ob die Funktion überhaupt alle Elemente meiner XML Durchgeht. Als ich die Überprüfung eingebaut hatte funktionierte die Funktion aber auf einmal ohne Probleme. Als ich meine Änderungen wieder verworfen habe auch. Habt ihr eine Idee woran es liegen könnte? In der Funktion wird mit der "SameText" Funktion verglichen ob die Strings gleich sind. Diese Methode arbeitet mit Pointer. Ich weiß das in Java und C# es zu Problemen kommen kann wenn man Strings mit == vergleicht weil man dort auch nur Zeiger vergleicht.

Wie sollte man Strings vergleichen in Delphi. SameText(aStringValue,aOhtervariable), aStringValue.equals(aOhtervariable) oder einfach aStringValue = aOhtervariable?

Danke und einen schönen Tag.

Geändert von ngott2 (14. Dez 2016 um 07:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Stringvergleich

  Alt 14. Dez 2016, 08:13
Unicode berücksichtigt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ngott2

Registriert seit: 26. Aug 2013
81 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Stringvergleich

  Alt 14. Dez 2016, 08:17
Ja außerdem haben die betroffenen Zeichenketten auch nur die Standard ASCII Zeichen. Wir verwenden die Gleiche Routine oft auch für Kyrillische Zeichen und so weiter. Die Funktion ist schon lange im Einsatz und sollte eigentlich keine Probleme machen. Sind auf jedenfalls noch nie aufgefallen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Stringvergleich

  Alt 14. Dez 2016, 09:03
Hallo,
sicher, dass du nicht eine andere Xml-Datei durchsucht hast?
Heiko
  Mit Zitat antworten Zitat
ngott2

Registriert seit: 26. Aug 2013
81 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Stringvergleich

  Alt 14. Dez 2016, 09:50
Auch das ich ne andere Datei genommen habe kann ich Ausschließen. Die Files sind Hersteller abhängig, wenn es die falsche Datei ist wird eine Exception geworfen.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#6

AW: Stringvergleich

  Alt 14. Dez 2016, 10:02
In der Funktion wird mit der "SameText" Funktion verglichen ob die Strings gleich sind. Diese Methode arbeitet mit Pointer.
Nö. Die Methode arbeitet nicht mit Pointern. Diese Ruft einfach comparetext(S1,S2)=0 auf. Ausnahme sind die Eingangbedingung, in der geprüft wird, ob die Pointer der Strings gleich sind.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#7

AW: Stringvergleich

  Alt 14. Dez 2016, 10:03
Ein Stück Quellcode wäre nicht schlecht.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.443 Beiträge
 
Delphi 12 Athens
 
#8

AW: Stringvergleich

  Alt 14. Dez 2016, 10:09
Wie sollte man Strings vergleichen in Delphi. SameText(aStringValue,aOhtervariable), aStringValue.equals(aOhtervariable) oder einfach aStringValue = aOhtervariable?
SameText ignoriert Groß-/Kleinschreibung.

aStringValue.equals macht intern auch nur einen direkten Vergleich. Der Compiler ist clever genug, eine interne Methode dafür aufzurufen.

Also, abgesehen von der case-sensitive Einschränkung bei SameText, sind alle Stringvergleiche zulässig und führen zum gewünschten Ergebnis. Dein Problem liegt also irgendwo anders.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.035 Beiträge
 
Delphi 12 Athens
 
#9

AW: Stringvergleich

  Alt 14. Dez 2016, 10:45
Wie sollte man Strings vergleichen in Delphi. SameText(aStringValue,aOhtervariable), aStringValue.equals(aOhtervariable) oder einfach aStringValue = aOhtervariable?
Das passt nicht zusammen.
CaseInsensitiv oder CaseSensitiv?
Delphi-Quellcode:
{Ansi}SameStr(A, B) = (A = B)
{Ansi}SameText(A, B) = (AnsiLowerCase(A) = AnsiLowerCase(B))
Fazit: es ist egal, was man nimmt, da in Delphi die "LongStrings" AnsiString und UnicodeString intern zwar "Zeiger" sind, aber der Compiler das beachtet und verwendet dann z.B. Funktionen ala _LStrCmp und _LStrEqual aus der System.pas.

Was mich eher interessiert, "wo" oder besser wie kommt ihr an die Vergleichsstrings?
XML? Manuell den Text parsen oder 'ne XML-Komponente verwendet?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Dez 2016 um 10:48 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#10

AW: Stringvergleich

  Alt 14. Dez 2016, 11:20
Als ich die Überprüfung eingebaut hatte funktionierte die Funktion aber auf einmal ohne Probleme. Als ich meine Änderungen wieder verworfen habe auch. Habt ihr eine Idee woran es liegen könnte?
Mit einem Versionskontrollsystem könnte man jetzt einfach nachschaun, welche Änderung tatsächlich zu diesem Resultat geführt hat.
  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 13:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz