<?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[Splitten von Strings mit verschiedenen Delimetern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen &quot;großen&quot; String aus denen ich mehrere gewinnen möchte:</p>
<pre><code>string line = &quot;!=\&quot;abcd!#efg\&quot; !\&quot;ABCDEFGHAG!/8765438\&quot; !\&quot;This !/[isanotherstring]?but nobody cares78\&quot; !=\&quot;again a string with equal sign and exclamation mark\&quot;&quot;;
</code></pre>
<p>Die Delimeter sind <strong>!&quot;</strong> oder <strong>!=&quot;</strong>.</p>
<p>Da innerhalb der Substrings auch Ausrufezeichen vorkommen können kann ich nicht einfach das Ausrufezeichen als Trenner nehmen ansonsten wäre der Substring kaputt.</p>
<p>Ich habe folgendes Beispiel nachgebaut und der Code lässt sich ausführen</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;boost/regex.hpp&gt;
#include &lt;boost/algorithm/string.hpp&gt;
#include &lt;boost/algorithm/string/regex.hpp&gt;
#include &lt;vector&gt;

    using namespace std;
    using namespace boost;

    std::string line;

///////////// Create vector to store matrix
    std::vector&lt; std::vector&lt;string&gt; &gt; vec_line;
    // Create temp vector to create &quot;rows&quot;
    vector&lt;string&gt;vec_string_temp;

string add2vec_ele(string firste, string line)
{

    // Add row
    vec_string_temp.push_back(firste);
    boost::algorithm::split_regex( vec_string_temp, line, regex( &quot;(!=\&quot;|!\&quot;)&quot; ) ) ;
    // store row in vec_line
    vec_line.push_back(vec_string_temp);
    vec_string_temp.clear();
return string();
}

int main()
{
    string firste = &quot;KeyWord&quot;;
    string line = &quot;!=\&quot;abcd!#efg\&quot; !\&quot;ABCDEFGHAG!/8765438\&quot; !\&quot;This !/[isanotherstring]?but nobody cares78\&quot; !=\&quot;again a string with equal sign and exclamation mark\&quot;&quot;;
    add2vec_ele(firste,line);

    // print all elements
    for (unsigned int i = 0; i &lt; vec_line.size(); i++)
    {
        std::cout &lt;&lt; &quot;Vector line: &quot; &lt;&lt; i &lt;&lt; &quot; &quot;;
        for (unsigned int j = 0; j &lt; vec_line[i].size(); j++)
        {
            std::cout &lt;&lt; &quot; Col: &quot; &lt;&lt; j &lt;&lt; &quot; &quot; &lt;&lt; vec_line[i][j];
        }
        std::cout &lt;&lt; endl;
    }
}
</code></pre>
<p>Damit bekomme ich als Output:</p>
<pre><code>Vector line: 0  Col: 0  Col: 1 abcd!#efg&quot;  Col: 2 ABCDEFGHAG!/8765438&quot;  Col: 3 This !/[isanotherstring]?but nobody cares78&quot;  Col: 4 again a string with equal sign and exclamation mark&quot;
</code></pre>
<p>Ich bräuchte aber die führenden <strong>!=&quot;</strong> bzw. <strong>!&quot;</strong></p>
<pre><code>Vector line: 0  Col: 0  Col: 1 !=&quot;abcd!#efg&quot;  Col: 2 !&quot;ABCDEFGHAG!/8765438&quot;  Col: 3 !&quot;This !/[isanotherstring]?but nobody cares78&quot;  Col: 4 !=&quot;again a string with equal sign and exclamation mark&quot;
</code></pre>
<p>boost::algorithm::split_regex scheint also die Delimeter zu entfernen und mein Ziel damit also unmöglich zu machen. Ich habe mir auch andere split Methoden angesehen aber nicht wirklich einen Weg gefunden das damit zu realisieren.</p>
<p>Habt Ihr eine Idee wie ich das am besten Lösen kann? Das einzige was ich noch sehe ist irgendwie mir zu merken bei welchem Substring !=&quot; oder !&quot; hin muß und es entsprechend nach dem füllen des vectors einzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338400/splitten-von-strings-mit-verschiedenen-delimetern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 15:06:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338400.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Jun 2016 15:53:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 15:53:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe einen &quot;großen&quot; String aus denen ich mehrere gewinnen möchte:</p>
<pre><code>string line = &quot;!=\&quot;abcd!#efg\&quot; !\&quot;ABCDEFGHAG!/8765438\&quot; !\&quot;This !/[isanotherstring]?but nobody cares78\&quot; !=\&quot;again a string with equal sign and exclamation mark\&quot;&quot;;
</code></pre>
<p>Die Delimeter sind <strong>!&quot;</strong> oder <strong>!=&quot;</strong>.</p>
<p>Da innerhalb der Substrings auch Ausrufezeichen vorkommen können kann ich nicht einfach das Ausrufezeichen als Trenner nehmen ansonsten wäre der Substring kaputt.</p>
<p>Ich habe folgendes Beispiel nachgebaut und der Code lässt sich ausführen</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;boost/regex.hpp&gt;
#include &lt;boost/algorithm/string.hpp&gt;
#include &lt;boost/algorithm/string/regex.hpp&gt;
#include &lt;vector&gt;

    using namespace std;
    using namespace boost;

    std::string line;

///////////// Create vector to store matrix
    std::vector&lt; std::vector&lt;string&gt; &gt; vec_line;
    // Create temp vector to create &quot;rows&quot;
    vector&lt;string&gt;vec_string_temp;

string add2vec_ele(string firste, string line)
{

    // Add row
    vec_string_temp.push_back(firste);
    boost::algorithm::split_regex( vec_string_temp, line, regex( &quot;(!=\&quot;|!\&quot;)&quot; ) ) ;
    // store row in vec_line
    vec_line.push_back(vec_string_temp);
    vec_string_temp.clear();
return string();
}

int main()
{
    string firste = &quot;KeyWord&quot;;
    string line = &quot;!=\&quot;abcd!#efg\&quot; !\&quot;ABCDEFGHAG!/8765438\&quot; !\&quot;This !/[isanotherstring]?but nobody cares78\&quot; !=\&quot;again a string with equal sign and exclamation mark\&quot;&quot;;
    add2vec_ele(firste,line);

    // print all elements
    for (unsigned int i = 0; i &lt; vec_line.size(); i++)
    {
        std::cout &lt;&lt; &quot;Vector line: &quot; &lt;&lt; i &lt;&lt; &quot; &quot;;
        for (unsigned int j = 0; j &lt; vec_line[i].size(); j++)
        {
            std::cout &lt;&lt; &quot; Col: &quot; &lt;&lt; j &lt;&lt; &quot; &quot; &lt;&lt; vec_line[i][j];
        }
        std::cout &lt;&lt; endl;
    }
}
</code></pre>
<p>Damit bekomme ich als Output:</p>
<pre><code>Vector line: 0  Col: 0  Col: 1 abcd!#efg&quot;  Col: 2 ABCDEFGHAG!/8765438&quot;  Col: 3 This !/[isanotherstring]?but nobody cares78&quot;  Col: 4 again a string with equal sign and exclamation mark&quot;
</code></pre>
<p>Ich bräuchte aber die führenden <strong>!=&quot;</strong> bzw. <strong>!&quot;</strong></p>
<pre><code>Vector line: 0  Col: 0  Col: 1 !=&quot;abcd!#efg&quot;  Col: 2 !&quot;ABCDEFGHAG!/8765438&quot;  Col: 3 !&quot;This !/[isanotherstring]?but nobody cares78&quot;  Col: 4 !=&quot;again a string with equal sign and exclamation mark&quot;
</code></pre>
<p>boost::algorithm::split_regex scheint also die Delimeter zu entfernen und mein Ziel damit also unmöglich zu machen. Ich habe mir auch andere split Methoden angesehen aber nicht wirklich einen Weg gefunden das damit zu realisieren.</p>
<p>Habt Ihr eine Idee wie ich das am besten Lösen kann? Das einzige was ich noch sehe ist irgendwie mir zu merken bei welchem Substring !=&quot; oder !&quot; hin muß und es entsprechend nach dem füllen des vectors einzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498682</guid><dc:creator><![CDATA[Blacksheep70]]></dc:creator><pubDate>Mon, 13 Jun 2016 15:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 16:16:38 GMT]]></title><description><![CDATA[<p>Kannst Du nochmal bitte kurz einen String zeigen original und dann danach wie Du es haben willst oder deine Anfuehrungszeichen reparieren in deinem unteren Beispiel?</p>
<p>Edit: Mit anderen Worten deine Zeichen sind keine Delimiter sondern sind Information die erhalten bleiben sollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498688</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Mon, 13 Jun 2016 16:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 17:19:12 GMT]]></title><description><![CDATA[<p>Ziemlich grausig ... aber ... sowas?</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
	std::string line = &quot;!=\&quot;abcd!#efg\&quot; !\&quot;ABCDEFGHAG!/8765438\&quot; !\&quot;This !/[isanotherstring]?but nobody cares78\&quot; !=\&quot;again a string with equal sign and exclamation mark\&quot;&quot;;

	std::vector&lt; std::string &gt; v;

	auto begin = line.begin();
	auto end = begin;

	do {
		while( begin != line.end() &amp;&amp; *begin != '!' )
			++begin;

		if( begin == line.end() )
			break;

		end = begin;

		if( ++end != line.end() &amp;&amp; *end == '=' )
			++end;

		if( end != line.end() &amp;&amp; *end++ != '&quot;' ) {
			begin = end;
			continue;
		}

		while( end != line.end() &amp;&amp; *end != '&quot;' )
			++end;

		v.push_back( std::string( begin, ++end ) );

		begin = end;
	} while( end != line.end() );

	for( auto &amp;i : v )
		std::cout &lt;&lt; i &lt;&lt; '\n';
	std::cout.put( '\n' );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2498701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498701</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 13 Jun 2016 17:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 17:20:45 GMT]]></title><description><![CDATA[<p>Wie wär's mit look-ahead?</p>
<pre><code>boost::algorithm::split_regex( vec_string_temp, line, regex( &quot;(?&lt;!^)(?:(?=!=\&quot;)|(?=!\&quot;))&quot; ) ) ;
</code></pre>
<p>Ansonsten: wofür ist der Parameter &quot;firste&quot; gut?</p>
<p>Ein Perl-Freund <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2498702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498702</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Mon, 13 Jun 2016 17:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 17:30:37 GMT]]></title><description><![CDATA[<pre><code>string line = &quot;!=\&quot;abcd!#efg\&quot; !\&quot;ABCDEFGHAG!/8765438\&quot; !\&quot;This !/[isanotherstring]?but nobody cares78\&quot; !=\&quot;again a string with equal sign and exclamation mark\&quot;&quot;;
</code></pre>
<p>ich weiß nicht ob das zufall ist oder so &quot;aber du könntest doch bei deinem beispiel auch einfach den leerschritt als trennzeichen benutzen&quot;, dann solltest du ! und != mitbekommen...</p>
<p>das geht mit getline(zeile,ergebis,trennzeichen) --&gt; trennzeichen = &quot; &quot; ...</p>
<p>geht sicher auch ohne getline() - also eleganter ...</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498705</guid><dc:creator><![CDATA[HELPERs]]></dc:creator><pubDate>Mon, 13 Jun 2016 17:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 18:37:58 GMT]]></title><description><![CDATA[<p>Hallo Ruvi,</p>
<p>Ruvi schrieb:</p>
<blockquote>
<p>Kannst Du nochmal bitte kurz einen String zeigen original und dann danach wie Du es haben willst oder deine Anfuehrungszeichen reparieren in deinem unteren Beispiel?</p>
<p>Edit: Mit anderen Worten deine Zeichen sind keine Delimiter sondern sind Information die erhalten bleiben sollen?</p>
</blockquote>
<p>Ich fürchte da ist nix kaputt mit den doublequotes, deswegen macht mich das parsen ja so wahnsinnig. Eine original line sieht etwa so aus (leicht modifiziert um klar zu machen das in dem substring doublequotes, ausrufezeichen usw. auftauchen können):</p>
<pre><code>IchBinEinKeyword !=&quot;abcd!#efg&quot; !&quot;ABCDEFG$%#HAG![&quot;$getParam&quot;]/8765438&quot; !&quot;This !/[!isanotherstring]?but nobody cares78&quot; !=&quot;again a string with equal sign and exclamation mark&quot;
</code></pre>
<p>Das ist jetz natürlich keine Original line aus dem File, aber da sie C/C++ ähnliche synthax enthalten kann und die noch mehr Verwirrung stiften könnte hab ich das wie oben mal abgeändert. Im Prinzip ist jedes &quot;Feld&quot; bis auf das Keyword angeführt von einem <strong>!=&quot;</strong> (bedeutet: Genau So!) oder einem <strong>!&quot;</strong> (bedeutet: Muss enthalten sein!) und am Ende ein schließendes doublequote.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498717</guid><dc:creator><![CDATA[Blacksheep70]]></dc:creator><pubDate>Mon, 13 Jun 2016 18:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 18:39:04 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Ziemlich grausig ... aber ... sowas?</p>
</blockquote>
<p>Vielen Dank! Ich werde mir das morgen mal genau anschauen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498718</guid><dc:creator><![CDATA[Blacksheep70]]></dc:creator><pubDate>Mon, 13 Jun 2016 18:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 18:41:34 GMT]]></title><description><![CDATA[<p>wob schrieb:</p>
<blockquote>
<p>Wie wär's mit look-ahead?</p>
<pre><code>boost::algorithm::split_regex( vec_string_temp, line, regex( &quot;(?&lt;!^)(?:(?=!=\&quot;)|(?=!\&quot;))&quot; ) ) ;
</code></pre>
<p>Ansonsten: wofür ist der Parameter &quot;firste&quot; gut?</p>
<p>Ein Perl-Freund <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>
</blockquote>
<p>Vielen Dank! Auch das schaue ich mir morgen mal genauer an (RegEx bis die Hirnwindungen bluten <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>
<p>firste ist das keyword was am anfang stehen muss in der finalen output list. Das will ich später auch nutzen als index (soweit der feuchte Traum: Ob ich das hin bekomme werde ich sehen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498719</guid><dc:creator><![CDATA[Blacksheep70]]></dc:creator><pubDate>Mon, 13 Jun 2016 18:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 18:43:59 GMT]]></title><description><![CDATA[<p>Hallo Helpers,</p>
<p>HELPERs schrieb:</p>
<blockquote>
<p>ich weiß nicht ob das zufall ist oder so &quot;aber du könntest doch bei deinem beispiel auch einfach den leerschritt als trennzeichen benutzen&quot;, dann solltest du ! und != mitbekommen...</p>
</blockquote>
<p>Das war mein erster Versuch. Bis ich dann gemerkt habe das in den Substrings auch leerzeichen vorkommen und die substrings kaputt gehen. Wird aus meinem Beispiel leider nicht deutlich, sorry!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498720</guid><dc:creator><![CDATA[Blacksheep70]]></dc:creator><pubDate>Mon, 13 Jun 2016 18:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Splitten von Strings mit verschiedenen Delimetern on Mon, 13 Jun 2016 19:45:58 GMT]]></title><description><![CDATA[<p>wob schrieb:</p>
<blockquote>
<p>Wie wär's mit look-ahead?</p>
</blockquote>
<p>Ich glaube das war der entscheidene Tipp!</p>
<p>Hier ist für die Nachwelt der funktionierende Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;boost/regex.hpp&gt;
#include &lt;boost/algorithm/string.hpp&gt;
#include &lt;boost/algorithm/string/regex.hpp&gt;
#include &lt;vector&gt;

    using namespace std;
    using namespace boost;

    std::string line;

///////////// Create vector to store matrix
    std::vector&lt; std::vector&lt;string&gt; &gt; vec_line;
    // Create temp vector to create &quot;rows&quot;
    vector&lt;string&gt;vec_string_temp;

string add2vec_ele(string firste, string line)
{

    // Add row
    vec_string_temp.push_back(firste);
    // Using Perl RegEx
    boost::regex ex( &quot;(?&lt;!^)(?:(?=!=\&quot;)|(?=!\&quot;))&quot;, boost::regex::perl );
    // Split!
    boost::algorithm::split_regex( vec_string_temp, line, ex ) ;
    // store row in vec_line
    vec_line.push_back(vec_string_temp);
    vec_string_temp.clear();
return string();
}

int main()
{
    string firste = &quot;KeyWord&quot;;
    string line = &quot;!=\&quot;abcd!#efg\&quot; !\&quot;ABCDEFGHAG!/8765438\&quot; !\&quot;This !/[isanotherstring]?but nobody cares78\&quot; !=\&quot;again a string with equal sign and exclamation mark\&quot;&quot;;
    add2vec_ele(firste,line);

    // print all elements
    for (unsigned int i = 0; i &lt; vec_line.size(); i++)
    {
        std::cout &lt;&lt; &quot;Vector line: &quot; &lt;&lt; i &lt;&lt; &quot; &quot;;
        for (unsigned int j = 0; j &lt; vec_line[i].size(); j++)
        {
            std::cout &lt;&lt; &quot; Col: &quot; &lt;&lt; j &lt;&lt; &quot; &quot; &lt;&lt; vec_line[i][j];
        }
        std::cout &lt;&lt; endl;
    }
}
</code></pre>
<p>Ich muss jetzt nur noch schauen ob die Regeln im Vector auch funktionieren. Das heißt ich werd den Vector in ein File dumpen und mal ein diff drüber laufen lassen ob es mit dem Original überein stimmt. Aber erster Augenschein ist vielversprechend.</p>
<p>Vielen Dank euch allen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2498726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2498726</guid><dc:creator><![CDATA[Blacksheep70]]></dc:creator><pubDate>Mon, 13 Jun 2016 19:45:58 GMT</pubDate></item></channel></rss>