![]() |
newbie probleme mit strings
hi leute
ich hab folgendes problem. ich nutze borland delphi 6 und habe einen button und ein editfeld (keine sorge ich bin noch nicht fertig sondern befinde mich in den ersten zügen und komm schon nicht weiter). nun wollte ich mit folgendem quelltext auf druck des buttons gerne die position der innersten klammerauf haben.
Code:
angenommen im editfeld steht nun sowas wie "12345(7". dann sollte der run=6 sein, was er aber nicht ist. er behält immer den wert null.
procedure TForm1.Button1Click(Sender: TObject);
const klammern = ['(',')']; var run, anzahlKA, posKA: integer; begin run := 0; formel := Edit1.Text; anzahlKA := StrCharCount(formel, '('); while not anzahlKA = 0 do begin while not (formel[run] = '(') do inc(run); dec(anzahlKA); end; // posKA := run; EDit1.Text := IntToStr(run); end; wo ist mein fehler. P.S: dec(var) ist doch richtig zum runterzählen? |
Re: newbie probleme mit strings
Zitat:
ich hab da ne klammer vergessen bei der bedingung und noch nen logikfehler drin. aber jetz ist mir klarf wie ich weiter machen muss |
Re: newbie probleme mit strings
Hai bmg4ever,
ersteinmal: "Herzlich Willkommen in der Delphi-PRAXIS". Ich habe gleich einen kleinen Tip für dich. Versuche möglichst immer Code der "etwas Macht" von Ereignissen der Benutzeroberfläche zu trennen. In deinem Falle würde ich also den Code nicht in das .OnClick des Buttons setzen sonder dafür eine eigene Funktion schreiben. Das hat den Vorteil das Du denn Code zum einen auch an andere Stelle verwenden kannst und Du keine "Probleme" bekommst wenn Du anstelle des Buttons das ganze z.B. über einen Menüpunkt machen möchtest. Wenn ich das richtig verstanden habe möchtest Du also die Position des letzen ( im String ermitteln? Hier mal ein Beispiel wie ich es gemacht hätte (was nicht heissen soll das es besser ist).
Delphi-Quellcode:
function KlammerPosition (value : String) : Integer;
var ndx : Integer; // Zählervariable für Schleife foo : Integer; // Hilfsvariable für Zählung begin foo := 0; // Wenn keine Klammer gefunden for ndx := 1 to Length (value) do begin if (value[ndx] = '(') then foo := ndx; end; result := foo; // Ergebniss end; procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin i := KlammerPosition (Edit1.Text); if (i > 0) then begin ShowMessage ('Die letze "(" ist an Position ' + IntToStr (i)); end else begin ShowMessage ('Keine "(" gefunden'); end; end; |
Re: newbie probleme mit strings
Man könnte auch LastDelimiter verwenden.
|
Re: newbie probleme mit strings
danke nico
das kommt auch noch in funktionen. ich will, dass mein Taschenrechner jetzt auch klammern kann ;), aber ich befinde mich noch in der testphase der syntax, ob das überhaupt so funzt wie ich mir das vorstelle. deshalb hab ich losgelöst von meinem bestehenden punkt-vor-strich calculator ein neues testprojekt anfgefangen, um mir nix im alten quelltext kaputt zu machen. aber nimms mir nicht übel. zwecks übung werde ich es auch so machen wie ich mir das vorstelle, auch wenn das nicht die feinste "grammatik" ist. ;) mittlerweile funzt es auch schon den inhalt der klammern nacheinander zu extrahieren. |
Re: newbie probleme mit strings
so ich häng nun ziemlich am schluss des tests:
Code:
der hier lässt sich einfach nicht bewegen. die insert funktion wird nicht ausgeführt.
Insert(temp, ergebnis, (posOP1 + 1));
temp hat hier nach einer delete function in meinem test nur noch ein leerzeichen als inhalt. ergebnis ist eine zahl als string. und posOP1 ist 0. all das stimmt. ich habs durch unabhängige ausgaben überprüft (ich ersticke schon fast in showmessages ;) ) warum insertet der nun immer nichts an der stelle 1. der string temp ist nachher genauso wie vorher. |
Re: newbie probleme mit strings
Zitat:
Gruß Stephan edit: Statt ShowMessage sollte Dir bei der Fehlersuche der ![]() |
Re: newbie probleme mit strings
lol!
tausend dank steve. wer lesen kann ist klar im vorteil. nochmal so ein schnellschuss. ist das peinlich. man merkt auch noch voll, dass ich ein newbie bin :-D tschuldgigung für die zeit, die ich dir geraubt hab. |
Re: newbie probleme mit strings
Moin bmg4ever,
wenn ich Dich richtig verstanden habe, möchtest Du ja die innerste geöffnete Klammer haben. Dazu würde ich mir die erste geschlosse suchen (z.B. mit pos), und anschliessend, von dieser Position ausgehend, nach links gehen, und die erste ( suchen. Dann hättest Du genau die Positionen des innersten Klammerpaares. (das setzt natürlich voraus, dass die Klammern immer paarweise auftreten, und korrekt gesetzt sind) |
Re: newbie probleme mit strings
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz