Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Seltsames Verhalten bei Stringvergleich (https://www.delphipraxis.net/194446-seltsames-verhalten-bei-stringvergleich.html)

Hobbycoder 21. Nov 2017 18:25

Seltsames Verhalten bei Stringvergleich
 
Hi,

aus einer ObjectList möchte ich ein bestimmtes Object anhand einer Property finde. Dafür diese Routine:
Delphi-Quellcode:
function TMSNList.IndexOfMSN(value: string): Integer;
var
  i: Integer;
begin
  Result:=-1;
  for i:=0 to self.Count-1 do
  begin
    DoWriteLog('Value: '+QuotedStr(value)+' Self['+IntToStr(i)+'].MSN: '+QuotedStr(self[i].MSN));
    if self[i].MSN=value then
    begin
      DoWriteLog('--Match');
      Result:=i;
      Break;
    end else DoWriteLog('--NoMatch');
  end;
end;
(die DoWriteLog's sind nur für die Fehlersuche drin).

Als Log bekomme ich das:
Code:
21.11.2017 19:07:05,540 : MSNlog: Value: '25' Self[0].MSN: '60'
21.11.2017 19:07:05,540 : MSNlog: --NoMatch
21.11.2017 19:07:05,540 : MSNlog: Value: '25' Self[1].MSN: '25'
21.11.2017 19:07:05,540 : MSNlog: --NoMatch
Wie man sehr schön sehen kann, ist beim Index 1 der String gleich, wird aber nicht als gleich in der Routine erkannt.
Beide sind vom Typ String.

Vergleicht man strings neuerdings anders?

Interessant ist, dass es auf meiner Win10-Maschine läuft, aber auf einem Win2012- und einem Win2008-Server (auf denen ich das jetzt getestet habe) nicht.

Uwe Raabe 21. Nov 2017 18:35

AW: Seltsames Verhalten bei Stringvergleich
 
Was ist denn das für ein Zeichen vor der 25 bei value?

Fritzew 21. Nov 2017 20:38

AW: Seltsames Verhalten bei Stringvergleich
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1386829)
Was ist denn das für ein Zeichen vor der 25 bei value?

Da gebe ich Dir recht
So sieht das aus wenn ich Den Text nach Notepad kopiere:

21.11.2017 19:07:05,540 : MSNlog: Value: 'x8125' Self[1].MSN: '25'

Hobbycoder 23. Nov 2017 07:25

AW: Seltsames Verhalten bei Stringvergleich
 
Ah, danke. Ich habe mir das immer in Notepad angeschaut. Hätte mal lieber Notepad++ nehmen sollen. Jetzt sehe ich das auch.
Vielen Dank.

himitsu 27. Nov 2017 15:25

AW: Seltsames Verhalten bei Stringvergleich
 
Bezüglich Logging könntest du dir überlegen dafür eine Übersetzung mit einzubauen.

Also entweder auch
Delphi-Quellcode:
if C in [0..31] then
und da das durch Char durch eine Zeichenfolge ala
Delphi-Quellcode:
\x12
.

Im Unicode gibt es für viele Steuerzeichen auch "sichtbare" Ersatzzeichen.
z.B. http://www.unicode.org/charts/
> Scripts > Latin > Basic Latin (ASCII)
> Symbols and Punctuation > Technical Symbols > Control Pictures
$0000-$001F + $2400 = $2400-$241F


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 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