Hilfe mit zu schnellen Daten
-
ich habe jetzt ansistring pos ausprobiert und festgestellt, das mir das ganze die position eines zu suchenden objektes zurückgibt...
aber was fang ich dann damit an?
-
AnsiString hat ne schöne MEthode "SubString"...
@MacFly: Womit wir wieder bei einem Protokoll wären... (der Kreis schliesst sich) (o;
@F98 Och bitte... der bricht sich keine Flügel sondern ist dabei seine Schwingen zu stärken... Ich bin überzeugt die ERfahrung tut ihm gut...
-junix
-
So, danke bis hierhin...werde nun erstmal nicht am pc sein können würde mich aber morgen freuen euch alle wieder zu belästigen mit meinen problemen.
und dnake das ihr mir die lösung nicht einfach gegeben habt...
-
Ich werd gleich irre!!!
Ich nutze substring(von wo als int, bis wo als int) und bekomme einen int wieder...WIESO!!!! Substring soll doch nen string liefern, keine zahl.
in dem folgenden beispiel ist der string s = "3:los"AnsiString s, ergebniss, search, bla; s = Socket->ReceiveText(); //s = "3:los" iss so ok... int stringlange = s.Length(); //stringlange = 5 auch ok... bla = s.Pos(":"); //bla bis : = 2 auch ok... ergebniss = stringlange - bla.Length(); //ergebniss = 4 auch ok... search = s.SubString(ergebniss.Length(), bla.Length()); //search = 3 :eek: WIESO????Definition von Substring sagt, das substring einen ANSISTRING
ich werd irre
-
Schauen wir uns das doch einmal an:
AnsiString s, ergebniss, search, bla; s = Socket->ReceiveText(); //s = "3:los" iss so ok... int stringlange = s.Length(); //stringlange = 5 auch ok...Soweit ok...

bla = s.Pos(":"); // Pos gibt einen int Wert zurück, keinen String ergebniss = stringlange - bla.Length(); // String = integer - integer Soll, bitte schön, was bewirken? search = s.SubString(ergebniss.Length(), bla.Length()); // Warum hier gerade 3 drin steht, keine Ahnung, aber auf jeden Fall auch niemals das richtige...AnsiString s, ergebniss, int pos, anzahlzeichen; s = Socket->ReceiveText(); pos = s.AnsiPos(":"); if (pos) { ergebniss = s.SubString(pos + 1, s.Length() - pos); anzahlzeichen = s.SubString(1,pos).ToIntDef(-1); // bei Fehler bei Konvertierung -1 }So und jetzt möchte ich, dass Du mir erklärst was in meinem Code passiert.

-
ok....räusper...
Joe_M. schrieb:
[cpp] AnsiString s, ergebniss; -> anlegen ansistrings int pos, anzahlzeichen; -> anlegen integer s = Socket->ReceiveText(); -> socket ne runde lesen lassen pos = s.AnsiPos(":"); -> nachschauen an welcher stelle das : steht und in pos schreiben if (pos) -> wenn pos gefüllt iss... { ergebniss = s.SubString(pos + 1, s.Length() - pos); -> alles vor dem string (längenangabe und :) wegschneiden anzahlzeichen = s.SubString(1,pos).ToIntDef(-1); -> auslesen des anzahl zeichen wertes vor dem : } [/cpp]So und jetzt möchte ich, dass Du mir erklärst was in meinem Code passiert.

Hoffe meine umgangssprache stört nicht...
funktioniert auch wunderbar, nur das damit immernoch nicht mein problem gelöst ist...er baut immernoch einen doppel string wenn die verbindung zu langsam ist...sieht dann so aus: los9:127.0.0.1 soll aber 1x los und einmal 127.0.0.1 in eine meiner weiteren funktionen weitergeben...deswegen mach ich ja den ganzen umsatnd... bei fragen...steht alles in der historie oder ich schriebs gern nochmal
-
Natürlich solltest du die Längenangabe die du mitsendest schon auswerten (o: Mit der kannst du dann auch das definerte Stück rausschneiden...
-junix
-
Darkwing schrieb:
ergebniss = s.SubString(pos + 1, s.Length() - pos); -> alles vor dem string (längenangabe und :) wegschneiden }Damit bin ich nicht ganz einverstanden, ich schneide nichts weg, sonderen weise ergebniss alles nach dem : zu. (Aber ich gehe trotzdem davon aus, dass Du das richtige gemeint hast
)Bei deinem ursprünglichen Problem kann ich Dir leider nicht helfen, da ich mich bisher nicht mit Sockets auseinander setzten mußte (Dickes Sorry).
Aber vielleicht geht ja folgendes:
AnsiString s, ergebniss; int pos, anzahlzeichen; s = "3:los9:127.0.0.1"; // geb ich jetzt einfach mal vor... while (!s.IsEmpty()) { pos = s.AnsiPos(":"); if (pos) { anzahlzeichen = s.SubString(1,pos -1).ToIntDef(-1); // da war ein Fehler: muss natürlich pos - 1 heißen ergebniss = s.SubString(pos + 1, anzahlzeichen); // hier irgendetwas mir ergebniss machen, zb in TStringList schreiben s = s.Delete(1,pos + anzahlzeichen); } }Noch der Hinweis: In diesem Beispiel ist nur eine rudimentäre Fehlerprüfung, die auf jeden Fall eines Ausbaus bedarf...
-
Hmmmm
Aber alles was wir hier jetzt gemeinsam haben wachsen lassen, bringt mich der lösung meines leider nicht näher...klar, ich habe wieder was in saxhen stringverarebitng gelernt....danke dafür, aber wie zum henker kann ich vermeiden, das sowas hier : 127.0.0.19:127.0.0.1 dabei rauskommt...es soll doch immer 127.0.0.1 rasukommen oder was halt für eine ip ankommt...
kann man nicht irgendwas wieAnsiString s, ergebniss, int pos, anzahlzeichen; s = Socket->ReceiveText(); pos = s.AnsiPos(":"); while(pos) { ergebniss = s.SubString(pos + 1, s.Length() - pos); anzahlzeichen = s.SubString(1,pos).ToIntDef(-1); "auswertung in meiner funktion JEDES mit : versehenden Strings"; }schreiben?
Ich muss doch irgendwie alle strings, die kommen und ein : enthalten abschleifen können, damit ich ALLE einzeln in mener liste habe, auch wenn sie kombiniert (127.0.0.19:127.0.0.1)empfangen wurden.
Bitte gebt mir wieder ein paar wine mit dem zaunpfahl...
-
ja, sieh Dir mein letztes Posting an...
-
Danke...ich habs jetzt!!!!
Man sieht das logisch aus wenn mans erst hat....
DANKE