<?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[Brauche hilfe bei meinem Parser!]]></title><description><![CDATA[<p>Hi,<br />
Für mein Programm benötige ich für einige meiner Editboxen einen Parser, der fals nötig die vom Benutzer eingegebene Zeile korigiert. Es geht in erste Line darum das der Beutzer in der Edit eine Größer eingeben soll/kann und zwar auch mit Stellen nach den Komma (zB. 1.23 oder 1,23 ). da ich anschließend mit atof arbeite muss ich vorher noch sicher sein das kein ',' sondern ein '.' benutzt wurde, weiter wollte ich noch sicher sein, das alle Buchstaben, wenn vorhanden, einfach ignoriert werden und auch sonstige Zeichen (halt bis auf 0 - 9 ). eigentlich klapt das ja auch schon ganz gut aber - ich lasse ja gleich die korigierte Variante neu ins Edit schreiben - tauchen da noch irgendwelche anderen zeichen hinten dran auf, also zB:</p>
<pre><code>Benutzereingabe | Korigierte Form
-----------------+------------------
 1,3             | 1.3                 // funktioniert
 4,2             | 4.2                 // auch kein Problem
 1,23            | 1.230ui             // ab zwei Stellen nach dem Komma gehts nicht mehr
 1,a2            | 1.2                 // geht
 1.a2            | 1.2                 // geht auch
 1,.,.,,.5       | 1.2                 // no prob
 1.,..3gdsdf     | 1.3                 // geht 
 2,.r2fh.        | 2.2                 // geht
 4 ,. 2 a.       | 4.2                 // geht
</code></pre>
<p>so und hier mal der Parser:</p>
<pre><code class="language-cpp">void fParseIt( char * szBuffer ) {

    char szNewString[ 32 ];
         szNewString[  0 ] = 0;
    int iLength = strlen( szBuffer );
    bool bPaseDot = false;

    int c = 0;
    for( int i = 0; i &lt; iLength; i++ ) {

        // ***** first dot *****
        if( !( bPaseDot ) &amp;&amp; ( ( szBuffer[ i ] == ',' ) || ( szBuffer[ i ] == '.' ) ) ) {

            if( szBuffer[ i ] == ',' ) {

                szBuffer[ i ] = '.';
            }
            szNewString[ c ] = szBuffer[ i ];
            c++;
            bPaseDot = true;
            continue;
        }

        // ***** any other *****
        if( ( (int)szBuffer[ i ] &gt;= 48 ) &amp;&amp; ( (int)szBuffer[ i ] &lt;= 57 ) ) {

            szNewString[ c ] = szBuffer[ i ];
            c++;
        }
    }

    szBuffer[ 0 ] = 0;
    strcpy( szBuffer, szNewString );
}
</code></pre>
<p>ich hoffe es ist verständlich, wenn nicht einfach fragen. aber irgendwie muss da nen fehler drin sein.<br />
Hoffe ihr könnt mir da weiter helfen.</p>
<p>Gruß Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195055/brauche-hilfe-bei-meinem-parser</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 20:18:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195055.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Oct 2007 13:31:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Brauche hilfe bei meinem Parser! on Sat, 13 Oct 2007 13:31:37 GMT]]></title><description><![CDATA[<p>Hi,<br />
Für mein Programm benötige ich für einige meiner Editboxen einen Parser, der fals nötig die vom Benutzer eingegebene Zeile korigiert. Es geht in erste Line darum das der Beutzer in der Edit eine Größer eingeben soll/kann und zwar auch mit Stellen nach den Komma (zB. 1.23 oder 1,23 ). da ich anschließend mit atof arbeite muss ich vorher noch sicher sein das kein ',' sondern ein '.' benutzt wurde, weiter wollte ich noch sicher sein, das alle Buchstaben, wenn vorhanden, einfach ignoriert werden und auch sonstige Zeichen (halt bis auf 0 - 9 ). eigentlich klapt das ja auch schon ganz gut aber - ich lasse ja gleich die korigierte Variante neu ins Edit schreiben - tauchen da noch irgendwelche anderen zeichen hinten dran auf, also zB:</p>
<pre><code>Benutzereingabe | Korigierte Form
-----------------+------------------
 1,3             | 1.3                 // funktioniert
 4,2             | 4.2                 // auch kein Problem
 1,23            | 1.230ui             // ab zwei Stellen nach dem Komma gehts nicht mehr
 1,a2            | 1.2                 // geht
 1.a2            | 1.2                 // geht auch
 1,.,.,,.5       | 1.2                 // no prob
 1.,..3gdsdf     | 1.3                 // geht 
 2,.r2fh.        | 2.2                 // geht
 4 ,. 2 a.       | 4.2                 // geht
</code></pre>
<p>so und hier mal der Parser:</p>
<pre><code class="language-cpp">void fParseIt( char * szBuffer ) {

    char szNewString[ 32 ];
         szNewString[  0 ] = 0;
    int iLength = strlen( szBuffer );
    bool bPaseDot = false;

    int c = 0;
    for( int i = 0; i &lt; iLength; i++ ) {

        // ***** first dot *****
        if( !( bPaseDot ) &amp;&amp; ( ( szBuffer[ i ] == ',' ) || ( szBuffer[ i ] == '.' ) ) ) {

            if( szBuffer[ i ] == ',' ) {

                szBuffer[ i ] = '.';
            }
            szNewString[ c ] = szBuffer[ i ];
            c++;
            bPaseDot = true;
            continue;
        }

        // ***** any other *****
        if( ( (int)szBuffer[ i ] &gt;= 48 ) &amp;&amp; ( (int)szBuffer[ i ] &lt;= 57 ) ) {

            szNewString[ c ] = szBuffer[ i ];
            c++;
        }
    }

    szBuffer[ 0 ] = 0;
    strcpy( szBuffer, szNewString );
}
</code></pre>
<p>ich hoffe es ist verständlich, wenn nicht einfach fragen. aber irgendwie muss da nen fehler drin sein.<br />
Hoffe ihr könnt mir da weiter helfen.</p>
<p>Gruß Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384408</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 13 Oct 2007 13:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche hilfe bei meinem Parser! on Sat, 13 Oct 2007 13:56:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void fParseIt( char * szBuffer ) {

    char szNewString[ 32 ];
    int iLength = strlen( szBuffer );
    bool bPaseDot = false;

    int c = 0;
    for( int i=0; i&lt;iLength; i++ ) {
        // ***** first dot *****
        if( !bPaseDot &amp;&amp; (szBuffer[i]==',' || szBuffer[i]=='.') ) {
            szNewString[c++] = '.';
            bPaseDot = true;
        }
        // ***** any other *****
        else if( szBuffer[i]&gt;='1' &amp;&amp; szBuffer[i]&lt;='9' ) {
            szNewString[c++] = szBuffer[ i ];
        }
    }

    szNewString[c] = '\0'; //&lt;- hier das entscheidende ;)
    szBuffer[0] = '\0';
    strcpy( szBuffer, szNewString );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1384421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384421</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 13 Oct 2007 13:56:32 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche hilfe bei meinem Parser! on Sat, 13 Oct 2007 14:05:18 GMT]]></title><description><![CDATA[<p>Nimm C++ ... lösche alles was nicht vom Type &quot;0123456789,.&quot; ist. Guck ob mehr als ein &quot;,&quot; und/oder &quot;.&quot; im String sind =&gt; Fehlermeldung! (Oder was soll bei &quot;4,2.3&quot; oder &quot;4.3.2&quot; oder &quot;4,2,3&quot; rauskommen :P) Ersetze &quot;,&quot; durch &quot;.&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384423</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 13 Oct 2007 14:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche hilfe bei meinem Parser! on Sat, 13 Oct 2007 14:59:45 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13210">@Badestrand</a> Danke, kommisch das ich das vergessen habe -.-. aber du hast auch noch nen kleinen Schönheitsfehler im Programm <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<pre><code>...
else if( szBuffer[i]&gt;='1' &amp;&amp; szBuffer[i]&lt;='9' ) {
                       ^
                       |
                       muss '0' heißen! :P
...
</code></pre>
<p>Trotzdem danke,</p>
<p>Gruß Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384456</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 13 Oct 2007 14:59:45 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche hilfe bei meinem Parser! on Sat, 13 Oct 2007 15:48:14 GMT]]></title><description><![CDATA[<p>Gibt es einen Speziellen Grund dafür, dass du keinen Regulären Ausdruck dafür benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384484</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sat, 13 Oct 2007 15:48:14 GMT</pubDate></item></channel></rss>