<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Grundform eines Ausdruckes überprüfen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich lese eine Zeile eines TRichEdit's aus, die der Benutzer eingibt. Jetzt möchte ich überprüfen, ob diese Zeile einer gewissen Grundstruktur entspricht.</p>
<p>Einfaches Beispiel: Eingabe der Zeile im TRE.</p>
<pre><code>1. Zeile: a=4
2. Zeile: b=5
3. Zeile: c=addieren(a,b)
</code></pre>
<p>a und b sind Variablen, die, wenn wie in Zeile 1 und 2 abgebildet eigegeben wurden, abgespeichert und als Items in einem TListView angezeigt werden.</p>
<p>Jetzt möchte ich die 3. Zeile auswerten, und zwar so, dass ich erst überprüfe, ob es die Grundstruktur 'Ergebnis=addieren(Platzhalter1,Platzhalter2)' entspricht.<br />
Die Platzhalter können beliebige Variablennamen annehmen. Wenn die Grundstruktur stimmt, soll dann der Name für Platzhalter1 und Platzhalter2 angenommen werden, hier a und b. Danach wird überprüft, ob ein Eintrag im TListView für a und b existiert. Wenn ja, werden diese über LoadFromFile eingeladen und es soll das Ergebnis der Addition von a und b auf c abgespeichert werden.</p>
<p>Mir geht es jetzt nur darum, wie ich die Grundstruktur überprüfen kann.<br />
Das ich zum Beispiel im vorhinein ausschließen kann, dass der Benutzer etwa<br />
'c=attition(a,b)' eingibt etc.. Damit würde sich im Weiteren viel Rechenzeit einsparen lassen, da man hier abbrechen und eine Fehlermeldung ausgeben könnte.</p>
<p>Danke und liebe Grüße</p>
<p>Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188926/grundform-eines-ausdruckes-überprüfen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 06:40:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188926.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Aug 2007 11:57:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 11:57:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich lese eine Zeile eines TRichEdit's aus, die der Benutzer eingibt. Jetzt möchte ich überprüfen, ob diese Zeile einer gewissen Grundstruktur entspricht.</p>
<p>Einfaches Beispiel: Eingabe der Zeile im TRE.</p>
<pre><code>1. Zeile: a=4
2. Zeile: b=5
3. Zeile: c=addieren(a,b)
</code></pre>
<p>a und b sind Variablen, die, wenn wie in Zeile 1 und 2 abgebildet eigegeben wurden, abgespeichert und als Items in einem TListView angezeigt werden.</p>
<p>Jetzt möchte ich die 3. Zeile auswerten, und zwar so, dass ich erst überprüfe, ob es die Grundstruktur 'Ergebnis=addieren(Platzhalter1,Platzhalter2)' entspricht.<br />
Die Platzhalter können beliebige Variablennamen annehmen. Wenn die Grundstruktur stimmt, soll dann der Name für Platzhalter1 und Platzhalter2 angenommen werden, hier a und b. Danach wird überprüft, ob ein Eintrag im TListView für a und b existiert. Wenn ja, werden diese über LoadFromFile eingeladen und es soll das Ergebnis der Addition von a und b auf c abgespeichert werden.</p>
<p>Mir geht es jetzt nur darum, wie ich die Grundstruktur überprüfen kann.<br />
Das ich zum Beispiel im vorhinein ausschließen kann, dass der Benutzer etwa<br />
'c=attition(a,b)' eingibt etc.. Damit würde sich im Weiteren viel Rechenzeit einsparen lassen, da man hier abbrechen und eine Fehlermeldung ausgeben könnte.</p>
<p>Danke und liebe Grüße</p>
<p>Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339497</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Mon, 06 Aug 2007 11:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 12:21:13 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Am einfachsten mit den AnsiString-Methoden Pos und SubString. Siehe BCB-Hilfe.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339527</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 06 Aug 2007 12:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 14:03:31 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.</p>
<p>Aber das mit den AnsiString Methoden mache ich schon die ganze Zeit. Für größere Ausdrücke wird das umso komplizierter.</p>
<p>Dann müsste das ganze ja in Etwa so aussehen:</p>
<pre><code class="language-cpp">double erg,var1,var2;
bool bvar1,bvar2;
int linecount=RichEdit1-&gt;Lines-&gt;Count-1;
AnsiString str=RichEdit1-&gt;Lines-&gt;Strings[linecount];
TStringList *list1 = new TStringList();
TStringList *list2 = new TStringList();

try {
     AnsiString Ergebnis = str.SubString(1,str.Pos('=')-1);
     AnsiString Var1N = str.SubString(str.Pos('(',str.Pos(',')-str.Pos('('));
     AnsiString Var2N = str.SubString(str.Pos(','),str.Pos(')')-str.Pos(','));

     for (int i=0;i&lt;ListView1-&gt;Items-&gt;Count;i++)
         {
          if (ListView1-&gt;Items-&gt;Item[i]-&gt;Caption==Var1N)
              {list1-&gt;LoadFromFile(...);
               var1=StrToFloat(list1-&gt;Strings[1].Trim());
               bvar1=true;
              } 
          else if (ListView1-&gt;Items-&gt;Item[i]-&gt;Caption==Var2N)
              {list2-&gt;LoadFromFile(...);
               var2=StrToFloat(list2-&gt;Strings[1].Trim());
               bvar2=true;
              }
          else if (bvar1 &amp;&amp; bvar2)
              {break;break;}
         }

     if (str.SubString(str.Pos('=')+1,str.Pos('(')-str.Pos('=')-1)==&quot;addieren&quot;)
         {erg=var1+var2;RichEdit1-&gt;Lines-&gt;Add(FloatToStr(erg));}

delete list1;
delete list2;

     }
catch(...)
     {
      ShowMessage(&quot;Fehler bei der Eingabe&quot;);
     }
</code></pre>
<p>Hab es jetzt nicht ausprobiert aber so in etwa wäre es für dieses einfache Beispiel.<br />
Könnte mir aber vorstellen, dass es noch weitaus komplizierter werden könnte, wenn ich mehrere Kommatas in einer Anwendung habe, bzw. wenn die Variablen keine Zahlen sondern Matrizen sind.</p>
<p>Wenn es keine einfachere Lösung gibt, dann werd ich mich wohl damit begnügen müssen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Danke und liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339608</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 14:14:11 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>&quot;Einfacher&quot; geht es nicht. Du kannst aber den Hauptteil, nämlich das Parsen, aber an darauf speziallisierte Librarys abgeben. Leider hat der Builder (zumindestens mein 5er) keine RegEx-Unterstützung. Du könntest also eine externe Library suchen wie boost, das eine RegEx-Verarbeitung beherscht.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339616</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 14:25:36 GMT]]></title><description><![CDATA[<p>Okay.</p>
<p>Dann schau ich mich mal schlau, was das Thema angeht.</p>
<p>Danke und liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339623</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:25:36 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 14:29:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenns wirklich nur darum geht zu schauen ob der Benutzer korrekte Angaben macht hilft dir folgendes vllt. ein wenig weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">int pos = Edit1-&gt;Text.Pos(&quot;addieren(&quot;);
int pos2 = Edit1-&gt;Text.Pos(&quot;)&quot;);
TStringList *test = new TStringList();

if (pos != 0 &amp;&amp; pos2 &gt; pos) //pos2 &gt; pos --&gt; um sicherzustellen das die ) - Klammer hinter der ( - Klammer steht
{
        try
        {
                AnsiString inhalt = Edit1-&gt;Text.SubString(pos+9,pos2-10); //Alles zwischen den Klammern lesen

                test-&gt;CommaText = inhalt;
                for (int i = 0; i &lt; test-&gt;Count; i++)
                {
                        if (test-&gt;Strings[i] != &quot;&quot;)
                                sum += StrToInt(test-&gt;Strings[i]);
                }

                ShowMessage(&quot;Summe: &quot; + (AnsiString)sum);
        }
        catch(...)
        {
                ShowMessage(&quot;Syntaxfehler&quot;);
        }
}
else
{
        ShowMessage(&quot;Syntaxfehler&quot;);
}
</code></pre>
<p>Ich hoff' ich hab dich nicht falsch verstanden :)!</p>
<p>mfg, Micha!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339626</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 14:50:38 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.</p>
<p>Im Grunde genommen hast du mich richtig verstanden.</p>
<p>Aber deine Lösung wäre auch keine Lösung für mich da z.B. die Anwenderfehleingabe:<br />
c=addieren(a,)b)<br />
damit nicht abgefangen würde. Es gibt eben unzählig unsinnige Eingaben, die abgefangen werden müssen. Deshalb dachte ich an einen Art Parser der mir die Arbeit abnimmt.</p>
<p>Wollte das ganze in mehrere Schritte aufteilen.</p>
<p>1. Schritt: Überprüfung des Gesamtgerüstes<br />
Falls Ausdruck in der Form: aaa=funktionsname(bbb,ccc,ddd,eee) dann weiter zu<br />
Schritt 2.</p>
<p>2. Schritt: Überprüfung gültiger Varialben Name aaa<br />
Falls aaa gültiger Variablenname (keine Sonderzeichen etc...) dann weiter zu Schritt 3.</p>
<p>3. Schritt:Überprüfung Gültigkeit übergebene Parameter bbb,ccc,ddd,eee<br />
...<br />
...</p>
<p>usw.<br />
Damit ich einen logischen Aufbau des gesamten Ablaufes habe und entsprechend bei etwaigen Fehlerauftritts die entsprechenden Hinweise geben kann.</p>
<p>Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339639</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:50:38 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 14:54:56 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wenn der Benutzer <em>c=addieren(a,)b)</em> eingibt wird in meinem Beispiel alles bis <em>a,</em> abgearbeitet und dann sie Summe aus a berechnet! Alles was hinter der geschlossenen Klammer steht wird einfach nicht mehr berücksichtigt.</p>
<p>mfg, Micha!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339642</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 14:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to Grundform eines Ausdruckes überprüfen on Mon, 06 Aug 2007 15:11:13 GMT]]></title><description><![CDATA[<p>Ich glaube das einfachste wäre es wenn ich selbst einen Parser schreibe und ihn als dll auslagere.</p>
<p>MFG Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339656</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Mon, 06 Aug 2007 15:11:13 GMT</pubDate></item></channel></rss>