<?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[Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe mir jetzt extra ein Account hier erstellt, damit mir vieleicht hier jemand helfen kann, da ich schon seit 3 Tagen verzweifelnd versuche<br />
aus einer text Data verschiede Zahlen die mit einem Koma getrennt sind einzeln aufzurufen. Doch noch bin ich auf keine Lösung gekommen.</p>
<p>Ich versuche ein Spiel mit C++ und SFML zu erstellen und um eine TileMap für das Spiel zu erstellen brauche ich diese Zahlen einzeln damit das Programm weiß welches Bild es ausschneiden und<br />
zeichnen soll.<br />
Die Daten für diese TileMap werden so abgefragt:</p>
<p>Tile: Tile.png;<br />
TileSizeWidth: 32;<br />
TileSizeHeight: 32;<br />
MapSizeWidth: 9;<br />
MapSizeHeight: 9;<br />
Data: 1, 2, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 16, 2, 6, 2, 17, 1, 1, 1, 1, 11, 1, 11, 1, 11, 1, 1, 2, 2, 6, 2, 6, 2, 6, 2, 2, 1, 1, 11, 1, 11, 1, 11, 1, 1, 1, 1, 12, 2, 6, 2, 7, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1;</p>
<p>Für die ersten 5 Zeilen ist es einfach da nutze ich die getLine Funktion und alles klappt</p>
<pre><code>std::ifstream ReadTextFile(&quot;Maps\\map1.map&quot;, std::ios::in);
		std::string temp;

		std::string RightValue;
		char CurrentLine[256];
		if (ReadTextFile.good())
		{
		//TileSet
		std::getline(ReadTextFile, temp);
		RightValue.append(CurrentLine);
		std::size_t begin = temp.find_first_of(&quot;: &quot;);
		std::size_t end = temp.find_last_of(&quot;; &quot;);
		std::size_t len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		/*this-&gt;tileSet = std::stoi(temp, nullptr);*/ // funktionier nicht!, Programm stürtz ab, liegt wohl daran, dass es ein String ist und kein int
		//TileSizeWith
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;tileWidth = std::stoi(temp, nullptr);
		//TileSizeHeight
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;tileHeight = std::stoi(temp, nullptr);
		//With
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;width = std::stoi(temp, nullptr);
		//Height
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;height = std::stoi(temp, nullptr);
		//Data 
		std::getline(ReadTextFile, temp);
		...		
		ReadTextFile.close();
		}
</code></pre>
<p>Nun möchte ich auch die Zahlen in der 6. Zeile abfragen, jedoch einzeln, dabei auch immer die Komas überspringen und da komme ich nicht mehr weiter. Das einzigste was mir noch einfällt ist die ganzen Zahlen einzeln in eine eigene Zeile zu bringen und in<br />
einer Schleife jedes mal getline aufzurufen und dort mit den Zahlen die Tiles zu positionieren und mit sf::Rect(sf::intrect(x,y,x,y)) das Passende Bild ausschneiden, doch diese Methode finde ich<br />
blöd, da ich somit jede Zahl einzeln immer wieder in eine eigene Zeile packen muss, und wenn ich mit dem Programm Tiled wieder was verändern muss, muss ich wieder alles von vorne machen.</p>
<p>Da hoffe ich, das jemand mir dabei helfen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338040/aus-einer-textdatei-zeichen-nach-jedem-komma-einzeln-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 14:12:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338040.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 May 2016 09:25:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 09:25:16 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe mir jetzt extra ein Account hier erstellt, damit mir vieleicht hier jemand helfen kann, da ich schon seit 3 Tagen verzweifelnd versuche<br />
aus einer text Data verschiede Zahlen die mit einem Koma getrennt sind einzeln aufzurufen. Doch noch bin ich auf keine Lösung gekommen.</p>
<p>Ich versuche ein Spiel mit C++ und SFML zu erstellen und um eine TileMap für das Spiel zu erstellen brauche ich diese Zahlen einzeln damit das Programm weiß welches Bild es ausschneiden und<br />
zeichnen soll.<br />
Die Daten für diese TileMap werden so abgefragt:</p>
<p>Tile: Tile.png;<br />
TileSizeWidth: 32;<br />
TileSizeHeight: 32;<br />
MapSizeWidth: 9;<br />
MapSizeHeight: 9;<br />
Data: 1, 2, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 16, 2, 6, 2, 17, 1, 1, 1, 1, 11, 1, 11, 1, 11, 1, 1, 2, 2, 6, 2, 6, 2, 6, 2, 2, 1, 1, 11, 1, 11, 1, 11, 1, 1, 1, 1, 12, 2, 6, 2, 7, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1;</p>
<p>Für die ersten 5 Zeilen ist es einfach da nutze ich die getLine Funktion und alles klappt</p>
<pre><code>std::ifstream ReadTextFile(&quot;Maps\\map1.map&quot;, std::ios::in);
		std::string temp;

		std::string RightValue;
		char CurrentLine[256];
		if (ReadTextFile.good())
		{
		//TileSet
		std::getline(ReadTextFile, temp);
		RightValue.append(CurrentLine);
		std::size_t begin = temp.find_first_of(&quot;: &quot;);
		std::size_t end = temp.find_last_of(&quot;; &quot;);
		std::size_t len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		/*this-&gt;tileSet = std::stoi(temp, nullptr);*/ // funktionier nicht!, Programm stürtz ab, liegt wohl daran, dass es ein String ist und kein int
		//TileSizeWith
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;tileWidth = std::stoi(temp, nullptr);
		//TileSizeHeight
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;tileHeight = std::stoi(temp, nullptr);
		//With
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;width = std::stoi(temp, nullptr);
		//Height
		std::getline(ReadTextFile, temp);
		begin = temp.find_first_of(&quot;: &quot;);
		end = temp.find_last_of(&quot;;&quot;);
		len = end - begin;
		temp = temp.substr(begin + 1, len - 1);
		this-&gt;height = std::stoi(temp, nullptr);
		//Data 
		std::getline(ReadTextFile, temp);
		...		
		ReadTextFile.close();
		}
</code></pre>
<p>Nun möchte ich auch die Zahlen in der 6. Zeile abfragen, jedoch einzeln, dabei auch immer die Komas überspringen und da komme ich nicht mehr weiter. Das einzigste was mir noch einfällt ist die ganzen Zahlen einzeln in eine eigene Zeile zu bringen und in<br />
einer Schleife jedes mal getline aufzurufen und dort mit den Zahlen die Tiles zu positionieren und mit sf::Rect(sf::intrect(x,y,x,y)) das Passende Bild ausschneiden, doch diese Methode finde ich<br />
blöd, da ich somit jede Zahl einzeln immer wieder in eine eigene Zeile packen muss, und wenn ich mit dem Programm Tiled wieder was verändern muss, muss ich wieder alles von vorne machen.</p>
<p>Da hoffe ich, das jemand mir dabei helfen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496330</guid><dc:creator><![CDATA[NoName1202]]></dc:creator><pubDate>Fri, 20 May 2016 09:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 10:51:44 GMT]]></title><description><![CDATA[<p>Ich verstehe deine Problemstellung nicht. Hast du Probleme mit dem Lesevorgang oder mit der Verwaltung deiner Daten? Insbesondere dies ist mir rätselhaft:</p>
<blockquote>
<p>Das einzigste was mir noch einfällt ist die ganzen Zahlen einzeln in eine eigene Zeile zu bringen und in<br />
einer Schleife jedes mal getline aufzurufen und dort mit den Zahlen die Tiles zu positionieren und mit sf::Rect(sf::intrect(x,y,x,y)) das Passende Bild ausschneiden, doch diese Methode finde ich<br />
blöd, da ich somit jede Zahl einzeln immer wieder in eine eigene Zeile packen muss, und wenn ich mit dem Programm Tiled wieder was verändern muss, muss ich wieder alles von vorne machen.</p>
</blockquote>
<p>Kannst du das mal so beschreiben, dass das auch jemand versteht, der nicht bereits weiß, was du überhaupt machst?</p>
<p>Ansonsten: Was soll der Quatsch mit den char-Arrays, stoi usw? Nimm doch einfach den Stream Operator&gt;&gt; und gut ist. Oder wenigstens std::string statt char-Arrays. Insgesamt kommt mir deine jetzige Methode (für die ersten paar Zeilen) furchtbar frickelig und unzuverlässig vor. Zig mal der gleiche Code mit kleinen Änderungen, keinerlei Fehlerprüfungen und so. Dabei wäre das alles mehr oder weniger automatisch erledigt, wenn du einfach die fertigen Lesemethoden benutzen würdest, anstatt dir selber etwas zu basteln. Falls dein Problem mit den Zahlen beim Lesen derselben liegen sollte, dann ist dies auch die Lösung dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496342</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 20 May 2016 10:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 11:14:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a></p>
<p>Ich weiß das der Code nicht perfekt ist, denn zum einen bin ich in der lernphase und zweitens will ich erst mein Problem lösen bis ich dann mit Funktionen<br />
und schleifen das ganze vereinfache und den Code kleiner mache.</p>
<p>Zu meinem Problem</p>
<p>ich will einfach aus einer externen Datei(txt) verschieden Zahlen auslesen<br />
In der .txt Datei stehen z.b solche Zahlen</p>
<p>5,3,1,1,1,2,3,4,5,6,7</p>
<p>Nun möchte ich in einer Schleife jede Zahl einmal Aufrufen, ein Koma übersprigen und im nächsten loop die nächste Zahl lesen.<br />
Heißt,wenn ich jedes mal mit cout die Zahl ausgebe<br />
sollte es im cmd Fenster so aussehen<br />
5<br />
3<br />
1<br />
1<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7</p>
<p>Damit ich dann in dieser Schleife mit den zahlen arbeiten kann<br />
if(Zahl == 1){...}<br />
if(Zahl == 2){...}<br />
if(Zahl == 3){...}<br />
if(Zahl == 4){...}</p>
<p>ich hoffe du hast es jetzt einigermaßen verstanden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496345</guid><dc:creator><![CDATA[NoName1202]]></dc:creator><pubDate>Fri, 20 May 2016 11:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 11:19:04 GMT]]></title><description><![CDATA[<pre><code>while((stream &gt;&gt; zahl &gt;&gt; zeichen) &amp;&amp; zeichen == ',') verarbeite(zahl);
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496348</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 20 May 2016 11:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 11:47:29 GMT]]></title><description><![CDATA[<p>Ich danke dir! Endlich klappt es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496352</guid><dc:creator><![CDATA[NoName1202]]></dc:creator><pubDate>Fri, 20 May 2016 11:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 11:53:11 GMT]]></title><description><![CDATA[<p>Wie macht man das eigentlich <em>wirklich</em>?</p>
<p>sowas?</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;

typedef enum entry_id_tag { EI_TITLE, EI_TILE_SIZE_WIDTH, EI_TILE_SIZE_HEIGHT, EI_MAP_SIZE_WIDTH, EI_MAP_SIZE_HEIGHT, EI_DATA, EI_UNKNOWN } entry_id_t;
std::string entry_names[] = { &quot;Tile:&quot;, &quot;TileSizeWidth:&quot;, &quot;TileSizeHeight:&quot;, &quot;MapSizeWidth:&quot;, &quot;MapSizeHeight:&quot;, &quot;Data:&quot; };

entry_id_t get_entry_id( std::string const &amp; entry_name )
{
	auto result{ std::find( std::begin( entry_names ), std::end( entry_names ), entry_name ) };
	return static_cast&lt; entry_id_t &gt;( result == std::end( entry_names ) ? EI_UNKNOWN : result - entry_names );
}

typedef struct tile_data_tag {
	std::string title;
	unsigned tile_size_width;
	unsigned tile_size_height;
	unsigned map_size_width;
	unsigned map_size_height;
	std::vector&lt; unsigned &gt; data;
} tile_data_t;

template&lt; typename T &gt;
bool try_read( std::istream &amp; is, T &amp; value, char delim = ';' )
{
	char ch;
	if( ( is &gt;&gt; std::skipws &gt;&gt; value &gt;&gt; ch ) &amp;&amp; ch == delim )
		return true;
	return false;
}

int main()
{
	std::ifstream is{ &quot;test.txt&quot; };
	std::string entry_name;
	tile_data_t tile_data;
	bool error = false;

	while( is &gt;&gt; std::skipws &gt;&gt; entry_name ) {

		switch( get_entry_id( entry_name ) ) {
			case EI_TITLE:
				if( !( is &gt;&gt; tile_data.title ) )
					error = true;
				break;

			case EI_TILE_SIZE_WIDTH:
				if( !try_read( is, tile_data.tile_size_width ) )
					error = true;
				break;

			case EI_TILE_SIZE_HEIGHT:
				if( !try_read( is, tile_data.tile_size_height ) )
					error = true;
				break;

			case EI_MAP_SIZE_WIDTH:
				if( !try_read( is, tile_data.map_size_width ) )
					error = true;
				break;

			case EI_MAP_SIZE_HEIGHT:
				if( !try_read( is, tile_data.map_size_height ) )
					error = true;
				break;

			case EI_DATA:
			{
				unsigned value;
				while( try_read( is, value, ',' ) )
					tile_data.data.push_back( value );
				tile_data.data.push_back( value );
				break;
			}

			default:
				error = true;
		}

		if( error )
			is.close();
	}

	if( !error ) {

		std::cout &lt;&lt; entry_names[ EI_TITLE ] &lt;&lt; ' ' &lt;&lt; tile_data.title &lt;&lt; '\n'
			&lt;&lt; entry_names[ EI_TILE_SIZE_WIDTH ] &lt;&lt; ' ' &lt;&lt; tile_data.tile_size_width &lt;&lt; '\n'
			&lt;&lt; entry_names[ EI_TILE_SIZE_HEIGHT ] &lt;&lt; ' ' &lt;&lt; tile_data.tile_size_height &lt;&lt; '\n'
			&lt;&lt; entry_names[ EI_MAP_SIZE_WIDTH ] &lt;&lt; ' ' &lt;&lt; tile_data.map_size_width &lt;&lt; '\n'
			&lt;&lt; entry_names[ EI_MAP_SIZE_HEIGHT ] &lt;&lt; ' ' &lt;&lt; tile_data.map_size_height &lt;&lt; '\n'
			&lt;&lt; entry_names[ EI_DATA ] &lt;&lt; ' ';

		for( auto const &amp; i : tile_data.data )
			std::cout &lt;&lt; i &lt;&lt; ' ';

		std::cout &lt;&lt; &quot;\n\n&quot;;

	} else std::cerr &lt;&lt; &quot;Format error!\n\n&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2496354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496354</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 20 May 2016 11:53:11 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 16:04:29 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Wie macht man das eigentlich <em>wirklich</em>?</p>
</blockquote>
<p>Hm. Das war schon als ernste Frage gedacht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496370</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 20 May 2016 16:04:29 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 16:31:49 GMT]]></title><description><![CDATA[<p>Vielleicht sind 4 Stunden warten am Freitag Nachmittag nicht genug?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496381</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 May 2016 16:31:49 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 16:31:51 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Swordfish schrieb:</p>
<blockquote>
<p>Wie macht man das eigentlich <em>wirklich</em>?</p>
</blockquote>
<p>Hm. Das war schon als ernste Frage gedacht ...</p>
</blockquote>
<p>Normalerweise fängt man damit an, sich die Datenstrukturen gut zu überlegen. Dieser Schritt scheint hier nicht wirklich erfolgt zu sein und ohne komplette Problembeschreibung kann man es auch nicht für jemand anderen erledigen. Und dann kann man sich überlegen, wie man diese Datenstrukturen serialisiert und deserialisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496382</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 20 May 2016 16:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 16:34:49 GMT]]></title><description><![CDATA[<p>Durch die &quot;;&quot; wird die Sache eigentlich eh sehr einfach - muss man sich nichtmal mit dem in C++ etwas lästigen &quot;line breaks are whitespace&quot; Thema befassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496383</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 May 2016 16:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Aus einer Textdatei Zeichen nach jedem Komma einzeln auslesen on Fri, 20 May 2016 17:07:47 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Vielleicht sind 4 Stunden warten am Freitag Nachmittag nicht genug?</p>
</blockquote>
<p>Sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2496390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2496390</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 20 May 2016 17:07:47 GMT</pubDate></item></channel></rss>