<?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[Abreitsschritte zusammenfassen möglich?]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich habe einen kleinen XML Parser geschrieben, der bestimmte Attribute herauslesen soll. Leider wiederholt sich hier einiges, so dass es insgesamt ein wenig unschön aussieht. Auch wird die Pflege langsam nicht so einfach.</p>
<p>Vielleicht hat jemand einen Ansatz, wie man es zu uusammenfassen könnte.</p>
<p>Ab Zeile 13-44 ist fast das selbe wie 45-76 und 77-104</p>
<pre><code class="language-cpp">bool Xmlparse::set_obj_prop(Xmlobject &amp;obj,wxXmlNode *node){

	long tmplong;
	bool flag[15];
	for(int i=0;i&lt;sizeof(flag)/sizeof(bool);i++) flag[i] = true;

	wxXmlProperty *prop = node-&gt;GetProperties();

	assert(flag[0]);
	while(prop&amp;&amp;flag[0]){

		tmplong = -1;

		if(prop-&gt;GetName()==_(&quot;size&quot;)){

			assert(prop-&gt;GetValue().ToLong(&amp;tmplong));
			if(!prop-&gt;GetValue().ToLong(&amp;tmplong)){
				flag[0] = false;
				flag[1] = false;
				break;
			}

			assert(tmplong&gt;0);
			if(tmplong&lt;1){
				flag[0] = false;
				flag[2] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			assert(node-&gt;DeleteProperty(_(&quot;size&quot;)));
			if(!node-&gt;DeleteProperty(_(&quot;size&quot;))){
				flag[0] = false;
				flag[3] = false;
				break;
			}

			assert(obj.set_size(tmplong));
			if(!obj.set_size(tmplong)){
				flag[0] = false;
				flag[4] = false;
				break;
			}
		}
		else if(prop-&gt;GetName()==_(&quot;code&quot;)){

			assert(prop-&gt;GetValue().ToLong(&amp;tmplong));
			if(!prop-&gt;GetValue().ToLong(&amp;tmplong)){
				flag[0] = false;
				flag[5] = false;
				break;
			}

			assert(tmplong&gt;0);
			if(tmplong&lt;1){
				flag[0] = false;
				flag[6] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			assert(node-&gt;DeleteProperty(_(&quot;code&quot;)));
			if(!node-&gt;DeleteProperty(_(&quot;code&quot;))){
				flag[0] = false;
				flag[7] = false;
				break;
			}

			assert(obj.set_code(tmplong));
			if(!obj.set_code(tmplong)){
				flag[0] = false;
				flag[8] = false;
				break;
			}
		}
		else if(prop-&gt;GetName()==_(&quot;color&quot;)){

			if(!prop-&gt;GetValue().ToLong(&amp;tmplong)){
				flag[0] = false;
				flag[9] = false;
				break;
			}

			if(tmplong&lt;1){
				flag[0] = false;
				flag[10] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			if(!node-&gt;DeleteProperty(_(&quot;color&quot;))){
				flag[0] = false;
				flag[11] = false;
				break;
			}

			if(!obj.set_color(tmplong)){
				flag[0] = false;
				flag[12] = false;
				break;
			}
		}

		else if(prop-&gt;GetName()==_(&quot;comment&quot;)){

			if(!set_comment(prop-&gt;GetValue().mb_str())){
				flag[0] = false;
				flag[13] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			if(!node-&gt;DeleteProperty(_(&quot;comment&quot;))){
				flag[0] = false;
				flag[14] = false;
				break;
			}
		}
		else prop = prop-&gt;GetNext();
	}
// Flags auswerten
	return flag[0];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/270043/abreitsschritte-zusammenfassen-möglich</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 19:01:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270043.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Jul 2010 17:57:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abreitsschritte zusammenfassen möglich? on Mon, 05 Jul 2010 17:57:13 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich habe einen kleinen XML Parser geschrieben, der bestimmte Attribute herauslesen soll. Leider wiederholt sich hier einiges, so dass es insgesamt ein wenig unschön aussieht. Auch wird die Pflege langsam nicht so einfach.</p>
<p>Vielleicht hat jemand einen Ansatz, wie man es zu uusammenfassen könnte.</p>
<p>Ab Zeile 13-44 ist fast das selbe wie 45-76 und 77-104</p>
<pre><code class="language-cpp">bool Xmlparse::set_obj_prop(Xmlobject &amp;obj,wxXmlNode *node){

	long tmplong;
	bool flag[15];
	for(int i=0;i&lt;sizeof(flag)/sizeof(bool);i++) flag[i] = true;

	wxXmlProperty *prop = node-&gt;GetProperties();

	assert(flag[0]);
	while(prop&amp;&amp;flag[0]){

		tmplong = -1;

		if(prop-&gt;GetName()==_(&quot;size&quot;)){

			assert(prop-&gt;GetValue().ToLong(&amp;tmplong));
			if(!prop-&gt;GetValue().ToLong(&amp;tmplong)){
				flag[0] = false;
				flag[1] = false;
				break;
			}

			assert(tmplong&gt;0);
			if(tmplong&lt;1){
				flag[0] = false;
				flag[2] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			assert(node-&gt;DeleteProperty(_(&quot;size&quot;)));
			if(!node-&gt;DeleteProperty(_(&quot;size&quot;))){
				flag[0] = false;
				flag[3] = false;
				break;
			}

			assert(obj.set_size(tmplong));
			if(!obj.set_size(tmplong)){
				flag[0] = false;
				flag[4] = false;
				break;
			}
		}
		else if(prop-&gt;GetName()==_(&quot;code&quot;)){

			assert(prop-&gt;GetValue().ToLong(&amp;tmplong));
			if(!prop-&gt;GetValue().ToLong(&amp;tmplong)){
				flag[0] = false;
				flag[5] = false;
				break;
			}

			assert(tmplong&gt;0);
			if(tmplong&lt;1){
				flag[0] = false;
				flag[6] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			assert(node-&gt;DeleteProperty(_(&quot;code&quot;)));
			if(!node-&gt;DeleteProperty(_(&quot;code&quot;))){
				flag[0] = false;
				flag[7] = false;
				break;
			}

			assert(obj.set_code(tmplong));
			if(!obj.set_code(tmplong)){
				flag[0] = false;
				flag[8] = false;
				break;
			}
		}
		else if(prop-&gt;GetName()==_(&quot;color&quot;)){

			if(!prop-&gt;GetValue().ToLong(&amp;tmplong)){
				flag[0] = false;
				flag[9] = false;
				break;
			}

			if(tmplong&lt;1){
				flag[0] = false;
				flag[10] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			if(!node-&gt;DeleteProperty(_(&quot;color&quot;))){
				flag[0] = false;
				flag[11] = false;
				break;
			}

			if(!obj.set_color(tmplong)){
				flag[0] = false;
				flag[12] = false;
				break;
			}
		}

		else if(prop-&gt;GetName()==_(&quot;comment&quot;)){

			if(!set_comment(prop-&gt;GetValue().mb_str())){
				flag[0] = false;
				flag[13] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			if(!node-&gt;DeleteProperty(_(&quot;comment&quot;))){
				flag[0] = false;
				flag[14] = false;
				break;
			}
		}
		else prop = prop-&gt;GetNext();
	}
// Flags auswerten
	return flag[0];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1921807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921807</guid><dc:creator><![CDATA[anfänger_]]></dc:creator><pubDate>Mon, 05 Jul 2010 17:57:13 GMT</pubDate></item><item><title><![CDATA[Reply to Abreitsschritte zusammenfassen möglich? on Mon, 05 Jul 2010 18:21:11 GMT]]></title><description><![CDATA[<p>Mir ist nun doch etwas eingefallen.<br />
Ich bilde ein Array in dennen ich die Attribute speichere und iteriere mich durch diese Arrays.</p>
<p>Leider klappt es mit den Funktionszeigern in Zeile 9 nicht. Kann mir jemand ein Tipp geben?</p>
<pre><code class="language-cpp">bool Xmlparse::set_obj_prop(Xmlobject &amp;obj,wxXmlNode *node){

	long tmplong;
	bool flag[7];

	wxString attribute[] = {_(&quot;size&quot;),_(&quot;code&quot;),(&quot;color&quot;)};

	typedef bool(*pfunctions)(puint);
	pfunctions set_function[] = {&amp;set_size(), &amp;set_code(),&amp;set_color()};

	for(int i=0;i&lt;sizeof(flag)/sizeof(bool);i++) flag[i] = true;

	wxXmlProperty *prop = node-&gt;GetProperties();

	assert(flag[0]);
	while(prop&amp;&amp;flag[0]){

		tmplong = -1;

		for(int i=0;i&lt;sizeof(attribute)/sizeof(wxString);i++){

			if(prop-&gt;GetName()==attribute[i]){

				assert(prop-&gt;GetValue().ToLong(&amp;tmplong));
				if(!prop-&gt;GetValue().ToLong(&amp;tmplong)){
					flag[0] = false;
					flag[1] = false;
					break;
				}

				assert(tmplong&gt;0);
				if(tmplong&lt;1){
					flag[0] = false;
					flag[2] = false;
					break;
				}

				prop = prop-&gt;GetNext();

				assert(node-&gt;DeleteProperty(attribute[i]));
				if(!node-&gt;DeleteProperty(attribute[i])){
					flag[0] = false;
					flag[3] = false;
					break;
				}

				assert(set_function[i](tmplong));
				if(!set_function[i](tmplong)){
					flag[0] = false;
					flag[4] = false;
					break;
				}
			}
		}

		if(prop-&gt;GetName()==_(&quot;comment&quot;)){

			if(!obj.set_comment(prop-&gt;GetValue().mb_str())){
				flag[0] = false;
				flag[5] = false;
				break;
			}

			prop = prop-&gt;GetNext();

			if(!node-&gt;DeleteProperty(_(&quot;comment&quot;))){
				flag[0] = false;
				flag[6] = false;
				break;
			}
		}
		else prop = prop-&gt;GetNext();
	}
	return flag[0];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1921831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921831</guid><dc:creator><![CDATA[anfänger_]]></dc:creator><pubDate>Mon, 05 Jul 2010 18:21:11 GMT</pubDate></item><item><title><![CDATA[Reply to Abreitsschritte zusammenfassen möglich? on Mon, 05 Jul 2010 20:07:21 GMT]]></title><description><![CDATA[<p>könnte mir jemand einen Tipp geben wie ich ein Array aus Funktionszeigern anlegen kann.</p>
<pre><code class="language-cpp">// die funktionen
//Aus der Klasse Xmlobject
bool set_size(long);
bool set_code(long);
bool set_color(long);
</code></pre>
<p>Normalerweise müsste doch so etwas funktionieren?</p>
<pre><code class="language-cpp">typedef bool(Xmlobject::*xmlfunc)(long);
xmlfunc set_functions[3] = {obj.set_size(), obj.set_code(),obj.set_color()};
</code></pre>
<p>Und der Aufruf</p>
<pre><code class="language-cpp">if(!set_functions[i](tmplong)){
	flag[0] = false;
	flag[i] = false;
	break;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1921904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921904</guid><dc:creator><![CDATA[anfänger_]]></dc:creator><pubDate>Mon, 05 Jul 2010 20:07:21 GMT</pubDate></item><item><title><![CDATA[Reply to Abreitsschritte zusammenfassen möglich? on Mon, 05 Jul 2010 20:40:57 GMT]]></title><description><![CDATA[<p>anfänger_ schrieb:</p>
<blockquote>
<p>könnte mir jemand einen Tipp geben wie ich ein Array aus Funktionszeigern anlegen kann...</p>
</blockquote>
<p>Habs herausgefunden. Funktioniert einwandfrei.</p>
<p>Warum bekam ich keine einzige Antwort? Ist der Code so falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921934</guid><dc:creator><![CDATA[anfänger_]]></dc:creator><pubDate>Mon, 05 Jul 2010 20:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Abreitsschritte zusammenfassen möglich? on Mon, 05 Jul 2010 21:33:45 GMT]]></title><description><![CDATA[<p>anfänger_ schrieb:</p>
<blockquote>
<p>Warum bekam ich keine einzige Antwort? Ist der Code so falsch?</p>
</blockquote>
<p>Ich vermute mal, weil den meisten hier nicht klar ist, warum du die ganzen Flags<br />
eigentlich setzt...</p>
<p>Ich versteh ehrlich gesagt auch nicht so ganz, was du vor hast...</p>
<blockquote>
<p>Ab Zeile 13-44 ist fast das selbe wie 45-76 und 77-104</p>
</blockquote>
<p>Dann kuck doch mal, ob du es in eine Funktion auslagern kannst...<br />
Ich denke schon.<br />
Alles was unterschiedlich ist, übergibst du als Parameter, wobei du<br />
beim array sowas wie flag[5] übergeben kannst, dann kannst du in der<br />
Funktion immer die gleichen Indizes verwenden.<br />
flag[0] mußt du dann natürlich anders behandeln</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921973</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 05 Jul 2010 21:33:45 GMT</pubDate></item><item><title><![CDATA[Reply to Abreitsschritte zusammenfassen möglich? on Mon, 05 Jul 2010 21:52:34 GMT]]></title><description><![CDATA[<p>anfänger_ schrieb:</p>
<blockquote>
<p>Warum bekam ich keine einzige Antwort?</p>
</blockquote>
<ul>
<li>Langer, (extrem!) kryptischer Code <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> 70 % der Leser lesen gar nicht erst weiter</li>
<li>Nur vage Beschreibung was das Codestück tun soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Nochmals ein großer Teil der Leserschaft ist abgeschreckt<br />
Wer also nicht durch den Code abgeschreckt ist, findet:</li>
<li>Sehr vage Fragestellungen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Wer jetzt noch mit liest, müsste erstmal deinen ganzen Code <strong>entschlüsseln</strong> (so muss man das nennen), dein konkretes Problem erraten und noch eine passende Antwort suchen.</li>
</ul>
<p>All dies riecht nach 30-60 Minuten Arbeit für eine eher uninteressante Fragestellung. So gutmütig ist niemand.</p>
<p>Wie man es besser machen könnte:<br />
Dem Leser unnötige Denkarbeit abnehmen. Code auf etwas äquivalentes, verständliches umformulieren. Dazu eine konkrete Problembeschreibung und vielleicht schon einen Ansatz zur Problemlösung und eine konkrete Frage warum das nicht klappt.</p>
<p>Zu deiner Problemstellung: Wenn ich deinen Code richtig verstanden habe, dann kann man zum Beispiel Zeilen 24 bis 52 abkürzen zu:</p>
<pre><code class="language-cpp">assert(prop-&gt;GetValue().ToLong(&amp;tmplong));
assert(tmplong&gt;0);
prop = prop-&gt;GetNext();
assert(node-&gt;DeleteProperty(attribute[i]));
assert(set_function[i](tmplong));
</code></pre>
<p>edit: Ich habe tatsächlich 26 Minuten für die Antwort gebraucht. Verdammt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921982</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 05 Jul 2010 21:52:34 GMT</pubDate></item></channel></rss>