AnsiString schneiden die 2te
-
ist ganz einfach - du liest
SubString(i,i+3)aus - aber SubString gibt dir nicht die Zeichen VON i BIS i+3 zurück, sondern ANFANGEND BEI i gibt es dir DIE NÄCHSTEN i+3 zeichen - der zweite parameter gibt nämlich nicht die obere grenze der schleife, sondern die anzahl der zeichen an, also kriegst du hier die zeichen i bis i**+i**+3...
mach mal so:
AnsiString test = tMsg.SubString(i, 3);beim anderen aufruf kriegste das gleiche problem (vielleicht auch nicht, wenns nur am anfang des Strings aufgerufen wird - aber aus gründen der korrektheit:
stPrefix.tCompleteString = tMsg.SubString(iStart, iEnd-iStart);oder benutz einfach diese Funktion, die ich mal grad zusammen gebastelt hab (und getestet, was hier viele nicht machen ^^)
AnsiString SubString_Von_Bis(const AnsiString& str, int von, int bis) { return(str.SubString(von,bis-von+1)); }das gibt dir die zeichen von "von" bis "bis" (einschließlich) ^^
MfGAlgoMan
-
Hallo,
das AnsiString test war nur zum gucken wo er sich befindet - bitte ignorieren.
Beim debuggen krieg ich im 2ten String raus:
AnsiString.SubString(22, 26) -> absolut richtig, trotzdem schneidet er es nicht so wie es sein soll.
Ich werds jetzt mit den standard c Funktionen machen, obwohl ich eigentlich alles in Klassen machen wollte zum Lernen. string.h liefert da ja alles noetige.
Sollte jemand den Fehler finden, (der nicht am SubString selbst liegen kann, denn der Debugger gibt die richtigen Zahlen an), bin fuer jeden Tipp dankbar.lg
Oli
-
Oli21 schrieb:
AnsiString.SubString(22, 26) -> absolut richtig, trotzdem schneidet er es nicht so wie es sein soll.
was soll er den schneiden und wa schneidet er?
AnsiString asText = asText.SubString(22, 26);würde aus dem String asText ab dem 22. Zeichen 26 zeichen ausschneiden und in asText Speichern. (also von zeichen 22 bis und mit 47)
mfg
BigNeal
-
Das ganze scheitert daran, dass nciht beschrieben werden kann, was wann wie erfolgen soll.
Das dies
:irc.de.euirc.net 001 slackbot :Welcome to the euIRC network user!@host...blabla
Der Ausgangsstring ist, konnte geklärt werden, aber nicht was generell auskommen soll.
Einmal soll nach Leerzeichen gesucht werden um '001' raus zu bekommmen, mal spielt es keine Rolle.
Entweder es gibt hier eine oder mehrere Regeln mit denen das gewünschte Ergebnis (was bisher noch so richtig keiner kennt) erzielt werden kann oder nicht. Wenn nicht ist halt der String mit ganz normaler Stringverarbeitung im "Einzelfall" zu lösen.
Das Verlagern auf eine andere Technik (C-Funktionen) löst keine Logik- oder Konzeptprobleme. Die Klasse String hat fast alles was man braucht. Für den Rest (splitten) gab es Links. Was sollen C-Funktionen also bringen?
AnsiString.SubString(22, 26) -> absolut richtig, trotzdem schneidet er es nicht so wie es sein soll.
Wenn er das nicht so macht wie er soll, liegt das an falschen Anweisungen.
-
Also nochmal...
ich erhalte vom IRC Server eine Message die ich in einem AnsiString speichere.
Für das genaue aufsplitten (was ich hier nicht erklaeren werde) bitte rfc lesen - das ist mir einfach zuviel.
Fuer mich ist jetzt einfach nur wichtig wieso er nicht die 3 Zeichen (4 mit dem " ") rausschneidet, obwohl es der debugger richtig anzeigt.
In C funktioniert es, und das ist was fuer mich wichtig ist.Es kann generell alles moegliche rauskommen, je nachdem ob client-msg, server-msg, unknown-msg etc.
Einmal soll nach Leerzeichen gesucht werden um '001' raus zu bekommmen, mal spielt es keine Rolle.
es spielt alles eine Rolle, aber vorerst ist nur die Serverantwort (die 001 - das command) wichtig, damit ich weiter machen kann.
Entweder es gibt hier eine oder mehrere Regeln mit denen das gewünschte Ergebnis (was bisher noch so richtig keiner kennt) erzielt werden kann oder nicht.
bitte rfc lesen - aufsplitten damit ich jede moegliche Serverantwort verarbeiten und entsprechen ausgeben kann.
Wenn er das nicht so macht wie er soll, liegt das an falschen Anweisungen.
was denn fuer Anweisungen?
lg
Oli
-
(was ich hier nicht erklaeren werde) bitte rfc lesen - das ist mir einfach zuviel.
Sorry, aber du hast das Problem, wenn du es nicht mal in Worte fassen kannst.... Auch nicht mal die rfc Nummer angegeben. Soll man jetzt alle durchsuchen??
Hier kriegst du deine Zahl, egal wieviel Text davor ist, Hauptsache die Zahl ist durch ein Space vom dem Text davor getrennt.
String test=":irc.de.euirc.net 001 slackbot :Welcome to the euIRC network user!@host...blabla "; TStringList *liste=new TStringList(); split(liste,test," "); String zahl=liste->Strings[1]; delete liste;was denn fuer Anweisungen?
Solltest du eigentlich schon in den ersten Minuten beim programmieren gelernt haben. Wenn das
AnsiString.SubString(22, 26)
nicht funktioniert, liegt es an einer falschen Anweisung. Der Computer macht kaum Fehler
-
http://www.irchelp.org/irchelp/rfc/rfc2812.txt
na soviele rfc's ueber das irc protocol gibts nicht.
und jetzt kurz in worte gefasst: mir ist scheiss egal wie es sonst geht (gibt mio. moeglichkeiten), ich habs in c geloest und es funktioniert einwandfrei.
sollte jemand wissen wieso das mit der klasse ansistring nicht funktioniert, bin fuer jeden tipp dankbar.http://olze.ath.cx/debug.JPG
hier ein screenshot, links stehen die local variables, wo man iEnd und iStart sehen kann. Das hint zeigt den Inhalt der Variablen.Sorry, aber du hast das Problem, wenn du es nicht mal in Worte fassen kannst.... Auch nicht mal die rfc Nummer angegeben. Soll man jetzt alle durchsuchen??
keiner zwingt dich mir zu helfen, also lass es doch wenn es dich aufregt?
Solltest du eigentlich schon in den ersten Minuten beim programmieren gelernt haben.
Na wenn du so ein god-like-programmer bist dann kannste mir ja genau sagen warum es _genau_ so nicht geht?
lg
oli
-
Reichlich unverschämter Ton für nen Bittsteller, meinst du nicht, Oli? Wo sollte denn da die Motivation liegen dir zu Helfen?
Ich erklärs dir mal:
DU als Fragesteller bist in einer Bringschuld. Es ist deine Aufgabe, die Leute mit Informationen zu versorgen.Ich könnte jetzt mal im gleichen Stil antworten wie du: Du benutzt SubString falsch. Was genau es ist, bitte Borland Hilfe konsultieren. Ist einfach zuviel.
Und bevor du jetzt nen dicken Hals kriegst, schlucks nochmal runter und denk drüber nach... ok?
-
Du benutzt SubString falsch.
Das ist dir schon mehrfach hier erklärt worden
ich habs in c geloest und es funktioniert
Wo hast du da C benutzt?? Im Screenshot nix zu sehen.
Na wenn du so ein god-like-programmer bist dann kannste mir ja genau sagen warum es _genau_ so nicht geht?
Ganz ehrlich-> könnt ich bestimmt, aber ich habe keine Lust so ein verwurschtelten Code durchzugehen, ohne zu wissen was bei dabei rauskommen soll. Des Weiteren ist die von mir gezeigt Lösung um etliches kürzer.
-
Hallo,
danke fuer die Antwort und sorry fuer den "unverschaemten Ton"; ich krieg sicher keinen dicken Hals.
"Ich könnte jetzt mal im gleichen Stil antworten wie du: Du benutzt SubString falsch. Was genau es ist, bitte Borland Hilfe konsultieren. Ist einfach zuviel."
Mehr wollte ich eigentlich auch nicht hoeren - haette ja sein koennen das jemand auf anhieb sieht wo das Problem ist.
-
Na is doch klar das im Screenshot nix zu sehen ist, will ja wissen warum es so mit AnsiString nicht geht.
Ganz ehrlich-> könnt ich bestimmt, aber ich habe keine Lust so ein verwurschtelten Code durchzugehen, ohne zu wissen was bei dabei rauskommen soll.
hab ich jetzt wohl schon oft genug erklaert... weiss nicht wie ich es noch erklaeren soll damit du mich verstehst.
-
Ganz langsam:
Das ist der String
String test=":irc.de.euirc.net 001 slackbot :Welcome to the euIRC network user!@host...blabla ";
Was willst du daraus haben?
-
ok also,
stPrefix.tCompleteString <- hier soll :irc.de.euirc.net rein
stCommand.tCompleteString <- hier soll 001 reindas wars auch schon

lg
Oli
-
dan öffne mal die BCB-Hilfe
lies mal unter AnsiString nach, was diese Klasse alles kann.
spezielle aufmerksamkeit kannst du auf AnsiString::Pos() und AnsiString::SubString() werfensorry, aber mit solchen sachen muss man lernen klarzukommen..
wenn du etwas spezielles aus der hilfe nicht verstehst, frag konkret danachmfg
BigNeal
-
int i = 1; int x = 1; String Str; while (i < Edit1->Text.Length()) { Str = Edit1->Text.SubString(i,1); if (Str == " ") { ListBox1->Items->Add(Edit1->Text.SubString(x,i-x)); x = i + 1; } i = i + 1; } ListBox1->Items->Add(Edit1->Text.SubString(x,i-x+1));sowas?
-
Kann mich nur wiederholen:
String test=":irc.de.euirc.net 001 slackbot :Welcome to the euIRC network user!@host...blabla "; TStringList *liste=new TStringList(); split(liste,test," "); stPrefix.tCompleteString=liste->Strings[0]; stCommand.tCompleteString=liste->Strings[1]; delete liste;
-
Oh man... sry, hab in der Hilfe nicht nachgeschaut, dachte man muss SubString(startpos, endpos) angeben, dabei muss man SubString(startpos, anz_chars) angeben

danke, jetzt klappts.
LG
Oli
-
Edit: hupps, einige posts dazugekommen seit ich auf antworten geklickt hab...
ich sags nochmal: SubString(x,y) liefert nicht die zeichen von zeichen nr x bis zeichen nr y, sondern ab zeichen nr x die nächsten y zeichen...
zB
AnsiString test = "123456789"; AnsiString a = test.SubString(1,3); AnsiString b = test.SubString(3,4); AnsiString c = test.SubString(3,1);ergibt
a = "123", b = "3456" und c = "3"also wenn du die zeichen von zeichen nr x bis (einschließlich) zeichen nr y haben willst, machste
strTest.SubString(x,y-x+1);und wenn du das y-te zeichen nicht mehr mit drin haben willst:
strTest.SubString(x,y-x);wenn du mal meine letzte antwort GELESEN hättest anstatt zu bemängeln, dass sie das ergebnis im falschen string speichert, wüsstest du das inzwischen und hättest das Problem nicht mehr
WENN
Oli21 schrieb:
AnsiString.SubString(22, 26)
dir 4 zeichen gibt, dann liegt das daran, dass der string 25 zeichen lang ist und der daher ZUFÄLLIG an der richtigen stelle aufhört.
-
ja stimmt, muss deinen Beitrag ueberflogen haben... hab dein posting grad durchgelesen und da steht was ich endlich rausgefunden hab - werd das naechste mal genauer lesen