AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

StringReplace - Problem mit $00 ?

Ein Thema von moelski · begonnen am 20. Apr 2009 · letzter Beitrag vom 20. Apr 2009
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 19:18
Moin !

Also entweder habe ich gerade ne Blockade, oder mein Compiler mag mch nimmer.

Delphi-Quellcode:
function HexStrToString(const value:string):string;
begin
   SetLength(Result, Length(value) div 2); // es wird halber Platz benötigt
   if Length(value) > 0 then
      HexToBin(PChar(value), PChar(Result), Length(value));
end;

Procedure .... Whatever ....
var DataConvert, Data : String;
Const FEND    = $C0; //Frame END
Const FESC    = $DB; //Frame ESCape
begin
  Data := HexStrToString('C01D0D024022F920FF08D60000001901DBDC');
  DataConvert := StringReplace(Data, chr($DB) + chr($DC), CHR(FEND), [rfReplaceAll, rfIgnoreCase]);
  DataConvert := StringReplace(Data, chr($DB) + chr($DD), CHR(FESC), [rfReplaceAll, rfIgnoreCase]);
  ShowMessage(DataConvert);
end;
Wenn ich das ausführe dann sollte hinten das DBDC ersetzt werden durch C0. Aber da passiert rein gar nichts.
Hab ich hier einen generellen Fehler oder wat is da los?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#2

Re: StringReplace - chr($DB) + chr($DC) nicht ersetzbar ?!

  Alt 20. Apr 2009, 19:28
Moin nochmal ..

Kann es sein das StrngReplace ein Problem mit $00 hat ?

Denn das geht nicht:
Data := HexStrToString('001901DBDC');

Aber das geht :
Data := HexStrToString('1901DBDC');
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 19:42
Woran erkennst du das StringReplace ein Problem hat?

Eigentlich sollte dieses keine Probleme damit haben, aber deine MessageBox (ShowMessage) hat große Probleme damit
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#4

Re: StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 19:43
Die MessageBox war ja nur damit der Compiler das nicht gleich verwirft.

Ich habe mir das im Debugger angesehen. Und da kann man eben sehen das kein replace statt findet
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 19:46
hmmm ich schau mal, aber eigentlich hatte ich da noch nie Probleme damit (du bist grad in D7?)

PS:
Code:
Data := HexStrToString('C01D0D024022F920FF08D60000001901DBDC');
DataConvert := StringReplace(Data, chr($DB) + chr($DC), ...
DataConvert := StringReplace([b]DataConvert[/b], chr($DB) + ...]);
[add]
laß mal das rfIgnoreCase weg ... eventuell hat das interne AnsiUpperCase Probleme
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#6

Re: StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 19:50
Moin !

Zitat:
laß mal das rfIgnoreCase weg
Das bringt leider auch nix
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 19:52
Moin Dominik,

einen Workaround kann ich Dir noch anbieten:
Ersetze die Werte als String, und wandele anschliessend den String um statt umgekehrt.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 19:52
OK, das kommt davon, wenn man meißt eine andere Version der Funktionen nutz

Also Probleme gibt es mit AnsiPos im StringReplace, denn dises nutzt einen PChar und der schneidet bei #0 nunmal ab,
darum wird nichts nach einem #0 gefunden.


[add]
also die legalen Lösungen:

schau dir mal andere Implementationen der Funktion an ... z.B. siehe FastStringsProject (oder so)

ODER

kopier dir aus der SysUtils.pas die Funktion StringReplace raus und ersetze in deiner Kopie das AnsiPos durch Pos.

Falls du im Forum etwas suchst, kannst du auch rausfinden wie man die SysUtils neu kompiliert, dann kannst du das auch direkt in der SysUtils ändern
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#9

Re: StringReplace - Problem mit $00 ?

  Alt 20. Apr 2009, 20:03
Moin !

Zitat:
kopier dir aus der SysUtils.pas die Funktion StringReplace raus und ersetze in deiner Kopie das AnsiPos durch Pos.
Danke das hilft mir erstmal.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:31 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