<?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[Textdateien in Objekte einer Klasse umwandeln und in Vector ablegen....]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe mal wieder etwas auf den Schlauch und brauche einen Denkanstoß <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=";)"
      alt="😉"
    /> Ich hab zu der Aufgabe schon zu einem anderen Problem etwas gepostet - ich wiederhols hier nochmal kurz. Also ich hab da eine Klasse welche ein Ascii-Objekt beschreibt, man kann mittels der Klasse verschiedene Funktion mit dem Objekt machen. U.a Zeilen hinzufügen oder durch das Überladen von Relationen Objekte diesen Typs vergleichen...</p>
<p>Bisher konnte ich eine Datei einlesen und 1 Objekt daraus erzeugen, in dem ich den Inputfilestream zeileweise auslese und die Zeilen dem Objekt zufügen...</p>
<p>Nun möchte ich meiner Klasse aber mehrer Textdateien (Pfade) übergeben können, Ich möchte also das jeweils eine Textdatei zu einem Objekt vom Typ meiner Klasse wird...und diese Objekte möchte ich in einem Container ablegen..</p>
<p>nun bin ich am umsetzen.. und weiß nicht wie ich es machen soll, dass ich Datei-abhängig einlesen kann.. sollte ich das Einlesen mit in die Klasse einbauen? anstatt wie jetzt das Objekt von außen einzeln mit Zeilen zu &quot;füttern&quot;?</p>
<p>Habe sowas noch nicht gemacht und bräuchte mal nen paar gute Ideen..</p>
<p>Als anhang mal der Quellcode.. zu erst der Header mit der Klasse, dann eine cpp welche den Header vervollständigt und eine cpp, welche die main-methode enthält, das Objekt erzeugt hat und noch ein Rahmen um das Objekt legt sowie es ausgibt...</p>
<p>Header:</p>
<pre><code class="language-cpp">//Includeguard ASCIIPICTURE//
#if !defined(ASCIIPICTURE_H)
#define ASCIIPICTURE_H 
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;istream&gt;
#include &lt;ostream&gt;
///////////////////////////

class AsciiPicture
{

private:
	typedef std::vector&lt;std::string&gt; linesvector;
	linesvector lines;

public:

	AsciiPicture(); //DefaultKonstruktor

	//Typedefs für Linesvector///////////////////////////////////
	typedef linesvector::size_type size_type; //wie unsigned int
	typedef linesvector::iterator iter;
	typedef linesvector::const_iterator const_iter;
	////////////////////////////////////////////////////////////

	//Zeile hinzufügen
	void add_line(const std::string&amp; text); 

	//Zeile an bestimmter Postion hinzufügen
	void add_line(const std::string&amp; text, size_type pos);

	//Zeile an bestimmter Position löschen
	void delete_line (size_type pos);

	//Bestimmte Zeile zurückgeben
	std::string&amp; get_line(size_type pos){
		return lines.at(pos);
		}

	const std::string&amp; get_line(size_type pos)const {
		return lines.at(pos);
		}

	//Bestimmen der maximalen Spaltenbreite
	size_type get_column ()const{ 
		std::string::size_type max=0;
		linesvector::const_iterator beginline=lines.begin();
		linesvector::const_iterator endline=lines.end();
		while(beginline!=endline) {
			if (max &lt; (*beginline).size()){
				max=(*beginline).size();
			}	
			++beginline;
		}
		return max;
	}

	//Ermitteln der Anzahl der Zeilen
	size_type get_row()const{return lines.size();}
	////////////////////////////////////////////////////////////////////

	//Iteratoren und Const-Iteratoren für Anfang und Ende im LinesVector lines//
	iter begin(){return lines.begin();}
	iter end(){return lines.end();}
	const_iter begin() const{return lines.begin();}
	const_iter end() const{return lines.end();}
	///////////////////////////////////////////////////////////////////////////

	///Operator[]-Zugriff//////////////////////////////////////////////////////
	std::string&amp; operator[](unsigned int i){

		return get_line(i);

	}

	const std::string&amp; operator[] (unsigned int i)const {

		return get_line(i);
	}
	/////////////////////////////////////////////////////////////////////////////

	///Operatoren-Überladung///////////////////////////////////////////////////
	inline bool operator &lt; (AsciiPicture&amp; rhs)
	{
		return get_row() &lt; rhs.get_row(); 
	}

	inline bool operator &lt;= (AsciiPicture&amp; rhs)
	{
		return get_row() &lt;= rhs.get_row(); 
	}

	inline bool operator &gt; (AsciiPicture&amp; rhs)
	{
		return get_row() &gt; rhs.get_row(); 
	}

	inline bool operator &gt;= (AsciiPicture&amp; rhs)
	{
		return get_row() &gt;= rhs.get_row(); 
	}
};

#endif
</code></pre>
<p>cpp für header</p>
<pre><code class="language-cpp">#include &quot;AsciiPicture.h&quot;

//Default Konstruktor, erzeugt eine Instanz der Klasse AsciiPicture
AsciiPicture::AsciiPicture(){}

//Zeile hinzufügen
void AsciiPicture::add_line(const std::string&amp; text)
{
	lines.push_back(text);
}

//Zeile an bestimmter Postion hinzufügen
void AsciiPicture::add_line(const std::string&amp; text, size_type pos)
{
	linesvector::iterator iter=lines.begin()+pos;
	lines.insert(iter, text);
}

//Zeile an bestimmter Position löschen
void AsciiPicture::delete_line (size_type pos)
{
	lines.erase(lines.begin()+pos); //setzt Iterator auf die Position und löscht
}

///Operatoren-Überladung//////////////////////////////////////////////////////
/*bool AsciiPicture::operator&gt; (const AsciiPicture&amp; rhs)
{
	return operator&gt; (rhs-&gt;lines.size(), *this-&gt;lines.size());
}*/
</code></pre>
<p>cpp mit main-method</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt; 
#include &quot;AsciiPicture.h&quot;

void input(AsciiPicture&amp; asciipicture);
void frame (AsciiPicture&amp; asciipicture, char frame);
void output(const AsciiPicture&amp; asciipicture);
/*Stünden sie im Header, würden sie nicht gefunden*/

int main (){
	void createAsciiPicture();
	return 0;
}

void createAsciiPicture (){

	AsciiPicture myAsciiPicture; //Erzeugt AsciiPicture Objekt
	input (myAsciiPicture); //Übergibt String-Lines dem Objekt
	frame (myAsciiPicture,'+'); //Übergibt Rahmen, Rahmensymbol dem Objekt
	output (myAsciiPicture); //Auslesen und Ausgabe des Objekts
}

//Einlesen des Strings
void input(AsciiPicture&amp; asciipicture){

	std::cout &lt;&lt; &quot;Bitte geben Sie ein Asciibild ein :\n&quot;;

	std::ifstream ifs;
	std::string text;
	//ifs.open(&quot;C:/asci1.txt&quot;);
	ifs.open(&quot;C:/asci2.txt&quot;);
	while(std::getline(ifs,text)){
		asciipicture.add_line(text);//übergibt text an das Objekt		
	}
}

//Fügt dem Objekt ein Rahmen hinzu
void frame (AsciiPicture&amp; asciipicture, char frame){

	//Rahmenerstellung
	const std::string left_border (frame+std::string(&quot; &quot;)); 
	const std::string right_border (std::string(&quot; &quot;)+frame); 

	const AsciiPicture::size_type max = asciipicture.get_column();//Maximale Spaltenbreite

	const std::string full_line(max+4, frame);//4, da 2 Rahmensymbole und 2 Leerzeichen
	const std::string std_line = left_border+std::string(max, ' ')+right_border; 

	//Rahmen hinzufügen
	const AsciiPicture::size_type row = asciipicture.get_row();

	for(AsciiPicture::size_type i = 0; i&lt;row; ++i)
	{
		//Leerräume zwischen Chars und Rand mit Leerzeichen füllen
		AsciiPicture::size_type anz = max-asciipicture.get_line(i).size();//Ermitteln der &quot;Leerräume&quot;

		//Ermittelte Anzahl von Leerzeichen erstellen
		std::string space(anz, ' ');

		asciipicture.get_line(i).insert(0,left_border);
		asciipicture.get_line(i).append(space+right_border); //Leerzeichen hinzufügen
	}

	//Äußere Rahmen hinzufügen
	asciipicture.add_line(full_line, AsciiPicture::size_type(0)); //Oben
	asciipicture.add_line(std_line, AsciiPicture::size_type(1)); //Oben - 1
	asciipicture.add_line(std_line);//Unten - 1
	asciipicture.add_line(full_line);//Unten
}

void output(const AsciiPicture&amp; asciipicture) 
{
	std::cout&lt;&lt;&quot;Ergebnis: &quot;&lt;&lt;std::endl&lt;&lt;std::endl;
	AsciiPicture::const_iter begin= asciipicture.begin();

	//Ausgabe
	while(begin!=asciipicture.end())
	{
		std::cout&lt;&lt;*begin&lt;&lt;std::endl;
		++begin;
	}

	std::cout&lt;&lt;std::endl;
	std::cout&lt;&lt;asciipicture[2]&lt;&lt;std::endl;

}
</code></pre>
<p>Vielen Dank schonmal <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/topic/169598/textdateien-in-objekte-einer-klasse-umwandeln-und-in-vector-ablegen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 18:21:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169598.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Jan 2007 20:02:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Textdateien in Objekte einer Klasse umwandeln und in Vector ablegen.... on Sat, 06 Jan 2007 21:31:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe mal wieder etwas auf den Schlauch und brauche einen Denkanstoß <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=";)"
      alt="😉"
    /> Ich hab zu der Aufgabe schon zu einem anderen Problem etwas gepostet - ich wiederhols hier nochmal kurz. Also ich hab da eine Klasse welche ein Ascii-Objekt beschreibt, man kann mittels der Klasse verschiedene Funktion mit dem Objekt machen. U.a Zeilen hinzufügen oder durch das Überladen von Relationen Objekte diesen Typs vergleichen...</p>
<p>Bisher konnte ich eine Datei einlesen und 1 Objekt daraus erzeugen, in dem ich den Inputfilestream zeileweise auslese und die Zeilen dem Objekt zufügen...</p>
<p>Nun möchte ich meiner Klasse aber mehrer Textdateien (Pfade) übergeben können, Ich möchte also das jeweils eine Textdatei zu einem Objekt vom Typ meiner Klasse wird...und diese Objekte möchte ich in einem Container ablegen..</p>
<p>nun bin ich am umsetzen.. und weiß nicht wie ich es machen soll, dass ich Datei-abhängig einlesen kann.. sollte ich das Einlesen mit in die Klasse einbauen? anstatt wie jetzt das Objekt von außen einzeln mit Zeilen zu &quot;füttern&quot;?</p>
<p>Habe sowas noch nicht gemacht und bräuchte mal nen paar gute Ideen..</p>
<p>Als anhang mal der Quellcode.. zu erst der Header mit der Klasse, dann eine cpp welche den Header vervollständigt und eine cpp, welche die main-methode enthält, das Objekt erzeugt hat und noch ein Rahmen um das Objekt legt sowie es ausgibt...</p>
<p>Header:</p>
<pre><code class="language-cpp">//Includeguard ASCIIPICTURE//
#if !defined(ASCIIPICTURE_H)
#define ASCIIPICTURE_H 
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;istream&gt;
#include &lt;ostream&gt;
///////////////////////////

class AsciiPicture
{

private:
	typedef std::vector&lt;std::string&gt; linesvector;
	linesvector lines;

public:

	AsciiPicture(); //DefaultKonstruktor

	//Typedefs für Linesvector///////////////////////////////////
	typedef linesvector::size_type size_type; //wie unsigned int
	typedef linesvector::iterator iter;
	typedef linesvector::const_iterator const_iter;
	////////////////////////////////////////////////////////////

	//Zeile hinzufügen
	void add_line(const std::string&amp; text); 

	//Zeile an bestimmter Postion hinzufügen
	void add_line(const std::string&amp; text, size_type pos);

	//Zeile an bestimmter Position löschen
	void delete_line (size_type pos);

	//Bestimmte Zeile zurückgeben
	std::string&amp; get_line(size_type pos){
		return lines.at(pos);
		}

	const std::string&amp; get_line(size_type pos)const {
		return lines.at(pos);
		}

	//Bestimmen der maximalen Spaltenbreite
	size_type get_column ()const{ 
		std::string::size_type max=0;
		linesvector::const_iterator beginline=lines.begin();
		linesvector::const_iterator endline=lines.end();
		while(beginline!=endline) {
			if (max &lt; (*beginline).size()){
				max=(*beginline).size();
			}	
			++beginline;
		}
		return max;
	}

	//Ermitteln der Anzahl der Zeilen
	size_type get_row()const{return lines.size();}
	////////////////////////////////////////////////////////////////////

	//Iteratoren und Const-Iteratoren für Anfang und Ende im LinesVector lines//
	iter begin(){return lines.begin();}
	iter end(){return lines.end();}
	const_iter begin() const{return lines.begin();}
	const_iter end() const{return lines.end();}
	///////////////////////////////////////////////////////////////////////////

	///Operator[]-Zugriff//////////////////////////////////////////////////////
	std::string&amp; operator[](unsigned int i){

		return get_line(i);

	}

	const std::string&amp; operator[] (unsigned int i)const {

		return get_line(i);
	}
	/////////////////////////////////////////////////////////////////////////////

	///Operatoren-Überladung///////////////////////////////////////////////////
	inline bool operator &lt; (AsciiPicture&amp; rhs)
	{
		return get_row() &lt; rhs.get_row(); 
	}

	inline bool operator &lt;= (AsciiPicture&amp; rhs)
	{
		return get_row() &lt;= rhs.get_row(); 
	}

	inline bool operator &gt; (AsciiPicture&amp; rhs)
	{
		return get_row() &gt; rhs.get_row(); 
	}

	inline bool operator &gt;= (AsciiPicture&amp; rhs)
	{
		return get_row() &gt;= rhs.get_row(); 
	}
};

#endif
</code></pre>
<p>cpp für header</p>
<pre><code class="language-cpp">#include &quot;AsciiPicture.h&quot;

//Default Konstruktor, erzeugt eine Instanz der Klasse AsciiPicture
AsciiPicture::AsciiPicture(){}

//Zeile hinzufügen
void AsciiPicture::add_line(const std::string&amp; text)
{
	lines.push_back(text);
}

//Zeile an bestimmter Postion hinzufügen
void AsciiPicture::add_line(const std::string&amp; text, size_type pos)
{
	linesvector::iterator iter=lines.begin()+pos;
	lines.insert(iter, text);
}

//Zeile an bestimmter Position löschen
void AsciiPicture::delete_line (size_type pos)
{
	lines.erase(lines.begin()+pos); //setzt Iterator auf die Position und löscht
}

///Operatoren-Überladung//////////////////////////////////////////////////////
/*bool AsciiPicture::operator&gt; (const AsciiPicture&amp; rhs)
{
	return operator&gt; (rhs-&gt;lines.size(), *this-&gt;lines.size());
}*/
</code></pre>
<p>cpp mit main-method</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt; 
#include &quot;AsciiPicture.h&quot;

void input(AsciiPicture&amp; asciipicture);
void frame (AsciiPicture&amp; asciipicture, char frame);
void output(const AsciiPicture&amp; asciipicture);
/*Stünden sie im Header, würden sie nicht gefunden*/

int main (){
	void createAsciiPicture();
	return 0;
}

void createAsciiPicture (){

	AsciiPicture myAsciiPicture; //Erzeugt AsciiPicture Objekt
	input (myAsciiPicture); //Übergibt String-Lines dem Objekt
	frame (myAsciiPicture,'+'); //Übergibt Rahmen, Rahmensymbol dem Objekt
	output (myAsciiPicture); //Auslesen und Ausgabe des Objekts
}

//Einlesen des Strings
void input(AsciiPicture&amp; asciipicture){

	std::cout &lt;&lt; &quot;Bitte geben Sie ein Asciibild ein :\n&quot;;

	std::ifstream ifs;
	std::string text;
	//ifs.open(&quot;C:/asci1.txt&quot;);
	ifs.open(&quot;C:/asci2.txt&quot;);
	while(std::getline(ifs,text)){
		asciipicture.add_line(text);//übergibt text an das Objekt		
	}
}

//Fügt dem Objekt ein Rahmen hinzu
void frame (AsciiPicture&amp; asciipicture, char frame){

	//Rahmenerstellung
	const std::string left_border (frame+std::string(&quot; &quot;)); 
	const std::string right_border (std::string(&quot; &quot;)+frame); 

	const AsciiPicture::size_type max = asciipicture.get_column();//Maximale Spaltenbreite

	const std::string full_line(max+4, frame);//4, da 2 Rahmensymbole und 2 Leerzeichen
	const std::string std_line = left_border+std::string(max, ' ')+right_border; 

	//Rahmen hinzufügen
	const AsciiPicture::size_type row = asciipicture.get_row();

	for(AsciiPicture::size_type i = 0; i&lt;row; ++i)
	{
		//Leerräume zwischen Chars und Rand mit Leerzeichen füllen
		AsciiPicture::size_type anz = max-asciipicture.get_line(i).size();//Ermitteln der &quot;Leerräume&quot;

		//Ermittelte Anzahl von Leerzeichen erstellen
		std::string space(anz, ' ');

		asciipicture.get_line(i).insert(0,left_border);
		asciipicture.get_line(i).append(space+right_border); //Leerzeichen hinzufügen
	}

	//Äußere Rahmen hinzufügen
	asciipicture.add_line(full_line, AsciiPicture::size_type(0)); //Oben
	asciipicture.add_line(std_line, AsciiPicture::size_type(1)); //Oben - 1
	asciipicture.add_line(std_line);//Unten - 1
	asciipicture.add_line(full_line);//Unten
}

void output(const AsciiPicture&amp; asciipicture) 
{
	std::cout&lt;&lt;&quot;Ergebnis: &quot;&lt;&lt;std::endl&lt;&lt;std::endl;
	AsciiPicture::const_iter begin= asciipicture.begin();

	//Ausgabe
	while(begin!=asciipicture.end())
	{
		std::cout&lt;&lt;*begin&lt;&lt;std::endl;
		++begin;
	}

	std::cout&lt;&lt;std::endl;
	std::cout&lt;&lt;asciipicture[2]&lt;&lt;std::endl;

}
</code></pre>
<p>Vielen Dank schonmal <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/1204641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204641</guid><dc:creator><![CDATA[travelflo22]]></dc:creator><pubDate>Sat, 06 Jan 2007 21:31:35 GMT</pubDate></item></channel></rss>