Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   #00 aus String filtern (https://www.delphipraxis.net/146312-00-aus-string-filtern.html)

stho 17. Jan 2010 20:37


#00 aus String filtern
 
Hallo Leute

Nun hänge ich an einem Problem, #00 Zeichen aus einem string zu filtern um ihn anständig darstellen zu können.

Beispiel:
'H'#0'a'#0'l'#0'l'#0'o'#0' '#0'W'#0'e'#0'l'#0't'#0

Ausgabe:
Hallo Welt

Mit Stringreplace habe ichs schon versucht aber da das ja kein teil von einem string ist geht das leider nicht :x

kann mir da jemand helfen?

divBy0 17. Jan 2010 20:40

Re: #00 aus String filtern
 
Du könntest in einer Schleife den String durchgehen und die Zeichen die du brauchst ( <> #0 ) in einen anderen String kopieren.

Luckie 17. Jan 2010 20:44

Re: #00 aus String filtern
 
Kann es sein, dass das ein Unicode String ist?

Eppos 17. Jan 2010 20:45

Re: #00 aus String filtern
 
ich würde die Werte zwischen den Hochkommas lesen...

divBy0 17. Jan 2010 20:46

Re: #00 aus String filtern
 
Zitat:

Zitat von Eppos
ich würde die Werte zwischen den Hochkommas lesen...

Die Hochkommas gibts im String nicht...

stho 17. Jan 2010 20:48

Re: #00 aus String filtern
 
nun, die Datei ist 50MB groß ^^
und da hab ich das problem das ich nicht einfach in einer schleife die einzlenen #0 weg löschen kann...
obwohl die idee echt gut ist ;-)


@luckie:
wie finde ich raus obs unicode ist?
kanns dir nähmlich leider nicht so einfach beantworten :oops: (weil ich es nicht weiß)

Luckie 17. Jan 2010 20:49

Re: #00 aus String filtern
 
Zitat:

Zitat von Luckie
Kann es sein, dass das ein Unicode String ist?


Björn Ole 17. Jan 2010 20:50

Re: #00 aus String filtern
 
Datei mit einem TFileStream öffnen und byteweise durchgehen?

Luckie 17. Jan 2010 20:51

Re: #00 aus String filtern
 
Konvertier ihn in einen AnsiString, wenn das funktioniert war es ein UnicodeString. ;)

stho 17. Jan 2010 20:56

Re: #00 aus String filtern
 
Zitat:

Zitat von Luckie
Konvertier ihn in einen AnsiString, wenn das funktioniert war es ein UnicodeString. ;)


konnte in in ansi convertieren ;-)
geändert hat sich an dem ergebniss aber nichts...

Luckie 17. Jan 2010 20:58

Re: #00 aus String filtern
 
Was heißt das?

Bernhard Geyer 17. Jan 2010 21:01

Re: #00 aus String filtern
 
Zitat:

Zitat von divBy0
Du könntest in einer Schleife den String durchgehen und die Zeichen die du brauchst ( <> #0 ) in einen anderen String kopieren.

Und schon hast du das €-Zeichen verloren bzw. fehlerhaft interpretiert.


Zitat:

Zitat von stho
konnte in in ansi convertieren ;-)
geändert hat sich an dem ergebniss aber nichts...

Du mußt den String als Unicodestring einlesen. Dann kannst du ihn auch korrekt verarbeiten.
Wo kommt denn der String her?

Zitat:

Zitat von stho
@luckie:
wie finde ich raus obs unicode ist?
kanns dir nähmlich leider nicht so einfach beantworten :oops: (weil ich es nicht weiß)

I.d.R. haben Unicodetextdateien einen entsprechenden BOM-Kennzeichner. Das Elpack, TNTWare oder die Unicodeklassen (TXXStringlist und Co.) aus der JCL machen das für dich automatisch.

divBy0 17. Jan 2010 21:06

Re: #00 aus String filtern
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von divBy0
Du könntest in einer Schleife den String durchgehen und die Zeichen die du brauchst ( <> #0 ) in einen anderen String kopieren.


Wieso? Das €-Zeichen sollte eigentlich #80 sein.

stho 17. Jan 2010 21:06

Re: #00 aus String filtern
 
okay, also ich versuche mal so zu antworten:
Der Text den ich verarbeiten will kommt aus einer Datei die ich als TFileStream eingelesen habe.

Wie kann ich den text denn als Unicode einlesen?

Delphi-Quellcode:
        SetLength(temp,Length(S));
        FS.Read(temp[2],Length(S)-1);
Hier bekomme ich 'temp' was mir als string angezeigt wird.
Doch in diesem String steht dann halt sowas wie: 'H'#0'a'#0'l'#0'l'#0'o'#0

Bernhard Geyer 17. Jan 2010 21:14

Re: #00 aus String filtern
 
Zitat:

Zitat von divBy0
Wieso? Das €-Zeichen sollte eigentlich #80 sein.

#$80 im Ansibereich ja, aber nicht #$0080 im Unicodebereich sondern #$20AC


Zitat:

Zitat von stho
Wie kann ich den text denn als Unicode einlesen?

Ohne Gewähr das genau die Byteanzahl passt:
Delphi-Quellcode:
  temp: WideString
  ...
  SetLength(temp, Length(S) div SizeOf(WideChar));
  FS.Read(temp[2]; Length(S)-1);

stho 17. Jan 2010 21:33

Re: #00 aus String filtern
 
funktioniert leider nicht :-(
Was kann ich bloß tun?
muss ich den string erst als .txt speichern und ihn dann neu laden?
könnte das was bringen?
ist nur ne sehr unschöne variante -.-

Luckie 17. Jan 2010 21:34

Re: #00 aus String filtern
 
Zitat:

Zitat von stho
Der Text den ich verarbeiten will kommt aus einer Datei die ich als TFileStream eingelesen habe.

Das ist nicht zufällig eine MDB-Datei? ;)

phreax 17. Jan 2010 21:36

Re: #00 aus String filtern
 
Zitat:

Zitat von divBy0
Du könntest in einer Schleife den String durchgehen und die Zeichen die du brauchst ( <> #0 ) in einen anderen String kopieren.

Das sollte doch die einfachste Lösung für dein Problem sein, da nur #0 als Füllzeichen vorkommt...

@Luckie, ja es ist eine :D ich kenne auch die Methode mit der er das macht recht genau...

stho 17. Jan 2010 22:00

Re: #00 aus String filtern
 
Zitat:

Zitat von phreax
Zitat:

Zitat von divBy0
Du könntest in einer Schleife den String durchgehen und die Zeichen die du brauchst ( <> #0 ) in einen anderen String kopieren.

Das sollte doch die einfachste Lösung für dein Problem sein, da nur #0 als Füllzeichen vorkommt...

@Luckie, ja es ist eine :D ich kenne auch die Methode mit der er das macht recht genau...


LALALA :-D
ich weiß nicht wovon ihr redet ^^
ich sing ein lied und freu mich mal ^^

ja klar, natürlich ists eine MDB datei ;-)

nun, ich schau mal ob ich die #0 nicht doch irgendwie da raus bekommen kann ^^

himitsu 18. Jan 2010 02:44

Re: #00 aus String filtern
 
Zitat:

'H'#0'a'#0'l'#0'l'#0'o'#0' '#0'W'#0'e'#0'l'#0't'#0
Wie schon gesagt wurde: Dieses sieht nach Unicode aus und wenn man diesen Teil in einen Unicode-String (in deinem Fall der WideString) reinläd, dann sollte es klappen.

PS: Warum willst du alles in ein Memo laden?
Ich denke dein Programm soll das Passwort entschlüsseln/extrahieren.
Also verarbeite alles erstmal intern und zeige dann nur das Ergebnis (das Passwort) an.

stho 18. Jan 2010 05:52

Re: #00 aus String filtern
 
nun, deine bedenken sind natürlich berechtigt und sicherlich nicht falsch :-)
Und ja, ich will den MD5 Hash-Wert extrahieren um an das PW zu kommen. Das ist richtig.

Jedoch habe ich im moment eine Funktion die eine Schleife 56.000.000 mal durchlaufen muss um an die passende codezeile zu kommen.
Wenn ich das ganze also als normalen string verarbeiten könnte währe es mir möglich mit "pos(..." die position zu ermitteln ohne elendige schleifen durlaufen zu lassen, was fast 5 minuten in meinem test dauert :gruebel:

normalerweilse haben die heutigen rechner ja ziemlich viel rechenpower aber bei 5 Minuten ist das doch nen bissel lang ^^
vor allem weil es ein Programm in VB gibt welches das ganze in ca. 5 Sekunden hin bekommt :gruebel:

ich frag mich noch immer wie es das macht... :wall:

himitsu 18. Jan 2010 06:29

Re: #00 aus String filtern
 
Pos gibt es auch für WideString.
(ginge aber nur, wenn der String an 2er-Grenzen ausgerichtet wäre)

ansonsten kann man auch alles erstmal Ansi,
den String inkl. der #0en suchen lassen
und danach erst den Teil in einen Unicode-String kopieren.


:gruebel:
Du willst aus einem MD5-Hash das gehashte Passwort zurückrechnen?

stho 18. Jan 2010 06:45

Re: #00 aus String filtern
 
ja, das will ich machen :-) die anleitung dazu habe ich schon
jetzt muss ich nurnoch "effektiv" durchsuchen...

das problem ist das sie aktuelle Version die ich dank einem Mitglied hier habe nicht sehr effektiv ist...
5 minuten sind für mich zumindest nicht effektiv ;-)

Aber das zurückrechnen, darüber solltest du dir keine sorgen machen. das krieg ich schon hin... ^^



hoffe das was ich hier mache fällt nicht in die illegalen bereiche :gruebel:
wobei ich bei PW-recovery nichts illegales sehe... oder irre ich mich?

DP-Maintenance 18. Jan 2010 06:51

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Geht ja wohl um Delphi


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