<?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[Riesiger string (Bibel) aus Datei in andere Datei kopieren]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe die komplette Bibel als .txt Datei gespeichert und möchte sie 1:1 in eine andere Textdatei kopieren. Das ist mein Ansatz:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;list&gt;

using namespace std;

int main ()
{

	string Bibeltext;
	string Zeile;

	fstream Original;
	ofstream Kopie;

	Original.open(&quot;elb_bibel.txt&quot;);
	if( !file ) {
		cout &lt;&lt; &quot;error&quot; &lt;&lt; endl;
	}

	Kopie.open(&quot;Kopie.txt&quot;);
	if( !Kopie ) {
		cout &lt;&lt; &quot;error&quot; &lt;&lt; endl;
	}

	while( !Original.eof() ) {
	getline(Original, Zeile);
	Kopie &lt;&lt; Zeile &lt;&lt; &quot; &quot;;
	Bibeltext += &quot; &quot;;
	Bibeltext += Zeile;
	}

	Kopie.close();

	cout &lt;&lt; &quot;length: &quot; &lt;&lt; Bibeltext.length() &lt;&lt; endl;
	cout &lt;&lt; &quot;size: &quot; &lt;&lt; Bibeltext.size() &lt;&lt; endl;
	cout &lt;&lt; &quot;capacity: &quot; &lt;&lt; Bibeltext.size() &lt;&lt; endl;

	system(&quot;pause&quot;);
  return 0;
}
</code></pre>
<p>Das Problem ist allerdings, dass nur <strong>720.000</strong> Buchstaben in der Kopie ankommen und nicht ca. <strong>3.000.000</strong>. Woran liegt das? Ist die Bibel vielleicht zu groß für einen String? Was für eine alternative gäbe es?</p>
<p>Gruß,</p>
<p>Kay</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263842/riesiger-string-bibel-aus-datei-in-andere-datei-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 13:45:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263842.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Mar 2010 16:22:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 16:22:04 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe die komplette Bibel als .txt Datei gespeichert und möchte sie 1:1 in eine andere Textdatei kopieren. Das ist mein Ansatz:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;list&gt;

using namespace std;

int main ()
{

	string Bibeltext;
	string Zeile;

	fstream Original;
	ofstream Kopie;

	Original.open(&quot;elb_bibel.txt&quot;);
	if( !file ) {
		cout &lt;&lt; &quot;error&quot; &lt;&lt; endl;
	}

	Kopie.open(&quot;Kopie.txt&quot;);
	if( !Kopie ) {
		cout &lt;&lt; &quot;error&quot; &lt;&lt; endl;
	}

	while( !Original.eof() ) {
	getline(Original, Zeile);
	Kopie &lt;&lt; Zeile &lt;&lt; &quot; &quot;;
	Bibeltext += &quot; &quot;;
	Bibeltext += Zeile;
	}

	Kopie.close();

	cout &lt;&lt; &quot;length: &quot; &lt;&lt; Bibeltext.length() &lt;&lt; endl;
	cout &lt;&lt; &quot;size: &quot; &lt;&lt; Bibeltext.size() &lt;&lt; endl;
	cout &lt;&lt; &quot;capacity: &quot; &lt;&lt; Bibeltext.size() &lt;&lt; endl;

	system(&quot;pause&quot;);
  return 0;
}
</code></pre>
<p>Das Problem ist allerdings, dass nur <strong>720.000</strong> Buchstaben in der Kopie ankommen und nicht ca. <strong>3.000.000</strong>. Woran liegt das? Ist die Bibel vielleicht zu groß für einen String? Was für eine alternative gäbe es?</p>
<p>Gruß,</p>
<p>Kay</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874643</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 28 Mar 2010 16:22:04 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 16:35:22 GMT]]></title><description><![CDATA[<p>Warum nicht gleich schreiben, was gelesen wurde? Der Umweg über <code>std::string</code> ist unnötig.</p>
<p>Ausserdem scheint es mir sinnvoller, zeichen- anstatt zeilenweise zu lesen. Schau dir mal <code>std::ifstream::get()</code> und <code>std::ofstream::put()</code> oder andere Methoden für unformatierte Ein-/Ausgabe auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> an.</p>
<p>BTW: Um Dateien komplett zu kopieren, gibt es bereits fertige Funktionen, leider nicht im C++-Standard. <em>Boost.Filesystem</em> könnte dir aber weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874658</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 28 Mar 2010 16:35:22 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 16:46:03 GMT]]></title><description><![CDATA[<p>ok danke, wenn ich die Datei 1:1 kopieren will versuch ich's mal wie du es beschrieben hast. Jetzt möchte ich ein Programm schreiben, bei dem man die gesamte Bibel nach beliebigen Wörtern durchsuchen kann um das mit den Strings zu üben. Das Problem ist jedoch, dass extrem viele Wörter nicht mitgezählt werden (habe teilweise selbst nachgezählt). Woran kann das liegen?</p>
<p>Hier mein code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;list&gt;

using namespace std;

int main ()
{

	int WortZähler = 0;
	list&lt;string&gt; Suchwörter;
	list&lt;string&gt;::iterator Iter;

	fstream file;

	file.open(&quot;elb_bibel.txt&quot;);
	if( !file ) {
		cout &lt;&lt; &quot;error&quot; &lt;&lt; endl;
	}

	string Bibeltext;
	string Zeile;

	while( !file.eof() ) {
	getline(file, Zeile);

	//Bibeltext += &quot; &quot;;
	Bibeltext += Zeile;
	}

	cout &lt;&lt; &quot;length: &quot; &lt;&lt; Bibeltext.length() &lt;&lt; endl;
	cout &lt;&lt; &quot;size: &quot; &lt;&lt; Bibeltext.size() &lt;&lt; endl;
	cout &lt;&lt; &quot;capacity: &quot; &lt;&lt; Bibeltext.size() &lt;&lt; endl;

	string such[] = {&quot;Gott&quot;, &quot;Nacht&quot;, &quot;Tag&quot;, &quot;Schoepfung&quot;, &quot;Mose&quot;, &quot;Wasser&quot;, &quot;Licht&quot;};

	for( int i = 0; i &lt;= 6; i++ ){
		Suchwörter.push_back(such[i]);
	}

	for( Iter = Suchwörter.begin(); Iter != Suchwörter.end(); Iter++ ){
		cout &lt;&lt; *Iter &lt;&lt; endl;
	}

        unsigned long pos = 0;
	for( Iter = Suchwörter.begin(); Iter != Suchwörter.end(); Iter++ ){

		while( pos != string::npos ) {
		pos = Bibeltext.find(*Iter, pos);

		if( string::npos==pos) {
			cout &lt;&lt; &quot;nicht gefunden!&quot; &lt;&lt; endl;
		} else {
			++pos; // verhindert Endlosschleife
			++WortZähler;
		} 

	}

	cout &lt;&lt; &quot;\nDas Wort &quot; &lt;&lt; *Iter &lt;&lt; &quot; kommt &quot; &lt;&lt; WortZähler &lt;&lt; &quot; mal in der Bibel vor.\n\n&quot;;

	WortZähler = 0;
	pos = 0;

	}

	system(&quot;pause&quot;);
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1874669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874669</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 28 Mar 2010 16:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:02:00 GMT]]></title><description><![CDATA[<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>Was für eine alternative gäbe es?</p>
</blockquote>
<p>Hallo Kay,</p>
<p>die Alternative wäre, das Original direkt in die Kopie zu schreiben. Und zwar so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

int main ()
{
    ifstream Original(&quot;elb_bibel.txt&quot;);
    if( !Original.is_open() ) {
        cout &lt;&lt; &quot;error Original.txt&quot; &lt;&lt; endl;
    }
    ofstream Kopie(&quot;Kopie.txt&quot;);
    if( !Kopie.is_open() ) {
        cout &lt;&lt; &quot;error Kopie.txt&quot; &lt;&lt; endl;
    }
    Kopie &lt;&lt; Original.rdbuf(); // Original nach Kopie kopieren

    cin.get(); // warte auf Tastatur
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874680</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:09:18 GMT]]></title><description><![CDATA[<p>Hallo Werner,</p>
<p>habe deine Methode, als auch die von Nexus (s. unten) benutzt, allerdings, werden nicht alle 3 Millionen Zeichen in die Datei kopiert, sondern nur an die 720.000. Ich denke einfach mal bei so einer riesigen Menge an Zeichen geht das nicht mehr so leicht?</p>
<pre><code class="language-cpp">char c;
	while( !Original.eof() ) {

	c = Original.get();

	if ( Original.good() ) 
		Kopie.put(c);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1874685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874685</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:18:16 GMT]]></title><description><![CDATA[<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>Hallo Werner,</p>
<p>habe deine Methode, als auch die von Nexus (s. unten) benutzt, allerdings, werden nicht alle 3 Millionen Zeichen in die Datei kopiert, sondern nur an die 720.000. Ich denke einfach mal bei so einer riesigen Menge an Zeichen geht das nicht mehr so leicht?</p>
</blockquote>
<p>Doch. Schau mal ob du wirklich die richtige Datei öffnest.</p>
<p>Übrigens</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>Was für eine alternative gäbe es?</p>
</blockquote>
<p>Hallo Kay,</p>
<p>die Alternative wäre, das Original direkt in die Kopie zu schreiben. Und zwar so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

int main ()
{
    ifstream Original(&quot;elb_bibel.txt&quot;);
    if( !Original.is_open() ) {
        cout &lt;&lt; &quot;error Original.txt&quot; &lt;&lt; endl;
    }
    ofstream Kopie(&quot;Kopie.txt&quot;);
    if( !Kopie.is_open() ) {
        cout &lt;&lt; &quot;error Kopie.txt&quot; &lt;&lt; endl;
    }
    Kopie &lt;&lt; Original.rdbuf(); // Original nach Kopie kopieren

    cin.get(); // warte auf Tastatur
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>Warum wird bei Kopie &lt;&lt; Original.rdbuf(); das failbit für Kopie gesetzt, wenn Original 0 Bytes hat? Das ist doch dämlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874692</guid><dc:creator><![CDATA[suseq]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:20:08 GMT]]></title><description><![CDATA[<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>Jetzt möchte ich ein Programm schreiben, bei dem man die gesamte Bibel nach beliebigen Wörtern durchsuchen kann um das mit den Strings zu üben. Das Problem ist jedoch, dass extrem viele Wörter nicht mitgezählt werden (habe teilweise selbst nachgezählt). Woran kann das liegen?</p>
</blockquote>
<p>Dein Code sollte im Prinzip funktionieren. Die Frage ist, ob z.B. 'Schoepfung' in der Textdatei nicht 'Schöpfung' geschrieben wird. Wird eines der Worte gar nicht gezählt? Kontrolliere doch mal, ob der Anfang und das Ende von 'Bibeltext' mit Anfang und Ende Deiner Datei übereinstimmen.</p>
<p>ich sehe gerade Dein Posting:</p>
<p><em>Kay</em> schrieb:</p>
<blockquote>
<p>..., allerdings, werden nicht alle 3 Millionen Zeichen in die Datei kopiert, sondern nur an die 720.000. Ich denke einfach mal bei so einer riesigen Menge an Zeichen geht das nicht mehr so leicht?</p>
</blockquote>
<p>3Millionen sind 3MB; das sollte bei den heutigen Rechnern kein Problem darstellen. Wenn Du Nexus' oder meinen Vorschlag benutzt hast schon gar nicht, da sich die Zeichen nie alle gemeinsam im Speicher befinden. Schau doch mal nach, wie der letzte Text lautet, der in die Kopie gechrieben wurde, und dann schaue bitte mit einem Texteditor in das Original, was danach kommt. Ich vermute, dass dort ein 'nicht-Text-Zeichen' folgt. Dann bricht der Lesevorgang ab.</p>
<p>Du kannst es trotzdem kopieren, wenn Du die Dateien im Binär-Mode öffnest - mit 'ifstream Original( &quot;elb_bibel.txt&quot;, ios_base::binary );'</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874694</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:25:14 GMT]]></title><description><![CDATA[<p>suseq schrieb:</p>
<blockquote>
<p>Warum wird bei Kopie &lt;&lt; Original.rdbuf(); das failbit für Kopie gesetzt, wenn Original 0 Bytes hat? Das ist doch dämlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
</blockquote>
<p>Nein das ist nicht dämlich, sondern es verhält sich so wie spezifiziert.</p>
<p>Der Grund dafür ist einfach der, dass man mit</p>
<pre><code class="language-cpp">if( Kopie &lt;&lt; Original.rdbuf() )
    {
        // alles klar, Original wurde nach Kopie geschrieben
</code></pre>
<p>einfach abfragen kann, ob da wirklich was kopiert worden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874695</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:38:30 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>suseq schrieb:</p>
<blockquote>
<p>Warum wird bei Kopie &lt;&lt; Original.rdbuf(); das failbit für Kopie gesetzt, wenn Original 0 Bytes hat? Das ist doch dämlich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
</blockquote>
<p>Nein das ist nicht dämlich, sondern es verhält sich so wie spezifiziert.</p>
<p>Der Grund dafür ist einfach der, dass man mit</p>
<pre><code class="language-cpp">if( Kopie &lt;&lt; Original.rdbuf() )
    {
        // alles klar, Original wurde nach Kopie geschrieben
</code></pre>
<p>einfach abfragen kann, ob da wirklich was kopiert worden ist.</p>
</blockquote>
<p>Aber warum soll das ein Fehler sein, wenn es garnichts zum Kopieren gibt? Da muss man für leere Dateien immer eine Sonderbehandlung machen, wenn man ein Verzeichnis kopieren will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874702</guid><dc:creator><![CDATA[suseq]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:42:07 GMT]]></title><description><![CDATA[<p>suseq schrieb:</p>
<blockquote>
<p>Aber warum soll das ein Fehler sein, wenn es garnichts zum Kopieren gibt? Da muss man für leere Dateien immer eine Sonderbehandlung machen, wenn man ein Verzeichnis kopieren will.</p>
</blockquote>
<p>muss man nicht. Wenn leere Dateien ok sind, ignoriere einfach das failbit; nach dem Kopieren musst Du mit dem ostream 'Original' ja eh' nicht mehr arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874703</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:52:07 GMT]]></title><description><![CDATA[<p>Super, hat geklappt, danke dir Werner. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Da war so ein kleiner Pfeil im Text (Sonderzeichen nehme ich an), aber bitweise ging es dann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874708</guid><dc:creator><![CDATA[_Kay_]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:52:07 GMT</pubDate></item><item><title><![CDATA[Reply to Riesiger string (Bibel) aus Datei in andere Datei kopieren on Sun, 28 Mar 2010 17:57:03 GMT]]></title><description><![CDATA[<p><em>Kay</em> schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char c;
	while( !Original.eof() ) {
	
	c = Original.get();
	
	if ( Original.good() ) 
		Kopie.put(c);
</code></pre>
</blockquote>
<p>charweise ne datei zu kopieren ist schon unter c ne schlechte weil langsame idee...<br />
das hat sich sicher mit c++ nicht geändert...</p>
<p>lg lolo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874709</guid><dc:creator><![CDATA[noobLolo]]></dc:creator><pubDate>Sun, 28 Mar 2010 17:57:03 GMT</pubDate></item></channel></rss>