<?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[Auslesen einer Textdatei]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche zurzeit eine Textdatei auszulesen die ungefähr ~25k Zeilen hat(~250kb) also nix großes. So sieht zum beispiel eine zeile aus.</p>
<pre><code>6,somename,2,5
</code></pre>
<p>Das format ist immer gleich, also:</p>
<pre><code class="language-cpp">int, string, int, int
</code></pre>
<p>Nun möchte ich gerne die zeile von oben aufteilen und die daten in ein Container laden, wahrscheinlich ein vector oder eine map. Da ich aus der VB ecke komme könnte der code bisschen schmutzig aussehen, muss mich noch dran gewöhnen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

struct gameData
{
	/* 6,somename,2,5 */ 

	int m_gameId; // 6 aus der zeile
	std::string m_gameName; // somename aus der zeile
	int m_gameAltId; // 2 aus der zeile
	int m_gameLevel; // 5 aus der zeile

};

std::vector&lt;gameData&gt; m_gameVec; // Ja ich weiß das Global declarations böse sind, dient jedoch nur für den kleinen Testzweck.

int main()
{
	using namespace std;

	string gameline;
	gameData gameInfos;

	ifstream infile(&quot;gamedata.txt&quot;);

	if(!infile.is_open())
	{
		cout &lt;&lt; &quot;Fehler aufgetreten\n&quot;;
                return 0;
	}

	while(getline(infile, gameline))
	{
		cout &lt;&lt; gameline &lt;&lt; &quot;\n&quot;;
		//gameInfos.m_gameId =    /* ... */
		//gameInfos.m_gameName =  /* ... */
		//gameInfos.m_gameAltId = /* ... */
		//gameInfos.m_gameLevel = /* ... */
		//m_gameVec.push_back(gameInfos);
	}

	return 0;
}
</code></pre>
<p>Nun, dass problem ist in dem while loop. Ich weiß nicht wie ich die Zeile teilen könnte und somit die daten speichern könnte.</p>
<p>Danke im Voraus!<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236351/auslesen-einer-textdatei</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 00:44:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236351.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Mar 2009 18:05:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auslesen einer Textdatei on Fri, 13 Mar 2009 18:05:47 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich versuche zurzeit eine Textdatei auszulesen die ungefähr ~25k Zeilen hat(~250kb) also nix großes. So sieht zum beispiel eine zeile aus.</p>
<pre><code>6,somename,2,5
</code></pre>
<p>Das format ist immer gleich, also:</p>
<pre><code class="language-cpp">int, string, int, int
</code></pre>
<p>Nun möchte ich gerne die zeile von oben aufteilen und die daten in ein Container laden, wahrscheinlich ein vector oder eine map. Da ich aus der VB ecke komme könnte der code bisschen schmutzig aussehen, muss mich noch dran gewöhnen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

struct gameData
{
	/* 6,somename,2,5 */ 

	int m_gameId; // 6 aus der zeile
	std::string m_gameName; // somename aus der zeile
	int m_gameAltId; // 2 aus der zeile
	int m_gameLevel; // 5 aus der zeile

};

std::vector&lt;gameData&gt; m_gameVec; // Ja ich weiß das Global declarations böse sind, dient jedoch nur für den kleinen Testzweck.

int main()
{
	using namespace std;

	string gameline;
	gameData gameInfos;

	ifstream infile(&quot;gamedata.txt&quot;);

	if(!infile.is_open())
	{
		cout &lt;&lt; &quot;Fehler aufgetreten\n&quot;;
                return 0;
	}

	while(getline(infile, gameline))
	{
		cout &lt;&lt; gameline &lt;&lt; &quot;\n&quot;;
		//gameInfos.m_gameId =    /* ... */
		//gameInfos.m_gameName =  /* ... */
		//gameInfos.m_gameAltId = /* ... */
		//gameInfos.m_gameLevel = /* ... */
		//m_gameVec.push_back(gameInfos);
	}

	return 0;
}
</code></pre>
<p>Nun, dass problem ist in dem while loop. Ich weiß nicht wie ich die Zeile teilen könnte und somit die daten speichern könnte.</p>
<p>Danke im Voraus!<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679542</guid><dc:creator><![CDATA[bname]]></dc:creator><pubDate>Fri, 13 Mar 2009 18:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Fri, 13 Mar 2009 18:35:18 GMT]]></title><description><![CDATA[<p>Kleiner Code (nicht getestet, daher koennen Fehler enthalten sein):</p>
<pre><code class="language-cpp">int zaehler = 1;
while (!infile.eof())
{
	char c;
	infile.read(&amp;c, sizeof(char));	// neues Zeichen einlesen
	if (c == ',') zaehler++;
	else if (zaehler == 1)
	{
		GameData.GameID = GameData.GameID * 10 + (c-'0');
	}
	else if (zaehler == 2)
	{
		GameData.GameName.push_back(c);
	}
	else if (zaehler == 3)
	{
		GameData.GameAltID = GameData.GameAltID * 10 + (c-'0');
	}
	else if (zaehler == 4)
	{
		GameData.GameLevel = GameData.GameLevel * 10 + (c-'0');
	}
	else if (c == '\n')
	{
		GameVectorDings.push_back(GameData);	// neue Daten hinzufuegen
		zaehler = 1;	// zaehler zuruecksetzen
		GameData.GameID = 0;	// zuruecksetzen
		GameData.GameAltID = 0;
		GameData.GameName = &quot;&quot;;
		GameData.GameLevel = 0;
	}
}
</code></pre>
<p>So aehnlich koennte man es machen (bzw. ich hab es schon oft auf diese Weise gemacht).<br />
Fehlt nur noch die Ueberpruefung des Ganzen, also dass es wirklich nur 3 Kommas gibt und dass der erste und di eletzten beiden Werte Zahlen sind etc., ich denke du weisst was ich meine.</p>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679567</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Fri, 13 Mar 2009 18:35:18 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Fri, 13 Mar 2009 18:57:21 GMT]]></title><description><![CDATA[<p>Der bessere Weg wäre natürlich, dem struct gameData nen operator &gt;&gt; zu spendieren... Dann kann das ja einfach so einlesen:</p>
<pre><code class="language-cpp">for (gameData tmp; stream &gt;&gt; tmp; )
{
  dein_vector.push_back (tmp);
}
</code></pre>
<p>gibt nen tollen Artikel zum Thema operatoren-Überladung hier - wenn du das allerdings noch nie gehört hast, dann wird das wohl nicht reichen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679581</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 13 Mar 2009 18:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Fri, 13 Mar 2009 19:01:21 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Der bessere Weg wäre natürlich, dem struct gameData nen operator &gt;&gt; zu spendieren... Dann kann das ja einfach so einlesen:</p>
<pre><code class="language-cpp">for (gameData tmp; stream &gt;&gt; tmp; )
{
  dein_vector.push_back (tmp);
}
</code></pre>
<p>gibt nen tollen Artikel zum Thema operatoren-Überladung hier - wenn du das allerdings noch nie gehört hast, dann wird das wohl nicht reichen...</p>
<p>bb</p>
</blockquote>
<p>Der operator muss aber auch programmiert werden - und wenn die ganze Prozedur nicht mehrmals im Programm gemacht werden muss, ist das sogar imho unnoetig.</p>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679583</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Fri, 13 Mar 2009 19:01:21 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Fri, 13 Mar 2009 19:06:03 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>Der bessere Weg wäre natürlich, dem struct gameData nen operator &gt;&gt; zu spendieren... Dann kann das ja einfach so einlesen:</p>
<pre><code class="language-cpp">for (gameData tmp; stream &gt;&gt; tmp; )
{
  dein_vector.push_back (tmp);
}
</code></pre>
<p>gibt nen tollen Artikel zum Thema operatoren-Überladung hier - wenn du das allerdings noch nie gehört hast, dann wird das wohl nicht reichen...</p>
<p>bb</p>
</blockquote>
<p>Der operator muss aber auch programmiert werden - und wenn die ganze Prozedur nicht mehrmals im Programm gemacht werden muss, ist das sogar imho unnoetig.</p>
<p>Gruss<br />
Cartman</p>
</blockquote>
<p>Klar, muss man den auch implementieren - aber das ist dann immer der Teil, wo ich erst mal wissen wöllte, ob ihm das was nutzt oder er das gar net versteht - zum Code c&amp;p-fertig machen bin ich nich der richtige...<br />
Nein, unnötig ist es niemals... Auch, wenns nur ein einziges mal vorkommt - genau das is der Sinn der op-Überladung: Übersichtlichkeit UND die einfacheree Handhabung, wenn man den Code ma ändern möchte...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679586</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 13 Mar 2009 19:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Fri, 13 Mar 2009 23:41:02 GMT]]></title><description><![CDATA[<p>Was hier auch gehen würde, übersichtlich und einfach wäre wäre noch sscanf wenn man die Zeile schonmal in nem Puffer hat kann man damit auch die zeile einfach zerlegen und fertig. So kompliziert dafür erst herum zu lesen und dann zuzuweisen würde ich nicht arbeiten.</p>
<pre><code class="language-cpp">int main()
{
    using namespace std;

    char gameline[256];
    gameData gameInfos;

    ifstream infile(&quot;gamedata.txt&quot;);

    if(!infile.is_open())
    {
        cout &lt;&lt; &quot;Fehler aufgetreten\n&quot;;
                return 0;
    }

    while(getline(gameline,256))
    {
        cout &lt;&lt; gameline &lt;&lt; &quot;\n&quot;;
        sscanf(&quot;%d,%s,%d,%d&quot;,
                gameInfos.m_gameId,gameInfos.m_gameName,
                &amp;gameInfos.m_gameAltId,&amp;gameInfos.m_gameLevel)
        m_gameVec.push_back(gameInfos);
        ZeroMemory(gameline,256);
    }

    return 0;
}
</code></pre>
<p>Dieses Beispiel ist kurz und übersichtlich. Einziger Haken man muß die zeile als char* einlesen, deswegen auch das Char array und wennd er Name als String vorliegen soll muß man die Char* die sscanf liefert noch in String umwandeln. Es wäre aber eine recht einfache Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679680</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Fri, 13 Mar 2009 23:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sat, 14 Mar 2009 07:44:16 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe es dir mal schwind mit std::ifstream geschrieben. Den &quot;m_gameName&quot; musste eventuell nochmal überarbeiten, weil der vielleicht falsch eingelesen werden könnte. Ansonsten bekommste den richtigen Code mit dem Iteratordurchlauf später, hab noch zu tun.</p>
<p>Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string.h&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt;
#include &lt;conio.h&gt;

int convertToInt(std::string nStr)
{
	return ::atoi(nStr.c_str());
}

std::string const getWord(std::string Line, int Pos) 
{
	std::vector&lt;std::string&gt; Vec;
	std::stringstream ss(Line);
	std::string Word, a;
    while(ss &gt;&gt; Word)
    Vec.push_back(Word);

	return (Pos+1 &gt; Vec.size() ? &quot;&quot; : Vec[Pos] );
}

#pragma pack(1);
struct Data
{
	Data():
	m_gameId	(0),
	m_gameAltId (0),
	m_gameLevel (0)
	{}

	int m_gameId; 
    std::string m_gameName; 
    int m_gameAltId;
    int m_gameLevel; 
};
#pragma pack();

int main(void)
{
	std::ifstream inFile(&quot;Test.txt&quot;, std::ios::in);
	if(inFile.fail()) std::cout&lt;&lt;&quot;Tja, war wohl nix...&quot;&lt;&lt;std::endl; 

	std::string Line;

	size_t find;
	find = Line.find(&quot;,&quot;);

	std::vector&lt;Data&gt; DataObjects;

	std::vector&lt;Data&gt;::const_iterator iData;

	while(!inFile.eof())
	{
		Data data;

		getline(inFile, Line);

		data.m_gameId = convertToInt(getWord(Line, 0));
		Line.replace(Line.find(&quot;,&quot;), 1, &quot; &quot;);
		data.m_gameName = getWord(Line, 1);
		Line.replace(Line.find(&quot;,&quot;), 1, &quot; &quot;);
		data.m_gameAltId = convertToInt(getWord(Line, 2));
		Line.replace(Line.find(&quot;,&quot;), 1, &quot; &quot;);
		data.m_gameLevel = convertToInt(getWord(Line, 3));

		DataObjects.push_back(data);
	};

	getch();
}
</code></pre>
<p>(Ungetestet!)</p>
<p>Mfg.<br />
way</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679719</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Sat, 14 Mar 2009 07:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sat, 14 Mar 2009 12:26:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a></p>
<p>Werde ich mir durchlesen, danke. Danke alle, habs so gelöst, falls irgendwas &quot;schlimm&quot; ist, bitte sagen.</p>
<p>GameSetup.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;
#include &lt;cstdlib&gt;

struct gameData
{
	int m_gameId; 
	std::string m_gameName; 
	int m_gameAltId; 
	int m_gameLevel; 
};

class GameSetup
{
   public:
   GameSetup();
   ~GameSetup();

   void outputGame();
   bool loadGame();

   private:
   std::vector&lt;gameData&gt; m_gameVec;
   gameData data_;
};

std::vector&lt;std::string&gt; TokenizeString(const std::string&amp; str, const std::string&amp; delim);
</code></pre>
<p>GameSetup.cpp</p>
<pre><code class="language-cpp">#include &quot;GameSetup.h&quot;

GameSetup::GameSetup()
{
	data_.m_gameAltId = 0;
	data_.m_gameId = 0;
	data_.m_gameLevel = 0;
	data_.m_gameName = &quot;&quot;;
}

GameSetup::~GameSetup()
{
    m_gameVec.clear();
}

void GameSetup::outputGame()
{
	using namespace std;

	std::vector&lt;gameData&gt;::const_iterator Itr;
	for(Itr = m_gameVec.begin(); Itr != m_gameVec.end(); Itr++ )
	{
		cout &lt;&lt; Itr-&gt;m_gameId 
	       &lt;&lt; &quot;,&quot;
           &lt;&lt; Itr-&gt;m_gameName
	       &lt;&lt; &quot;,&quot;
           &lt;&lt; Itr-&gt;m_gameAltId
	       &lt;&lt; &quot;,&quot;
	       &lt;&lt; Itr-&gt;m_gameLevel
	       &lt;&lt; &quot;,&quot;
	       &lt;&lt; &quot;\n&quot;;	   
	}

}

bool GameSetup::loadGame()
{
	using namespace std;

	string gameline;
	gameData gameInfos;
	std::vector&lt;std::string&gt; args;

	ifstream infile(&quot;gamedata.txt&quot;);

	if(!infile.is_open())
	{
		cout &lt;&lt; &quot;Error\n&quot;;
        return false;
	}

	while(getline(infile, gameline))
	{
		args = TokenizeString(gameline, &quot;,&quot;);

		string args0 = args[0];
		string args2 = args[2];
		string args3 = args[3];
		int id = atoi(args0.c_str());
		int altid = atoi(args2.c_str());
		int level = atoi(args3.c_str());

		gameInfos.m_gameId = id;
		gameInfos.m_gameName = args[1];
		gameInfos.m_gameAltId = altid;
		gameInfos.m_gameLevel = level;

	    m_gameVec.push_back(gameInfos);

	}

	return true;

}
std::vector&lt;std::string&gt; TokenizeString(const std::string&amp; str, const std::string&amp; delim)
{
        // http://www.gamedev.net/community/forums/topic.asp?topic_id=381544

	using namespace std;
	vector&lt;string&gt; tokens;
	size_t p0 = 0, p1 = string::npos;
	while(p0 != string::npos)
	{
		p1 = str.find_first_of(delim, p0);
		if(p1 != p0)
		{
			string token = str.substr(p0, p1 - p0);
			tokens.push_back(token);
		}
		p0 = str.find_first_not_of(delim, p1);
	}
	return tokens;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;GameSetup.h&quot;

int main()
{
	using namespace std;
	GameSetup * game_ = new GameSetup();

	if(!game_-&gt;loadGame())
	{
		cout &lt;&lt; &quot;::LoadGame Failed\n&quot;;
	}

	game_-&gt;outputGame();
	delete game_;

	return 0;
}
</code></pre>
<p>Ne frage noch, sollte ich eig die strings wie z.B &quot;args0, args2, args3&quot; In dem loop deklarieren oder bevor dem loop? Oder gibt es da keine großen unterschiede?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679822</guid><dc:creator><![CDATA[bname]]></dc:creator><pubDate>Sat, 14 Mar 2009 12:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sat, 14 Mar 2009 14:21:03 GMT]]></title><description><![CDATA[<p>way schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Ich wollte ja erst nur nen paar Teile korrigieren, aber war ja.... naja - nicht so dolle iwie...<br />
Beispiele</p>
<pre><code class="language-cpp">#include &lt;string.h&gt; //&lt;string&gt;

int convertToInt(const std::string &amp;nStr) //klassen werden nicht per Value übergeben, wenn man keine Kopie braucht...

#pragma pack(1); //';' ist unnötig - und der Sinn hinter dem pack hier, erschließt sich mir auch nicht ganz...

int main() //void schreibt man in C++ nicht mehr in die Parameterliste

find = Line.find_first_of(','); //statt find (&quot;,&quot;)

std::vector&lt;Data&gt;::const_iterator iData; //brauchst du _nie_
</code></pre>
<p>gibt noch mehr, aber egal - hier meine Lösung:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;conio.h&gt;

struct Data
{
	Data ()
		: m_gameId (0),
		m_gameAltId (0),
		m_gameLevel (0)
		{}

	int m_gameId; 
	std::string m_gameName; 
	int m_gameAltId;
	int m_gameLevel; 
};

template&lt; char C &gt;   
std::istream&amp; Char( std::istream&amp; in ) 
{
	char c; 
	if( in &gt;&gt; c &amp;&amp; c != C ) 
		in.setstate( std::ios_base::failbit ); 
	return in;
}

std::istream&amp; operator &gt;&gt; (std::istream&amp; s, Data &amp;val)
{
	s &gt;&gt; m_gameId &gt;&gt; Char&lt;','&gt;
	  &gt;&gt; m_gameName &gt;&gt; Char&lt;','&gt;
	  &gt;&gt; m_gameAltId &gt;&gt; Char&lt;','&gt;
	  &gt;&gt; m_gameLevel;
	return s;
}

std::ostream&amp; operator &lt;&lt; (std::ostream&amp; s, const Data &amp;val)
{
	s &lt;&lt; m_gameId &lt;&lt; ','
	  &lt;&lt; m_gameName &lt;&lt; ','
	  &lt;&lt; m_gameAltId &lt;&lt; ','
	  &lt;&lt; m_gameLevel;
	return s;
}

int main()
{
	std::ifstream inFile(&quot;Test.txt&quot;, std::ios::in);
	if(inFile.fail()) std::cout&lt;&lt;&quot;Tja, war wohl nix...&quot;&lt;&lt;std::endl; 

	std::vector&lt;Data&gt; DataObjects;
	for (Data tmp; inFile &gt;&gt; tmp; inFile &gt;&gt; Char&lt;'\n'&gt;)
		DataObjects.push_back (tmp);

	getch();
}
</code></pre>
<p>ist auch ungetestet</p>
<p>bname schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class GameSetup
{
public:

   GameSetup();
   ~GameSetup(); //unnötig

   void outputGame(); //würd ich nich als fkt machen...
   bool loadGame(); //das auch nicht, falls aber doch, würd ichs &quot;void LoadGames()&quot; nennen

private:
   typedef std::vector&lt;gameData&gt; TgameVec; //ich mag so ne typedefs - ist einfach leichter umzustellen und weniger zu tippen

   TgameVec m_gameVec;
   gameData data_; //brauchst du wofür?
};
</code></pre>
</blockquote>
<p>Ich würde so einrücken...</p>
<p>bname schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int main()
{
    using namespace std;
    GameSetup game;

    if(game.loadGame())
    {
        cout &lt;&lt; &quot;::LoadGame Failed\n&quot;;
    }

    game.outputGame();
}
</code></pre>
</blockquote>
<p>So würde die main-fkt bei mir aussehen <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>
<p>bname schrieb:</p>
<blockquote>
<pre><code class="language-cpp">GameSetup::GameSetup()
{
    data_.m_gameAltId = 0;
    data_.m_gameId = 0;
    data_.m_gameLevel = 0;
    data_.m_gameName = &quot;&quot;;
}
</code></pre>
</blockquote>
<p>Für so was gibts<br />
a) ne Initialisierungsliste<br />
b) nen (Default-) Konstruktor für gameData</p>
<p>Außerdem brauchst du data_ ja eh nie - brauchst also auch keinen CTor ^^</p>
<p>bname schrieb:</p>
<blockquote>
<p>Ne frage noch, sollte ich eig die strings wie z.B &quot;args0, args2, args3&quot; In dem loop deklarieren oder bevor dem loop? Oder gibt es da keine großen unterschiede?</p>
</blockquote>
<p>Das Thema gabs vor kurzem (also innerhalb der letzten 3 Tage) iwie auch ma im Forum - wenn ich mich recht entsinne, ist folgendes rausgekommen:<br />
- der Compiler optimiert es so und so<br />
- der Zeitunterschied wird (wenn überhaupt) minimal sein - bei bei den Build-In-Datentypen (also int/...) sollte es nicht mal nen Unterschied machen<br />
- falls es dich wirklich interessiert wirst du nen Profiler nehmen müssen (und davor mal im asm-Code gucken, obs der Compiler vll doch ganz anders optimiert hat ^^)</p>
<p>bb</p>
<p>PS: Falls du Fragen hast, stell sie ^^ Hab jz scho so ewig hier rum getippt, dass es schade wäre, wenn dus einfach nur als &quot;versteh ich nich&quot; abtun würdest ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679876</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 14 Mar 2009 14:21:03 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sat, 14 Mar 2009 20:05:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a></p>
<p>Hi,</p>
<ol>
<li>
<p>Wieso sollte ich outputgame/loadGame nicht als Funktion machen? Wie sonst?</p>
</li>
<li>
<p>_data brauch ich ja jetzt nicht, dank dem ctor für gameData, danke. <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>
</li>
<li>
<p>Wegen dem in/before declaration @ loop, danke für die infos.</p>
</li>
<li>
<p>Von typedef hab ich gehört, dachte das es aber eher C-Stil wäre? Da tippst du doch mehr als ich. <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>
</li>
</ol>
<p>Zu deinem code, sieht besser aus und natürlich kleiner. Nur das problem ist, dass es nicht ganz funktioniert, leider konnte ich das problem bis jetzt nicht finden.</p>
<ol>
<li>Falls es kein whitespace gibt, dann addiert er noch 2 nullen dazu.</li>
</ol>
<pre><code>gamedata.txt
2,gfdgdd,3,5
output: 2,gfdgdd,3,5,0,0
</code></pre>
<ol start="2">
<li>Falls der string ein whitespace hat klappts auch nicht.</li>
</ol>
<pre><code>gamedata.txt
2,gfd gdd,3,5
output: 2,gfd,0,0
</code></pre>
<p>Danke für die hilfe, grüße.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680048</guid><dc:creator><![CDATA[bname]]></dc:creator><pubDate>Sat, 14 Mar 2009 20:05:29 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sat, 14 Mar 2009 20:32:11 GMT]]></title><description><![CDATA[<blockquote>
<ol>
<li>Falls es kein whitespace gibt, dann addiert er noch 2 nullen dazu.</li>
</ol>
</blockquote>
<p>Versteh ich nicht</p>
<blockquote>
<ol start="2">
<li>Falls der string ein whitespace hat klappts auch nicht.</li>
</ol>
</blockquote>
<p>scheiße - hatte ich vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>entweder, format ändern (string als letztes)<br />
oder ne längenangabe des strings hinzufügen<br />
oder du machst es ganz anders <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
<blockquote>
<ol start="4">
<li>Von typedef hab ich gehört, dachte das es aber eher C-Stil wäre? Da tippst du doch mehr als ich.</li>
</ol>
</blockquote>
<p>Im Header auf jeden Fall... Und ich kann dann auch ganz einfach aus dem vector ne list/deque/... machen ^^<br />
Ich änder einfach das typedef von std::vector&lt;X&gt; auf std::list&lt;X&gt; oder wie auch immer...</p>
<p>Und im Source ist es kürzer und wie gesagt - ich hab eben auch die Freiheit, den Container jederzeit zu ändern:</p>
<pre><code class="language-cpp">for (TgameVec::iterator i(gameVec.begin()), e(gameVec.end()); i != e; ++i)
{
 std::cout &lt;&lt; *i &lt;&lt; std::endl;
}
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680074</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 14 Mar 2009 20:32:11 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sat, 14 Mar 2009 21:59:42 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<blockquote>
<ol start="2">
<li>Falls der string ein whitespace hat klappts auch nicht.</li>
</ol>
</blockquote>
<p>scheiße - hatte ich vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>entweder, format ändern (string als letztes)<br />
oder ne längenangabe des strings hinzufügen<br />
oder du machst es ganz anders <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
</blockquote>
<p>Ich möchte an dieser Stelle nochmal auf die vorzüge von sscanf hinweisen, wie ich weietr oben schon vorgeschlagen hatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680130</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sat, 14 Mar 2009 21:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sat, 14 Mar 2009 23:26:09 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<blockquote>
<ol start="2">
<li>Falls der string ein whitespace hat klappts auch nicht.</li>
</ol>
</blockquote>
<p>scheiße - hatte ich vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>entweder, format ändern (string als letztes)<br />
oder ne längenangabe des strings hinzufügen<br />
oder du machst es ganz anders <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
</blockquote>
<p>Ich möchte an dieser Stelle nochmal auf die vorzüge von sscanf hinweisen, wie ich weietr oben schon vorgeschlagen hatte.</p>
</blockquote>
<p>Und ich möchte auf EINIGE Nachteile aufmerksam machen:<br />
- Länge &gt; 255 --&gt; ?<br />
- String enthält ',' -&gt; liegt aber am &quot;undurchdachten&quot; Format<br />
- keine Typsicherheit</p>
<pre><code class="language-cpp">sscanf(&quot;%d,%s,%d,%d&quot;,
                gameInfos.m_gameId,gameInfos.m_gameName,
                &amp;gameInfos.m_gameAltId,&amp;gameInfos.m_gameLevel)
</code></pre>
<p>glaube nicht, dass das compiliert <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="😛"
    /><br />
sscanf (...., gameInfos.m_gameName, ...);</p>
<p>Wenn überhaupt:</p>
<pre><code class="language-cpp">gameInfos.m_gameName.reserve(250);
sscanf(...., &amp;gameInfos.m_gameName[0], ...);
</code></pre>
<p>allerdings hat das nichts mehr mit Standard-konform zu tun, so weit ich weiß ^^</p>
<p>Er soll einfach den string ans Ende stecken, dann kann er auch schön nen std::getline verwenden - oder er speichert davor die Länge - wäre der bessere Weg (auch, wenn ein Spielname für gewöhnlich keinen Zeilenumbruch enthält ^^)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680165</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 14 Mar 2009 23:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Auslesen einer Textdatei on Sun, 15 Mar 2009 00:45:56 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Und ich möchte auf EINIGE Nachteile aufmerksam machen:<br />
- Länge &gt; 255 --&gt; ?<br />
- String enthält ',' -&gt; liegt aber am &quot;undurchdachten&quot; Format<br />
- keine Typsicherheit</p>
</blockquote>
<p>Ja gut ok wenn ein Komma drinsteht dann funktioniert es nicht, aber sscanf ist Grundsätzlich nicht so schlecht wenn man etwas auf die ecken und Kannten aufpasst.</p>
<p>unskilled schrieb:</p>
<blockquote>
<pre><code class="language-cpp">sscanf(&quot;%d,%s,%d,%d&quot;,
                gameInfos.m_gameId,gameInfos.m_gameName,
                &amp;gameInfos.m_gameAltId,&amp;gameInfos.m_gameLevel)
</code></pre>
<p>glaube nicht, dass das compiliert <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="😛"
    /><br />
sscanf (...., gameInfos.m_gameName, ...);</p>
<p>allerdings hat das nichts mehr mit Standard-konform zu tun, so weit ich weiß ^^</p>
</blockquote>
<p>Das ist auch der Grund wieso drunetr noch steht (was bei deinem Quote abgeschnitten ist) das das nur mit char* funktioniert und er es wieder in nen String umwandeln müsste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680193</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Sun, 15 Mar 2009 00:45:56 GMT</pubDate></item></channel></rss>