Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 241770 (3206)
  Suchen
 Zurück zur Übersicht
 AutorThema: Chr$(?) in Strings
Frank Abbing
Datum:12.09.02 11:12 Antwortenals Email verschicken  


Hallo,

ich möchte Strings dafür mißbrauchen, alle möglichen Daten zu enthalten.
Folgende Oem-Codes benutze ich nicht, weil es ansonsten ja Probleme gibt (Steuerzeichen):

0 bis 34 (diverse Steuerzeichen und ") und 92 (\).

Trotzdem scheint es noch Oem's zu geben, die von Profan in einem String anders umgewandelt werden. Weiß jemand, welche ?

Gruß, Frank


Roland G. Hülsmann
Datum:12.09.02 14:11 Antwortenals Email verschicken (rgh-soft@t-online.de) 


Hallo Frank,
prinzipiell kann ein String beliebige Zeichen von chr$(0) bis chr$(255) enthalten. Die Einschränkungen bezüglich der Ersatzeichen (nach einem Backslash) gelten ja nur, wenn der String als Literal (mit Anführungszeichen) im Programm steht. So würde es z.B. gehen:

test$ = chr$(12) + chr$(24) + chr$(0) + chr$(13)
print len(test$)


Bei chr$(0) ist jedoch zu beachten, daß alle API-Funktionen (oder PROFAN-Befehle, die direkt API-Funktionen aufrufen), dieses als Stringende interpretieren.
Gruß Roland


Frank Abbing
Datum:12.09.02 14:34 Antwortenals Email verschicken  


Hallo Roland.

Der String (oder vielmehr ganz viele) steht als Literal am Bildschirm.

Gruß, Frank


Frank Abbing
Datum:12.09.02 20:56 Antwortenals Email verschicken  


Hallo,

nochmal ganz klar!
Die Strings sehen etwa so aus:

string1$="øwi< h.B+ wìÝÍ €Z-Z¯vþk:º&ϯêêìæ¶TÒ% o×ݼ÷TþÙþÚ䲕 ntŒŽ{çÇ „ }ÿ dŽgT~² d }qä_Îx¢*"
string2$="~çÿmdU©Úi dßדŠE=­´#ô£ naiªê^ÍØZiçmR5[ëÜÒ“& sÒ¸ÓÍ4× ~Øçs/…~uÏÆ¾ y=ÎÒåŠ qÃZøVx+ÊÌ2k5"
string3$="Ìò jòFQÕU`wþÔF- ‚þn5Ƹù<k‘Ƹù ƒÿÄ d& t e d f e h e h f g e d d d d d d e d u …1AQa‘"
...

Und sie sollen auch genau so in dieser platzsparenden Form stehen bleiben und nicht via Chr$(...) zusammengebaut werden.
Also, welche Zeichen (Oem-Code) dürfen NICHT in so einen String eingesetzt werden, weil Profan sie ansonsten abändert (außer die schon oben genannten) ?

Gruß, Frank


Roland G. Hülsmann
Datum:13.09.02 08:46 Antwortenals Email verschicken (rgh-soft@t-online.de) 


Hallo Frank,

PROFAN selbst berücksichtigt nur den Backslash in Literalen, um die Umsetzung der Ersatzzeichen vorzunehmen. Bei der Umsetzung wird intern noch chr$(1) verwandt, das aber eh' nicht eingebbar ist und somit auch nicht in Literalen auftauchen kann. Wenn Du also auf die nicht eingebbaren Zeichen 0 - 31 (dezimal) verzichtest und den Backslash wegläßt, sollte es - zumindest von PROFAN aus - gehen.

(Ich weiß aber natürlich nicht, ob der von Dir benutzte Editor zur Eingabe der Literale mit allen Zeichen oberhalb von 126 klarkommt. Welche Zeichen bereiten denn noch Probleme?)

Gruß
Roland



Frank Abbing
Datum:13.09.02 10:50 Antwortenals Email verschicken  


Hallo Roland,

Probleme bereitet ansonsten kein Zeichen, jedenfalls keine visuellen.
Klar 0-32 scheiden aus, ebenso " und \.
(Was ist mit ' ?)

Ich versuche diese Texte an eine Dll zu übergeben und von dort die Strings zu lesen. Vorher wurden alle "Sonderzeichen" mit einem vorangestellten Zeichen (Space in diesem Fall) markiert und um den Wert 100 addiert. Liest die Dll also 32, dann wird dieser Wert ignoriert, der nächste Wert genommen und mit 100 subtrahiert. Also sollte im Endeffekt wieder eine originale Datei (nichts anderes enthalten die Strings) dabei herauskommen. Aber irgendwie fehlen immer eine Anzahl Zeichen, es werden also immer irgendwelche Zeichen verschluckt...
Im Dll-Code konnte ich keinen Fehler entdecken, in meinem Stringgenerator ebenfalls nicht...

Wie war das mit Zeichen 1 als intern verwendet ?
Jeder String wird doch mit einem Nullbyte abgeschlossen, richtig (Profan 7.5) ?

Gruß, Frank


Frank Abbing
Datum:13.09.02 16:38 Antwortenals Email verschicken  


Hallo, noch ein paar Zuzatzinfo's,

Richtext-Edit's oder Profan convertieren z.B. Chr$(160) zu Chr$(32). Das war schonmal eine böse Überraschung.

Roland, erkennt Profan nur das " als Trennung für einen Stringinhalt, oder z.B. auch ' oder andere ähnliche Zeichen ?

Gruß, Frank


Frank Abbing
Datum:15.09.02 15:03 Antwortenals Email verschicken  


Hallo Roland,

ich will nicht drängen, aber ich benötige immer noch die Info's von dir ;-))

Gruß, Frank


Roland G. Hülsmann
Datum:15.09.02 18:48 Antwortenals Email verschicken (rgh-soft@t-online.de) 


Hallo Frank,

es ist Wochenende! Ich sitze nicht durchgehend am Computer (auch wenn meine Familie mir das manchmal unterstellt ;-) ).

In Literalen (Strings in Anführungszeichen im Programmcode) können alle mit der Tastatur eingebbaren Zeichen ab 32 (Leerzeichen) vorkommen, natürlich mit Ausnahme des Anführungszeichen " selbst.
Ein Backslash ist als Doppel-Backslash einzugeben. Das einfache Anführungszeichen ' kann wie jedes andere Zeichen auch vorkommen.

Da Zeichen unter 32 eh' nicht in Literalen vorkommen können (da man sie über die Tastatur nicht eingeben kann), ist es also unerheblich, daß intern bei der Behandlung von Literalen das Zeichen chr$(1) temporär "mißbraucht" wird.

PROFAN-Strings können durchaus das Zeichen Chr$(0) enthalten. Für PROFAN ist das Nullbyte also KEIN Stringende-Zeichen. (Es handelt sich um die langen Strings von Delphi.) Die Länge eines Strings verbirgt sich in den vier Bytes VOR dem ersten Byte des Strings. (Dessen Adresse kann mit der Addr-Funktion ermittelt werden.) Das hat den Vorteil, daß die Strings wirklich ALLE Zeichen von 0 bis 255 enthalten können.

Gruß Roland




Frank Abbing
Datum:16.09.02 00:10 Antwortenals Email verschicken  


Hallo,

> ...es ist Wochenende! Ich sitze nicht durchgehend am Computer (auch wenn meine Familie mir das manchmal unterstellt ;-) ).

Kommt mir bekannt vor ;-))

Ok, danke für die Info's.
Allerdings hab' ich's bisher noch nicht erlebt, das hinter einem String keine Nullbytes gestanden haben.
Was passiert denn, wenn ein String "verkürzt" wird ?
Beispiel:

text$="Langer Inhalt"
text$="Kurz"

Werden die vorherigen Bytes durch Nullen gelöscht, oder änderst du nur die Info's für die Stringlänge ?
Ist wichtig für mich...

Gruß und Dank,
Frank


Frank Abbing
Datum:16.09.02 01:05 Antwortenals Email verschicken  


Hallo,

hier noch ein paar Info's.
Wenn ich Sonderzeichen in ein Edit/Richedit schreibe (nicht via Tastatur, sondern z.B. via SendKey), dann ändert das Edit/Richedit folgende Zeichen selbstständig:

$96 -> $2D
$97 -> $2D
$A0 -> gelöscht

Es gab doch mal jemanden, der eine Dll (Precompiler) geschrieben hat, um Variablennamen gegen sehr kurze Variablennamen umzutauschen. Dort wurden auch die wildesten Sonderzeichen benutzt, vielleicht der Grund, warum das Ganze bei mir nie richtig geklappt hat. Wer war das nochmal ?

Roland, trotzdem nochmal die Frage:
Was passiert denn, wenn ein String "verkürzt" wird ?
Beispiel:

text$="Langer Inhalt"
text$="Kurz"

Werden die vorherigen Bytes durch Nullen gelöscht, oder änderst du nur die Info's für die Stringlänge ?
Ist wichtig für mich...

Gruß und Dank,
Frank


Roland G. Hülsmann
Datum:16.09.02 08:17 Antwortenals Email verschicken (rgh-soft@t-online.de) 


Hallo Frank,

was beim Verkürzen genau passiert weiß ich nicht. Denn das mache nicht ich, sondern Delphi. Ich benutze die langen Strings von Delphi. Ich kann mir allerdings gut vorstellen, daß außer der Änderung der Längenangabe auch ein Nullbyte hinten dran gehängt wird, wie auch sonst offensichtlich immer ein Nulbyte am Ende eines langen Strings ist. Genaueres habe ich in der Delphi-Hilfe noch nicht gefunden.

Gruß
Roland



Frank Abbing
Datum: 16.09.02 09:23 Antwortenals Email verschicken  


Hallo Roland,

ok, danke.
Dann gehe ich also mal von einem abschließenden 0-Byte in Profan-Strings (ab Profan 7) aus...

Gruß, Frank


 Zurück zur Übersicht