<?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 .txt Datei lesen]]></title><description><![CDATA[<p>Was ist an meiner Methode &quot;readout&quot; falsch?:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

class read
{
    public:
    read(const string &amp;file_name);
    inline bool error();
    bool readout();

    private:
    ifstream m_file;
};

read::read(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool read::error()
{
    if(m_file) return false;
    return true;
}

bool read::readout()
{
    if(error()) return false;
    string buffer=&quot;&quot;;
    while(m_file &gt;&gt; buffer)
    {
        cout &lt;&lt; m_file;
    }
    return true;
}

class write
{
    public:
    write(const string &amp;file_name);
    inline bool error();
    bool describe();

    private:
    ofstream m_file;

};

write::write(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool write::error()
{
    if(m_file) return false;
    return true;
}

bool write::describe()
{
    if(error()) return false;
    string buffer=&quot;&quot;;
    while(getline(cin,buffer))
    {
        if(buffer == &quot;exit&quot;) return true;
        m_file &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return false;
}

int main()
{
    read test(&quot;D:/test.txt&quot;);
    test.readout();

    return 0;
}
</code></pre>
<p>Das einzige was ausgegeben wird ist &quot;0x22fed40x22fed40x22fed4&quot;.<br />
Mh???!!!<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201868/aus-txt-datei-lesen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 16:58:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201868.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Jan 2008 02:19:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sat, 05 Jan 2008 02:19:26 GMT]]></title><description><![CDATA[<p>Was ist an meiner Methode &quot;readout&quot; falsch?:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

class read
{
    public:
    read(const string &amp;file_name);
    inline bool error();
    bool readout();

    private:
    ifstream m_file;
};

read::read(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool read::error()
{
    if(m_file) return false;
    return true;
}

bool read::readout()
{
    if(error()) return false;
    string buffer=&quot;&quot;;
    while(m_file &gt;&gt; buffer)
    {
        cout &lt;&lt; m_file;
    }
    return true;
}

class write
{
    public:
    write(const string &amp;file_name);
    inline bool error();
    bool describe();

    private:
    ofstream m_file;

};

write::write(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool write::error()
{
    if(m_file) return false;
    return true;
}

bool write::describe()
{
    if(error()) return false;
    string buffer=&quot;&quot;;
    while(getline(cin,buffer))
    {
        if(buffer == &quot;exit&quot;) return true;
        m_file &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return false;
}

int main()
{
    read test(&quot;D:/test.txt&quot;);
    test.readout();

    return 0;
}
</code></pre>
<p>Das einzige was ausgegeben wird ist &quot;0x22fed40x22fed40x22fed4&quot;.<br />
Mh???!!!<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430914</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 05 Jan 2008 02:19:26 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sat, 05 Jan 2008 02:22:16 GMT]]></title><description><![CDATA[<p>Du könntest buffer nach cout ausgeben, anstatt m_file <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430915</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Sat, 05 Jan 2008 02:22:16 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sat, 05 Jan 2008 02:35:04 GMT]]></title><description><![CDATA[<p>Oh ich Trottel. Es is einfach schon wieder viel zu spät um zu programmieren. Und ich tus trotzdem immer wieder, obwohl ich jetzt eigentlich schon längst mal wissen müsste, das mit dann immer solche kack Fehler passieren.<br />
Gute Nacht.<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430923</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 05 Jan 2008 02:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sat, 05 Jan 2008 02:38:04 GMT]]></title><description><![CDATA[<p>Ist ja was, was immer passieren kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Ich frage mich gerade nur, wieso fstream überhaupt einen &lt;&lt; Operator bekommen hat.</p>
<p>Oder warum liefert die Ausgabe keinen Compilerfehler?<br />
Ist es vielleicht die implizierte Umwandlung in void* um ein überprüfen im Sinne von if(file == NULL) etc. machen zu können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430926</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Sat, 05 Jan 2008 02:38:04 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sat, 05 Jan 2008 12:56:49 GMT]]></title><description><![CDATA[<p>Noch eine Frage zu meinem Code, haltet ihr es für sinvoll wenn ich in der Methode &quot;describe&quot; und &quot;readout&quot; mit der Elementfunktion &quot;error()&quot; [die ja in beiden Klassen vorhanden ist] die Richtigkeit überprüfe, obs Komplikationen,Fehler etc. gab. Oder soll ich einfach davon ausgehen, das der Nutzer, das selbst übernimmt, weil &quot;error()&quot; ist ja public.<br />
Was meint ihr dazu, wie würdet ihr das machen, ist es sinnvoll da extra nochmal zu prüfen?<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431074</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 05 Jan 2008 12:56:49 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sat, 05 Jan 2008 17:23:44 GMT]]></title><description><![CDATA[<p>Also ich mein den Code von meinem ersten posteing, wenn jemand jetzt nich weiß was gemeint is.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431282</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 05 Jan 2008 17:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 00:19:36 GMT]]></title><description><![CDATA[<p>Geil! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> describe = einen Gegenstand oder ein Sache Beschreiben im Sinne von jmd. sagen wie es aussieht. Nicht im sinne von eine CD mit Daten beschreiben <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="😉"
    /></p>
<p>Aja ehm warum macht ihr eure Klassen denn immer abhängig von <strong>einem bestimmten</strong> Ein oder Ausgabestream? Warum lasst ihr nicht generell alle Ein-/Ausgabestreams zu? (std::ostream statt std::cout u. std::istream statt std::cin).</p>
<p>Und sowas:</p>
<pre><code class="language-cpp">bool write::error()
{
    if(m_file) return false;
    return true;
}
</code></pre>
<p>...</p>
<pre><code class="language-cpp">bool write::error() const
{ return !m_file; }
</code></pre>
<p>Man beachte das const und die Kürzung der ganzen return's.</p>
<p>Wenn du Zeilenweise schreibst, musst du auch zeilenweise lesen! Und std::string wird per default-Konstruktor mit &quot;&quot; initialisiert. Das muss man nicht mehr machen ...</p>
<pre><code class="language-cpp">bool read::show(std::ostream&amp; out)
{
    if (error()) return false;

    std::string buff;
    while (std::getline(m_file, buff))
        out &lt;&lt; buff &lt;&lt; std::endl;

    return m_file;
}
</code></pre>
<p>Wenn in der Datei ein Endline-Zeichen ist, solltest du es auch bei der Ausgabe mit ausgeben, um die äquvalenz zwischen Datei &amp; Ausgabe bei zu behalten <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431338</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 06 Jan 2008 00:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 00:07:39 GMT]]></title><description><![CDATA[<p>Ach so, ist die Zeile hier:</p>
<pre><code class="language-cpp">{ return !m_file; }
</code></pre>
<p>eine Kurzform für das:</p>
<pre><code class="language-cpp">bool write::error()
{
    if(m_file) return false;
    return true;
}
</code></pre>
<p>...cool, wusst ich net.<br />
Jo, und ich sollte natürlich viel mehr const bei den Methoden verwenden.<br />
Aber eigentlich bräuchte es des doch gar net mit dem nochmaligen überprüfen mit &quot;error()&quot; in der Methode &quot;show&quot;, weil ich kann doch auch einfach dafür ausgehen, dass das der Nutzer zuvor selber macht?</p>
<p>PS: Zum &quot;describe&quot;, da sieht man mal wieder wieviel des Schulenglisch bringt, und wie ich einfach nur stur und ohne sinn und verstand meine Vokabeln auswendig lerne^^</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431560</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 Jan 2008 00:07:39 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 00:13:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Ach so, ist die Zeile hier:</p>
<pre><code class="language-cpp">{ return !m_file; }
</code></pre>
<p>eine Kurzform für das:</p>
<pre><code class="language-cpp">bool write::error()
{
    if(m_file) return false;
    return true;
}
</code></pre>
<p>...cool, wusst ich net.</p>
</blockquote>
<p>Hmm nach den De Morgan'sche Gesetzen sollte das so sein, ja. Allerdings ist es leider(meistens) auch in C++ möglich bsw. operator! und operator void* zu überladen, sodass z.B. if (m_file) und if (!m_file) beide gleichzeitig wahr sind.</p>
<blockquote>
<p>Aber eigentlich bräuchte es des doch gar net mit dem nochmaligen überprüfen mit &quot;error()&quot; in der Methode &quot;show&quot;, weil ich kann doch auch einfach dafür ausgehen, dass das der Nutzer zuvor selber macht?</p>
</blockquote>
<p>Hmm natürlich kannst du davon ausgehen. Man kann von vielem ausgehen, doch man sich auch vergewissern. Das hängt ganz davon ab, was du willst <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431564</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 06 Jan 2008 00:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 01:39:11 GMT]]></title><description><![CDATA[<p>Jetzt hab ich da mal n bissel im Code umgedingst, hier und da mal n &quot;const&quot; gesetzt, aber jetzt spackt der Compiler rum:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

class read
{
    public:
    read(const string &amp;file_name);
    inline bool error() const;
    bool readout() const;

    private:
    const ifstream m_file;
};

read::read(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool read::error() const
{
    return !m_file;
}

bool read::readout() const
{
    if(error()) return false;
    string buffer;
    while(getline(m_file,buffer))
    {
        cout &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return m_file;
}

class write
{
    public:
    write(const string &amp;file_name);
    inline bool error() const;
    bool fill_in();

    private:
    ofstream m_file;

};

write::write(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool write::error() const
{
    return !m_file;
}

bool write::fill_in()
{
    if(error()) return false;
    string buffer;
    while(getline(cin,buffer))
    {
        if(buffer == &quot;exit&quot;) return true;
        m_file &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return m_file;
}

int main()
{

    return 0;
}
</code></pre>
<blockquote>
<p>Compiling: C:\MinGW\Andi\text_edit.cpp<br />
C:\MinGW\Andi\text_edit.cpp: In member function <code>bool read::readout() const': C:\\MinGW\\Andi\\text_edit.cpp:32: error: no matching function for call to</code>getline(const std::ifstream&amp;, std::string&amp;)'<br />
Process terminated with status 1 (0 minutes, 0 seconds)<br />
1 errors, 0 warnings</p>
</blockquote>
<p>Pourqoui? Ich verstehs nicht, irgendwas passt ihm am &quot;const&quot; net, hoff mal dass es nicht wieder n dummer Leichtsinnsfehler von mir is.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431587</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 Jan 2008 01:39:11 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 01:57:20 GMT]]></title><description><![CDATA[<p>durch das const werden alle membervariablen (in der jeweiligen methode) konstant (außer jene, die als mutable spezifiziert worden sind).<br />
getline erwartet allerdings als übergabeparameter eine referenz auf einen nicht-konstanten istream.</p>
<p>vielleicht auch ein hinweis, die ifstream klasse nicht zu einem klassenmember zu machen <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431590</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 06 Jan 2008 01:57:20 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 02:31:09 GMT]]></title><description><![CDATA[<p>Ja, mhm, aber es ist doch schon cooler und vom Stil besser, wenn ich die ifstream Klasse als Klassenmember mache. Wo soll ich die den sonst hin tun? Ich kann das ding ja nicht einfach &quot;global&quot; machen, wenn der Code mal noch wächst....is das doch schon mal n schlechter Untergrund?!<br />
Ich hätt das jetzt so gemacht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

class read
{
    public:
    read(const string &amp;file_name);
    inline bool error() const;
    bool readout() const;

    private:
    const ifstream m_file;
};

read::read(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool read::error() const
{
    return !m_file;
}

bool read::readout() const
{
    if(error()) return false;
    string buffer;
    const ifstream *temp_const=&amp;m_file;
    ifstream *temp=const_cast&lt;ifstream*&gt;(temp_const);
    while(getline(*temp,buffer))
    {
        cout &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return m_file;
}

class write
{
    public:
    write(const string &amp;file_name);
    inline bool error() const;
    bool fill_in();

    private:
    ofstream m_file;

};

write::write(const string &amp;file_name)
:m_file(file_name.c_str())
{

}

bool write::error() const
{
    return !m_file;
}

bool write::fill_in()
{
    if(error()) return false;
    string buffer;
    while(getline(cin,buffer))
    {
        if(buffer == &quot;exit&quot;) return true;
        m_file &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return m_file;
}

int main()
{
    read test(&quot;D:/test.txt&quot;);
    test.readout();
    return 0;
}
</code></pre>
<p>Ist &quot;const_cast&quot; hier fehl am Platz, weil dass soll ja auch schlechter Stil sein?<br />
Was schlagt ihr mir dann vor, wie mach ich dass dann am besten?<br />
Warum muss den bitte des blöde &quot;getline&quot; eine Referenz haben die nur nicht konstante Objekte nimmt?!<br />
Ma so nebenbei, wie mach ich des bitte, das ein Parameter konstante Objekte nicht annimmt?<br />
Mh ich könnte jetzt natürlich die &quot;readout&quot; Methode nicht const deklarieren, aber is ja auch schlechter Stil....was tun?!</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431598</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 Jan 2008 02:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 02:41:17 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Ist &quot;const_cast&quot; hier fehl am Platz, weil dass soll ja auch schlechter Stil sein?<br />
Was schlagt ihr mir dann vor, wie mach ich dass dann am besten?<br />
Warum muss den bitte des blöde &quot;getline&quot; eine Referenz haben die nur nicht konstante Objekte nimmt?!</p>
</blockquote>
<p>weil getline aus dem stream etwas ausliest und ihn daher verändert. der stream wird verändert, also darf er nicht konstant sein. ist doch ganz logisch <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="😉"
    /><br />
const_cast ist hier nicht nur schlechter stil, sondern provoziert undefiniertes verhalten, denn dein stream ist &quot;tatsächlich&quot; konstant. ich sage dir jetzt mal nicht die schuss-in-den-fuß lösung mit mutable, sondern rate dir dazu, den stream lokal in der funktion zu halten und dir stets genau zu überlegen, ob eine methode ihr objekt verändert oder nicht. wenn ja, dann darf sie eben nicht const sein.</p>
<blockquote>
<p>Ma so nebenbei, wie mach ich des bitte, das ein Parameter konstante Objekte nicht annimmt?</p>
</blockquote>
<p>du überlädst die funktion für konstante objekte und lässt sie undefiniert (wenn ich richtig verstanden habe, was du willst)</p>
<blockquote>
<p>Mh ich könnte jetzt natürlich die &quot;readout&quot; Methode nicht const deklarieren, aber is ja auch schlechter Stil....was tun?!</p>
</blockquote>
<p>const macht noch keinen guten stil. wie gesagt, es hängt von der semantik der methode ab. wenn sie was ändert, dann natürlich nicht const.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431600</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 06 Jan 2008 02:41:17 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 16:46:47 GMT]]></title><description><![CDATA[<p>Was bedeutet den genau &quot;undefiniertes Verhalten&quot;?<br />
Es wäre aber doch auch nicht extrem schlechter Stil wenn ich die &quot;readout&quot; Methode einfach nicht const machen würde?<br />
Oder ich machs so wie dus gesagt hast:</p>
<pre><code class="language-cpp">bool read::readout() const
{
    ifstream file(m_file_name.c_str());
    if(!file) return false;
    string buffer;
    while(getline(file,buffer))
    {
        cout &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return file;
}
</code></pre>
<p>Is beser so oda?<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431925</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 Jan 2008 16:46:47 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 19:50:49 GMT]]></title><description><![CDATA[<p>Mh was ist eigentlich an &quot;mutable&quot; so schlecht, fällt mir grad auf???!<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432079</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 Jan 2008 19:50:49 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 21:21:49 GMT]]></title><description><![CDATA[<p>Noch was, &quot;(D)Evil&quot; schrieb:</p>
<pre><code class="language-cpp">bool read::show(std::ostream&amp; out) 
{ 
    if (error()) return false; 

    std::string buff; 
    while (std::getline(m_file, buff)) 
        out &lt;&lt; buff &lt;&lt; std::endl; 

    return m_file; 
}
</code></pre>
<p>dass müsste man dann doch wohl so anwenden oder:</p>
<pre><code class="language-cpp">....
read test;
test.show(std::cout);
....
</code></pre>
<p>Und bei meiner Methode befindet sich das &quot;cout&quot; halt gleich in der Methode, also:</p>
<pre><code class="language-cpp">....
cout &lt;&lt; buf &lt;&lt; &quot;\n&quot;;
....
</code></pre>
<p>Was ist jetzt besser\schneller? Oder ist es egal?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432118</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 Jan 2008 21:21:49 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 22:04:52 GMT]]></title><description><![CDATA[<p>Hmm der Unterschied besteht viel mehr in der vielseitigeren Verwendungsmöglichkeit. Du kannst deine Ausgabe nur in std::cout Umleiten. Durch die Übergabe des Ausgabestreams an die Funktion kannst du bsw. auch in eine andere Datei umleiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432132</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 06 Jan 2008 22:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Sun, 06 Jan 2008 23:42:29 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Hmm der Unterschied besteht viel mehr in der vielseitigeren Verwendungsmöglichkeit. Du kannst deine Ausgabe nur in std::cout Umleiten. Durch die Übergabe des Ausgabestreams an die Funktion kannst du bsw. auch in eine andere Datei umleiten.</p>
</blockquote>
<p>du kannst cout auch in eine datei umleiten, indem du dessen streambuf änderst <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="😉"
    /><br />
aber das wäre natürlich nicht so.. hm.. intuitiv.<br />
intuitiv wäre ein operator&lt;&lt; wohl am ehesten. aber das schlägt sich etwas mit dem konzept, das hinter dieser klasse zu stehen scheint. aber ob es so gut ist, ein objekt zu haben, dass mit dem namen &quot;read&quot; eher an eine funktion erinnert?</p>
<p>Stromberg schrieb:</p>
<blockquote>
<p>Was bedeutet den genau &quot;undefiniertes Verhalten&quot;?</p>
</blockquote>
<p>darüber bist du noch nicht gestoßen? das bedeutet, dass dein compiler aus dem code alles mögliche machen kann. im schlimmsten fall lässt es kleine dämonen aus deiner nase springen.</p>
<p>an mutable ist grundsätzlich nichts schlechtes (wenn man es richtig verwendet), aber du deklarierst deine funktion als &quot;funktion, die nichts an der jeweiligen instanz ändert&quot; und dann willst du deine membervariablen so spezifizieren (mit mutable), dass sie trotzdem geändert werden können? hebt die wirkung auf. verzichte auf const. (oder lagere den stream aus, was zusätzlich den vorteil bringt, dass deine klasse kopierbar wird.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432166</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 06 Jan 2008 23:42:29 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Tue, 08 Jan 2008 22:47:24 GMT]]></title><description><![CDATA[<p>Hier is der Code nochma, bissel umgeändert, aufgeteilt und noch bissel verpackt....<br />
main.cpp</p>
<pre><code class="language-cpp">#include &quot;text_editor.hpp&quot;

int main()
{
    text_editor program;
    while(program.menu());

    return 0;
}
</code></pre>
<p>text_editor.hpp</p>
<pre><code class="language-cpp">#ifndef TEXT_EDITOR_HPP_INCLUDED
#define TEXT_EDITOR_HPP_INCLUDED

#include &lt;iostream&gt;
#include &lt;string&gt;

class read
{
    public:
    read(const std::string &amp;file_name_);
    bool readout(std::ostream &amp;ios_object) const;

    private:
    const std::string m_file_name;
};

class write
{
    public:
    write(const std::string &amp;file_name_);
    bool fill_in(bool remove);

    private:
    const std::string m_file_name;

};

//Macht die Klassen &quot;read&quot; und &quot;write&quot; Benutzerfreundlicher
class text_editor
{
    public:
    text_editor();
    bool menu();
    bool handle_file_write() const;
    bool handle_file_read() const;
    void error_message(const std::string &amp;message);

    private:
    bool m_remove;

};

#endif // TEXT_EDITOR_HPP_INCLUDED
</code></pre>
<p>text_editor.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;conio.h&gt;
#include &quot;text_editor.hpp&quot;
#include &quot;ic.hpp&quot; //Improved Konsole

using namespace std;
using namespace ic; //Improved Konsole

//KLASSE READ
read::read(const std::string &amp;file_name_)
:m_file_name(file_name_)
{

}

//Methode um Datein auszulesen
bool read::readout(ostream &amp;ios_object) const
{
    ifstream file(m_file_name.c_str()); //&lt;-- Streamobjekt &quot;file&quot;
    if(!file) return false; //Stream fehlerhaft?
    if(!ios_object) return false; //Objekt Fehlerhaft?
    string buffer;
    while(getline(file,buffer))
    {
        ios_object &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    //&lt;-- Ab hier wird &quot;file&quot; false!!! Warum?
    file.clear(); //Kann das nur mit dem hier beheben, sonst wird text_editor::message_error() aufgerufen
                  //Aber ist ja auch bissel gemogelt wenn ich dann einfach alles wieder &quot;clear()&quot; mache.
                  //Aber was hat &quot;file&quot; hier für ein Problem?
    cout &lt;&lt; file &lt;&lt; endl;
    getch();
    return file;
}

//KLASSE WRITE
write::write(const std::string &amp;file_name_)
:m_file_name(file_name_)
{

}

bool write::fill_in(bool remove)
{
    ofstream file;
    if(remove) file.open(m_file_name.c_str()); //Datei wird immer neu erstellt
    else file.open(m_file_name.c_str(), ios::out | ios::app); //In Datei weiter schreiben

    if (!file) return false;
    string buffer;
    while(getline(cin,buffer))
    {
        if(buffer == &quot;exit&quot;) return true;
        file &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return file;
}

//KLASSE TEXT_EDITOR
text_editor::text_editor()
:m_remove(false)
{
}

bool text_editor::menu()
{
    short input;
    cout &lt;&lt; &quot;&lt; 1 &gt; Datei beschreiben\n&quot;;
    cout &lt;&lt; &quot;&lt; 2 &gt; Datei lesen\n&quot;;
    cout &lt;&lt; &quot;&lt; 3 &gt; Programm beenden\n&quot;;

    cout &lt;&lt; &quot;\n\n\n### OPTIONEN ###\n\n&quot;;
    cout &lt;&lt; &quot;&lt; 4 &gt; Beim beschreiben Datei immer neuerstellen&quot;;
    if(m_remove) cout &lt;&lt; &quot; 'AN'\n&quot;;
    else cout &lt;&lt; &quot; 'AUS'\n&quot;;

    cout &lt;&lt; &quot;\n\n\n--&gt; &quot;;
    cin &gt;&gt; input;
    cin.clear();
    cin.ignore(numeric_limits&lt;streamsize&gt;::max(),'\n');

    //Bildschirm löschen | Cursor Poition nach oben
    con.clearColor(BG_BLACK);
    con.setCurPos(0,0);

    switch(input)
    {
        case 1:
        if(!handle_file_write()) error_message(&quot;Das Beschreiben musste beendet werden.\n&quot;);
        break;
        case 2:
        if(!handle_file_read()) error_message(&quot;Das Lesen musste beendet werden.\n&quot;) ;
        break;
        case 3:
        return false;
        break;
        case 4:
        if(m_remove) m_remove=false;
        else m_remove=true;
        break;
    }

    //Bildschirm löschen | Cursor Poition nach oben
    con.clearColor(BG_BLACK);
    con.setCurPos(0,0);

    return true;
}

bool text_editor::handle_file_write() const
{
    string save_name;
    cout &lt;&lt; &quot;Dateiname: &quot;;
    getline(cin,save_name);
    cout &lt;&lt; &quot;'exit' am Zeilenanfang + 'ENTER' = Schreibprogramm wird beendet\n\n&quot;;
    write t_e_write(save_name);
    return t_e_write.fill_in(m_remove);
}

bool text_editor::handle_file_read() const
{
    string save_name;
    cout &lt;&lt; &quot;Dateiname: &quot;;
    getline(cin,save_name);
    cout &lt;&lt; &quot;Beliebiger Tastendruck = Leseprogramm wird beendet\n\n&quot;;
    read t_e_read(save_name);
    return t_e_read.readout(cout);
}

//Fehlermeldung, wenn ein stream &quot;false&quot; zurückgibt
void text_editor::error_message(const string &amp;message)
{
    //Bildschirm löschen | Cursor Poition nach oben
    con.clearColor(BG_BLACK);
    con.setCurPos(0,0);

    cout &lt;&lt; &quot;Ein Problem wurde festgestellt!\n&quot;;
    cout &lt;&lt; message;
    getch();
}
</code></pre>
<p>Was haltet ihr davon?</p>
<p>Hab noch ein Problem, meine Methode &quot;readout&quot; gibt immer &quot;false&quot; zurück, wodurch ein Error aufgerufen wird. Das liegt daran dass das Streamobjekt &quot;file&quot; plötzlich nach der while Schleife false ist, obwohls vorher noch true war....<br />
[siehe: text_editor.cpp, Zeile 29]<br />
Die Datei wird super eingelesen, alles...richtig aufm Bildschirm der Text ausgegeben...passt alles, nur das &quot;file&quot; dann &quot;false&quot; ist, und dadurch &quot;false&quot; von der Methode &quot;readout&quot; zurück gegeben wird, und dadurch wird wiederum die &quot;Error Methode&quot; aufgerufen!!!! Ich versteh aber einfach nicht warum diese verdammte Streamobjekt &quot;false&quot; wird?!!!<br />
Vll. blickt da eienr von euch besser durch.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433345</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Tue, 08 Jan 2008 22:47:24 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Wed, 09 Jan 2008 00:25:43 GMT]]></title><description><![CDATA[<p>Du liest in readout solange mit getline ein bis die false zurückliefert. Dies ist dann der Fall wenn nichts mehr gelesen werden kann, also am Dateiende. Da wird aber dann auch eof() gesetzt und file liefert somit false zurück.<br />
Die Lösung mit clear ist da schon ok evtl. kannst du ja noch den Filepointer auf den Anfang zurück setzten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433357</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 09 Jan 2008 00:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Wed, 09 Jan 2008 14:03:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">bool write::fill_in(bool remove)
{
    ofstream file;
    if(remove) file.open(m_file_name.c_str()); //Datei wird immer neu erstellt
    else file.open(m_file_name.c_str(), ios::out | ios::app); //In Datei weiter schreiben

    if (!file) return false;
    string buffer;
    while(getline(cin,buffer))
    {
        if(buffer == &quot;exit&quot;) return true;
        file &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;
    }
    return file;
}
</code></pre>
<p>nicht so perfekt <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="😉"
    /></p>
<pre><code class="language-cpp">bool write::fill_in(std::istream&amp; in = std::cin, bool empty = true)
{
    std::ofstream file_stream(m_file_name.c_str(), empty == true ? std::ios::out : std::ios::app);
    if (!file_stream) return false;

    std::string buffer;
    while (std::getline(in, buffer) &amp;&amp; buffer != &quot;exit&quot;)
        file_stream &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;

    return file_stream;
}
</code></pre>
<p>... bei std::ofstream ist standardmäßig std::ios::out drin. kannst es hier in dem Fall für den einfachen Vergleich aber misbrauchen <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="😉"
    /> Und die Schleife kannst du auch verkürzen (s. Code) und statt return true hättest du sonst auch lieber gucken sollen ob file_stream einen Fehler gefunden hat <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="😉"
    /></p>
<pre><code class="language-cpp">//Methode um Datein auszulesen
bool read::readout(std::ostream&amp; out) const
{
    if (!out) return false; // sonst wird hier noch das std::ifstream Objekt erzeugt! ...

    std::ifstream file_stream(m_file_name.c_str());
    if (!file_stream) return false;

    std::string buffer;
    while (std::getline(file_stream, buffer))
        out &lt;&lt; buffer &lt;&lt; &quot;\n&quot;;

    return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1433666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433666</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 09 Jan 2008 14:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Wed, 09 Jan 2008 20:26:01 GMT]]></title><description><![CDATA[<p>Heißt das hier:</p>
<pre><code class="language-cpp">...empty == true ? std::ios::out : std::ios::app);
</code></pre>
<p>soviel wie &quot;wenn empty true ist, dann setzte als Parameter &quot;std::ios::out : std::ios::app&quot;, wenn nicht dann setz einfach nichts (also halt default Parameter)?<br />
Das sowas geht, wusste ich anfangs nicht, weil ich hab das erst so gemacht:</p>
<pre><code class="language-cpp">if(remove) ofstream file(.....);
else ofstream file(.....,.....);
</code></pre>
<p>Aber is ja Unsinn, weil des wird ja nur innerhlab des if-Scope deklariert, und verliert außerhalb dann seine Wertigkeit.<br />
Und des halb hab ich das mit dem &quot;.open&quot;....gemacht..aber is ja alles schlecht, des von dir is natürlich um einiges besser.<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1433934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1433934</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Wed, 09 Jan 2008 20:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Thu, 10 Jan 2008 01:04:03 GMT]]></title><description><![CDATA[<p>nein, es bedeutet &quot;wenn empty true ist, dann setze als parameter ios::out, andernfalls ios::app&quot; (':' bedeutet andernfalls)</p>
<p>abgesehen davon sollte man mit boolschen werten keine vergleiche machen (weil es ohne auch geht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1434059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434059</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 10 Jan 2008 01:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Thu, 10 Jan 2008 16:42:14 GMT]]></title><description><![CDATA[<p>Ja, aber wie kann n das gehen, wenn empty &quot;true&quot; ist, dann wird &quot;ios::out&quot; gesetzt. Verstehe ich noch, aber wenn empty &quot;false&quot; ist, dann wird ja &quot;ios::app&quot; gesetzt, aber das muss doch immer &quot;ios::out | ios::app&quot; heißen, nicht nur &quot;ios::app&quot;?<br />
Wie nennt man n das eigentlich &quot;:&quot; und &quot;?&quot; Vergleichsoperatoren für Parameter oder was... hab davon igrendwie noch nie was mitbekommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Hat jemand einen Link wo da noch bissel ins Detail gegangen wird, oder kann man da nich mehr viel ins Detail gehen?<br />
Also ich mein mit if kann ich schon umgehen....aber die dinger da hab ich irgendwien icht gekannt.<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1434442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434442</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Thu, 10 Jan 2008 16:42:14 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Thu, 10 Jan 2008 17:38:55 GMT]]></title><description><![CDATA[<p>sollte es, ja.</p>
<p>das &quot;ding&quot; ?: nennt sich der &quot;ternäre operator&quot;, der einzige operator mit drei operanden, der außerdem nicht überladen werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1434485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434485</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 10 Jan 2008 17:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to Aus .txt Datei lesen on Thu, 10 Jan 2008 17:51:41 GMT]]></title><description><![CDATA[<p>Also setzte er dann noch &quot;ios::out&quot; automatisch zu &quot;ios::app&quot; dazu oder wie?<br />
MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1434490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434490</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Thu, 10 Jan 2008 17:51:41 GMT</pubDate></item></channel></rss>