AGB  ·  Datenschutz  ·  Impressum  







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

Stringende wieder hinzufügen

Ein Thema von TheMiller · begonnen am 17. Aug 2008 · letzter Beitrag vom 17. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:22
Hallo,

da diese Frage spezieller ist, eröffne ich einen neuen Thread, der aber eigentlich zu dem hier (Stream wie Editor einlesen)

Also, ich habe in dem oben genannten Thread eine Funktion gepostet bekommen, mit der ich das Stringende-Zeichen #0 entfernen kann. Nun zeigt mir das Memo alles toll an. Damit ich die Datei wieder speichern kann, habe ich das #0 durch ?) ersetzt. Nun möchte ich das ?)-Zeichen wieder in #0 mit StrReplaceBin umwandeln. Doch da fügt er nur das erste Zeichen ein, erkennt natürlich wieder ein Stringende und hört somit auf. Somit habe ich nur die ersten 4 Bytes (?) glaube ich.

Die Datei kann also nicht mehr gespeichert werden. Ich denke, dass StrReplaceBin müsste am Ende der Datei anfangen zu ersetzen und sich vorarbeiten, damit sie nicht vorzeitig abbricht. Doch die Funktion ist in ASM und davon habe ich noch weniger Ahnung.

Bitte um Hilfe!

Danke
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:26
Du kannst doch einfach den String mit einer for-Schleife durchlaufen und jedes Ersatzzeichen durch ein #0 ersetzen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:29
Das darf doch dann aber kein String-#0 sein. Es muss ja ein Binärwert sein... Sonst habe ich ja #0 da stehen und nicht ein tatsächliches Stringende. Oder?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:32
Und welches Ersatzzeichen soll man da nehmen? Vielleicht ist ja z.B. das Fragezeichen vorher auch ein Fragezeichen gewesen und nicht #0
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:36
Ich will ja kein Ersatzzeichen, ich mag ja nur mein Ersatzzeichen wieder in ein Binär-#0-Zeichen umwandeln.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:38
#0 ist das Zeichen mit dem Binärwert 0, wird also bei PChars als Stringende interpretiert. Der Trick liegt darin, dass bei Strings im Gegensatz zu PChars noch eine zusätzliche Längenangabe vorliegt, auf die mit Length() zugegriffen wird. Damit umgehst du das Problem des vorzeitigen Abbrechens.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#7

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:45
Hm.. das hab ich nicht ganz verstanden.

Zuerst wandel ich den Kram folgendermaßen um, um ihn im Memo anzuzeigen:

Delphi-Quellcode:
//String, Suchen_nach, Ersetzen-durch
StrReplaceBin(s, #0, '&%');
Nun kann ich es im Memo alles ansehen. Um zu speichern, wollte ich wieder zurückwandeln:

StrReplaceBin(s, '&%', #0); Da ersetzt er nur bis zum ersten Vorkommen, danach ist für ihn der String zu Ende.

Ich habe nicht ganz verstanden, wie dieser "Trick" funktionieren soll, den du geschrieben hast - bzw wie ich ihn umsetze.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:55
Hm, mit einem Ersetzungsstring, der größer als ein Byte ist, wird das etwas schwieriger. Allerdings nicht unmöglich:
Delphi-Quellcode:
procedure Fix0Bytes(var Str: String);
var i, j: Integer;
begin
  i := 1;
  j := 1;
  while i < Length(Str) do
    if (Str[i] = '&') and (Str[i+1] = '%') then
    begin
      Str[j] := #0;
      Inc(i, 2);
      Inc(j);
    end
    else
    begin
      Str[j] := Str[i];
      Inc(i);
      Inc(j);
    end;
  SetLength(Str, j);
end;
Ich habe es nicht getestet, aber zumindest mit Ansistrings müsste es so gehen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#9

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:58
Hey...

hab mal Copy&Paste gemacht, das Ergebnis ist leider das gleiche. Vielleicht müssen wir die Funktion so umschreiben, dass sie am Dateiende beginnt, die Strings zu ersetzen und sich zum Beginn der Datei vorarbeitet. Das könnte doch gehen, oder?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Stringende wieder hinzufügen

  Alt 17. Aug 2008, 15:59
Wie speicherst du denn den String?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  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 00:28 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