AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

newbie probleme mit strings

Ein Thema von bmg4ever · begonnen am 22. Sep 2004 · letzter Beitrag vom 22. Sep 2004
Antwort Antwort
bmg4ever

Registriert seit: 16. Sep 2004
12 Beiträge
 
#1

newbie probleme mit strings

  Alt 22. Sep 2004, 07:36
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:
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;
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.
wo ist mein fehler.

P.S: dec(var) ist doch richtig zum runterzählen?
  Mit Zitat antworten Zitat
bmg4ever

Registriert seit: 16. Sep 2004
12 Beiträge
 
#2

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 07:57
Zitat von bmg4ever:
Code:
        while not (anzahlKA = 0) do begin

                while not (formel[run] = '(') do inc(run);
                dec(anzahlKA);

        end;
ok sorry erst gucken dann posten
ich hab da ne klammer vergessen bei der bedingung und noch nen logikfehler drin. aber jetz ist mir klarf wie ich weiter machen muss
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 08:15
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 08:23
Man könnte auch LastDelimiter verwenden.
  Mit Zitat antworten Zitat
bmg4ever

Registriert seit: 16. Sep 2004
12 Beiträge
 
#5

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 08:46
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.
  Mit Zitat antworten Zitat
bmg4ever

Registriert seit: 16. Sep 2004
12 Beiträge
 
#6

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 10:37
so ich häng nun ziemlich am schluss des tests:

Code:
Insert(temp, ergebnis, (posOP1 + 1));
der hier lässt sich einfach nicht bewegen. die insert funktion wird nicht ausgeführt.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#7

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 10:45
Zitat von Delphi-Hilfe:
procedure Insert(Source: string; var S: string; Index: Integer);

Beschreibung
In Delphi fügt Insert Source in S an der Position S[Index] ein.
Das heißt, Du musst nur "temp" und "ergebnis" in deinem Prozeduraufrufvertauschen und fertig

Gruß
Stephan

edit: Statt ShowMessage sollte Dir bei der Fehlersuche der Delphi-Referenz durchsuchenDebugger helfen
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
bmg4ever

Registriert seit: 16. Sep 2004
12 Beiträge
 
#8

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 10:50
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
tschuldgigung für die zeit, die ich dir geraubt hab.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 16:21
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)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#10

Re: newbie probleme mit strings

  Alt 22. Sep 2004, 16:27
Zitat von Christian Seehase:
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)
Letztendlich läuft es daurauf hinaus den String von Anfang bis zum Ende zu scannen und einen Baum aufzubauen (beim '(' einen Child anlegen und beim ')' zum Parent zurück - wenn der aktuelle Konten am Ende nicht Root ist oder beim Einlesen versucht wird den Parent von Root zu verwenden, ist der Ausdruck ungültig...).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz