Archiv verlassen und diese Seite im Standarddesign anzeigen : Steuerzeichen aus String entfernen in VB
Import-Script
15.07.2003, 11:13
Hallo, <BR> <BR>ich öffne eine Textdatei mit <BR> <BR> <BR>Dim wert(0 To 128) As String <BR>Open "c: est1.txt" For Binary As #1 <BR> <BR>For a = 1 To 128 <BR> Line Input #1, wert(a) <BR>Next <BR> <BR> <BR>nun hat fast jeder String z.B. wert(5) ein Steuerzeichen angehängt nähmlich &h 0E <BR> <BR>zuerst müßte man also Prüfen ob Steuerzeichen da und wenn ja da dann dieses von rechts entfernen - aber wie ? <BR> <BR>Tobias <BR>
Import-Script
15.07.2003, 15:54
for a=1 to 128 <BR>if right$(wert(a))=&h0d then wert(a) = left$(wert(a),len(wert(a)-1)) <BR>next a <BR> <BR><img src="http://progshop.com/elektronik/diskussion/clipart/smile.gif" border=0> <BR> <BR>meist ist neben dem 0d auch noch ein 0a dabei, also das ganze nochmal für 0a hinterherschieben, also erst die 0d entfernen, dann die 0a, oder wenn immer 0d0a dranhängt, left$(...len.. -2).
Import-Script
19.07.2003, 22:53
Hallo, <BR>Danke für euere Antworten aber es geht nicht so wie ich will ich habe folgendes eingegeben und erhalte eine Fehlermeldung namens : Fehler beim Kompilieren - Argument ist nicht optional ... <BR> <BR>Open "c: est1.pmw" For Binary As #1 <BR> <BR>Dim a As Byte <BR>Dim wert(10) As String <BR> <BR>For a = 1 To 10 <BR> <BR> Line Input #1, wert(a) <BR> If Right$(wert(a)) = &HE Then wert(a) = Left$(wert(a), Len(wert(a) - 1)) <BR>Next <BR> <BR>Close #1 <BR> <BR>was kann das schon wieder sein ?
Import-Script
20.07.2003, 00:16
Hallo, <BR> <BR>hab's selber gefunden an der stelle If Right$(wert(a)) fehlt ein ,1 also If Right$(wert(a),1)... <BR> <BR>ich habe das aber noch ganz anders gemacht ich habe immer eine stelle von recht's weggenommen weil er immer 1 Zeichen zuviel gelesen hat ... ? <BR> <BR> <BR> <BR>gruß Tobias
Import-Script
20.07.2003, 12:35
@Tobias: sorry, das passiert schonmal mit dem Parameter zuwenig. <BR>Der Compiler meckerts ja an. <img src="http://progshop.com/elektronik/diskussion/clipart/smile.gif" border=0>
Import-Script
20.07.2003, 12:46
sollte ja auch um kein vorwurf sein ... <BR> <BR>aber auf alle fälle geht's jetzt <BR> <BR>also Dank noch mal}
Import-Script
21.07.2003, 14:06
Hi, <BR> <BR>also BASIC habe ich mir auch schon zu C64 Zeiten schnell abgewöhnt. Weiss also nicht die genauen Befehle. Unter C lasse ich einen Pointer laufen, der bis zum Ende (Echte Null) den String abklappert. <BR> <BR>Am Einfachsten wird es sein, einen Wertebereich abzuprüfen, also alles kleiner als 65d ('A') ignorieren. Der obere Wert hängt davon ab, was man noch braucht, sollte man aber auch festlegen. <BR> <BR>Diese Zeichen kann man durch eine Null ersetzen, was aber unter einigen Programmiersprachen als Stringende aufgefasst wird (Dos benutzt glücklicherweise(?) "$"). Terminals ignorieren das und nutzen das sozusagen um Zeit zu gewinnen, ist also Harmlos. Ansonsten muss der restliche String aufgerückt werden, um dieses Zeichen zu lschen. <BR> <BR>Gruß <BR>Elmar
Import-Script
30.07.2003, 02:01
@elmar: ganz schlecht programmiert... genau von solchen routinen kommen buffer-overflows. <BR> <BR><a href="http://www.heise.de/security/artikel/37958" target=_top>http://www.heise.de/security/artikel/37958</a> <BR><a href="http://www.heise.de/security/artikel/38982" target=_top>http://www.heise.de/security/artikel/38982</a> <BR> <BR>ausserdem verwendet dos auch 0-terminierte strings. das mit dem $ ist nur ein weitverbreiteter irrglaube. vermutliche herkunft: assembler-sourcefiles.
Import-Script
30.07.2003, 03:22
Was den Irrglauben angeht, da kann ich nur zustimmen. Das rührt wahrscheinlich von der DOS-Funktion 09 (Zeichenausgabe) her. Da wird nämlich der String mit dem $ Zeichen terminiert, ansonsten wird fast immer das NUL Zeichen verwendet (siehe z.B. "MASM" Der Makro-Assembler von Microsoft, S. Letzel u. R. Meyer). <BR> <BR>Danke für die guten Links! <IMG SRC="http://progshop.com/elektronik/diskussion/clipart/happy.gif" ALT=":-)" BORDER=0> <BR> <BR>P.S.: Mit nem Zeiger den String bis zur abzuklappern ist eigentlich gängige Praxis oder? <BR> <BR>Gruß Gerd
Import-Script
30.07.2003, 10:48
Hi, <BR> <BR>auf den Soft-Int 09h wollte ich hinaus. Dabei handelt es sich ja um die wichtigste Ausgaberoutine. Da Terminals ignorieren, hat sich Billy halt nach einem anderen Stringendezeichen umgesehen. Verwirrend, nicht? <BR> <BR>Das abklappern nach machen alle Stringfunktionen unter C. Pascal hat, so weis ich weiss als erstes Zeichen die Länge des Strings gespeichert. Dafür fehlt die am ende. <BR>Eine Gesunde Mischung stellt der Ansistring dar. Der hat am Anfang die Länge gespeichert und hört mit der auf. Wie schnell hat man durch exzessive Pointeroperationen die überbraten... <BR> <BR>Gruß <BR>Elmar
Import-Script
30.07.2003, 11:02
Leider muss ich Euch korrigieren: Ihr redet schon wieder von C. Das Problem betrifft aber BASIC und da läuft es wie zur guten alten Zeit (aus der es stammt) - und auch fast genauso wie in Pascal. <BR> <BR>Ein String hat eine maximale Länge von 255 Bytes, eigentlich 256 aber das erste ist die Längenangabe. Das war ja genau das Dilemma was zur Erfindung der Nullterminierten Strings führte, mit all den Nebeneffekten, die in den Artikeln "heise..." beschrieben sind. Mal drauf achten: Solche!!! Stack und Buffer Probleme gibt es in Basic und Pascal nicht. Andere Stackprobleme sehrwohl, gerade in Basic, das die Definition von neuen Variablen zur Laufzeit zulässt, dto umdimensionieren von Feldern usw. Das führt dann schonmal zu Stackproblemen. Ebenso das Wachsen von Strings, weil diese ja Speicher brauchen (allerdings nicht auf dem Stack) sondern im Datensegment - und da ist bei 64k Fini!!! --> auf DOSen!!! --> nicht bei anderen Rechnern. Trotzdem, eins ist klar: Auch bei anderen Rechnern ist irgendwann der Speicherplatz fertig. <BR>Übrigens belegt ein Stringdeskriptor 7 Bytes (in Quickbasic). Also ist auch bei 65536/7 also ca. 8000 Strings wohl auch Schluss (auf DOSen!!!). Ich habs noch nicht probiert, wahrscheinlich liegt die magische Grenze im DOSen-Basic mal wieder bei 255..<img src="http://progshop.com/elektronik/diskussion/clipart/happy.gif" border=0> <BR> <BR>Noch eins aus Quickbasic Handbuch: Übergabe eines Strings an ein C Programm: <BR>1.) Das Schlüsselwort "SADD" muss verwendet werden, damit die Adresse des Strings übergeben wird. <BR>2.) Der String muss ein CHR$(0) am Ende haben. <BR> <BR>Text$ = "Hallo" + CHR$(0) <BR>CALL Zeichen(SADD(Text$),LEN(Text$)): REM Zeichen ist die Funktion im C Programm. <BR> <BR>C-Programm: <BR> <BR>void Zeichen(s,laenge) <BR>char *s; <BR>int laenge; <BR>{ <BR>puts(s); <BR>} <BR> <BR>wobei laenge nur eine Dummyfunktion hat. Wichtig ist aber, dass im BASIC das CHR(0) generiert wird, sonst läuft C in den Wald in dieser Form, <BR>oder man wertet laenge halt aus.<img src="http://progshop.com/elektronik/diskussion/clipart/smile.gif" border=0>
Import-Script
31.07.2003, 20:13
Gerd: Mit nem Zeiger den String bis zur abzuklappern ist eigentlich gängige Praxis oder? <BR> <BR>das stimmt schon. und da liegt das problem, man sollte nicht nur auf warten, sondern auch auf das ende des arrays. also auch checken, ob sich der pointer noch innerhalb des buffers aufhält. <BR> <BR> <BR> <BR> <BR>Elmar: Das abklappern nach machen alle Stringfunktionen unter C. <BR> <BR>die standard-c-routinen schon, aber es gibt diverse string-libraries, welche die buffergrösse berücksichtigen. und ich würde es sehr sinnvoll finden, wenn alle programmierer solche libraries verwenden würden. dann gäbe es nämlich keine buffer-overflows...
Import-Script
31.07.2003, 21:54
Hi, <BR> <BR>das stimmt schon, aber wie wird bei einem normalen String die Buffergröße festgestellt? Durch abklappern bis natürlich... <BR> <BR>Es sei denn, dass die länge im String enthalten ist. Also bei einem AnsiString beispielsweise. <BR> <BR>Gruß <BR>Elmar
Import-Script
31.07.2003, 22:23
Ich glaube dr_evil meint, dass man in einen (vorhandenen) Zielpuffer nicht mehr Zeichen hinein kopiert, als seiner Größe entspricht. Also nicht nur solange "abklappern" bis die auftritt (vielleicht tritt sie nie auf <IMG SRC="http://progshop.com/elektronik/diskussion/clipart/happy.gif" ALT=":-)" BORDER=0>), sondern spätestens beim Pufferende aufhören bzw. ne Fehlermeldung ausgeben. <BR> <BR>Gruß Gerd
Import-Script
01.08.2003, 01:51
Hey Ihr C-Programmierer, welch weise Worte...<img src="http://progshop.com/elektronik/diskussion/clipart/smile.gif" border=0> <BR> <BR>Schön, mal sowas zu hören; mal nicht sinnlos auf Gedeih und Verderb Zeiger auf Zeiger zeigen zu lassen, die auf ZeigerZeiger zeigen (ohne vorher mal zu gucken was Sache ist). <BR> <BR>"Wenn Fliegen hinter Fliegen fliegen, fliegen Fliegen Fliegen nach" <img src="http://progshop.com/elektronik/diskussion/clipart/happy.gif" border=0>
Powered by vBulletin® Version 4.1.7 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.