<?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[dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte zu Testzwecken ein Programm schreiben, das in Textdokumenten die Buchstabenkombination &quot;Studie&quot; findet und durch &quot;frei&quot; ersetzt. Dazu habe ich bisher folgenden Quelltext verfasst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

int main() 
{
  ifstream dat_ein;
  ofstream dat_aus;
  string dateiname;
  int bedingung = 1;
  char zeichen, ersetzen;

  cout &lt;&lt; &quot;Geben Sie den Pfad und Namen der Datei ein: &quot;;  
  cin  &gt;&gt; dateiname;                                     
  cout &lt;&lt; endl;

  dat_ein.open(dateiname.c_str(), ios_base::in);

  if(!dat_ein)                              
   {
   cout &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!&quot;;
   cout &lt;&lt; endl;
   return -1;
   }

:arrow_right: dat_aus.open(dateiname.c_str(), ios_base::out);

  if(!dat_aus)                              
   {
   cout &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!&quot;;
   cout &lt;&lt; endl;
   return -1;
   }

  while (bedingung == 1)
  {
  while (!dat_ein.eof())        
    {
    dat_ein.get(zeichen);

	if(zeichen == 'S')
    {
	  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;

	  ersetzen = 'f';
	  dat_aus &lt;&lt; ersetzen;

	  dat_ein.get(zeichen);
	  if(zeichen == 't')
	  {
		  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
		  ersetzen = 'r';
		  dat_aus &lt;&lt; ersetzen;

		  dat_ein.get(zeichen);
		  if(zeichen == 'u')
		  {
			  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
			  ersetzen = 'e';
			  dat_aus &lt;&lt; ersetzen;

			  dat_ein.get(zeichen);
			  if(zeichen == 'd')
			  {
				  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
				  ersetzen = 'i';
				  dat_aus &lt;&lt; ersetzen;

				  dat_ein.get(zeichen);
				  if(zeichen == 'i')
				  {
					  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
					  ersetzen = ' ';
				      dat_aus &lt;&lt; ersetzen;

					  dat_ein.get(zeichen);
					  if(zeichen == 'e')
					  {
						  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
						  ersetzen = ' ';
						  dat_aus &lt;&lt; ersetzen;
					  }

					  else
					  {
						  bedingung = 1;
						  break;
					  }

				  }

				  else
					  {
						  bedingung = 1;
						  break;
					  }
			  }

			  else
					  {
						  bedingung = 1;
						  break;
					  }
		  }

		  else
					  {
						  bedingung = 1;
						  break;
					  }
	   }

	  else
					  {
						  bedingung = 1;
						  break;
					  }
	}

	}

  break;
  }

  dat_aus.close();
  dat_ein.close();

   return 0;
}
</code></pre>
<p>Er wird anstandslos kompiliert doch die Testdatei, in der nur das Wort &quot;Studie&quot; stehen sollte ist nach Ausführung der Anweisung</p>
<p>dat_aus.open(dateiname.c_str(), ios_base::out);</p>
<p>leer und dementsprechend wird auch der String &quot;Gut!&quot; nicht ausgegeben. Warum wird die Datei durch diese Anweisung geleert?</p>
<p>Anstelle der if-Verzweigungen müsste man einen besseren Algorhythmus finden, der bestimmte Buchstabenkombinationen finden kann. Kann mir jemand helfen? Bin leider noch nicht sonderlich erfahren mit C++...</p>
<p>Thx für Rettungsversuche,</p>
<p>die Killermilchschnitte</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/123046/dat_aus-open-dateiname-c_str-ios_base-out-löscht-dateiinhalt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 11:26:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123046.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Oct 2005 13:43:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt on Wed, 12 Oct 2005 13:43:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte zu Testzwecken ein Programm schreiben, das in Textdokumenten die Buchstabenkombination &quot;Studie&quot; findet und durch &quot;frei&quot; ersetzt. Dazu habe ich bisher folgenden Quelltext verfasst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

int main() 
{
  ifstream dat_ein;
  ofstream dat_aus;
  string dateiname;
  int bedingung = 1;
  char zeichen, ersetzen;

  cout &lt;&lt; &quot;Geben Sie den Pfad und Namen der Datei ein: &quot;;  
  cin  &gt;&gt; dateiname;                                     
  cout &lt;&lt; endl;

  dat_ein.open(dateiname.c_str(), ios_base::in);

  if(!dat_ein)                              
   {
   cout &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!&quot;;
   cout &lt;&lt; endl;
   return -1;
   }

:arrow_right: dat_aus.open(dateiname.c_str(), ios_base::out);

  if(!dat_aus)                              
   {
   cout &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!&quot;;
   cout &lt;&lt; endl;
   return -1;
   }

  while (bedingung == 1)
  {
  while (!dat_ein.eof())        
    {
    dat_ein.get(zeichen);

	if(zeichen == 'S')
    {
	  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;

	  ersetzen = 'f';
	  dat_aus &lt;&lt; ersetzen;

	  dat_ein.get(zeichen);
	  if(zeichen == 't')
	  {
		  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
		  ersetzen = 'r';
		  dat_aus &lt;&lt; ersetzen;

		  dat_ein.get(zeichen);
		  if(zeichen == 'u')
		  {
			  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
			  ersetzen = 'e';
			  dat_aus &lt;&lt; ersetzen;

			  dat_ein.get(zeichen);
			  if(zeichen == 'd')
			  {
				  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
				  ersetzen = 'i';
				  dat_aus &lt;&lt; ersetzen;

				  dat_ein.get(zeichen);
				  if(zeichen == 'i')
				  {
					  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
					  ersetzen = ' ';
				      dat_aus &lt;&lt; ersetzen;

					  dat_ein.get(zeichen);
					  if(zeichen == 'e')
					  {
						  cout &lt;&lt; &quot;Gut!&quot; &lt;&lt; endl;
						  ersetzen = ' ';
						  dat_aus &lt;&lt; ersetzen;
					  }

					  else
					  {
						  bedingung = 1;
						  break;
					  }

				  }

				  else
					  {
						  bedingung = 1;
						  break;
					  }
			  }

			  else
					  {
						  bedingung = 1;
						  break;
					  }
		  }

		  else
					  {
						  bedingung = 1;
						  break;
					  }
	   }

	  else
					  {
						  bedingung = 1;
						  break;
					  }
	}

	}

  break;
  }

  dat_aus.close();
  dat_ein.close();

   return 0;
}
</code></pre>
<p>Er wird anstandslos kompiliert doch die Testdatei, in der nur das Wort &quot;Studie&quot; stehen sollte ist nach Ausführung der Anweisung</p>
<p>dat_aus.open(dateiname.c_str(), ios_base::out);</p>
<p>leer und dementsprechend wird auch der String &quot;Gut!&quot; nicht ausgegeben. Warum wird die Datei durch diese Anweisung geleert?</p>
<p>Anstelle der if-Verzweigungen müsste man einen besseren Algorhythmus finden, der bestimmte Buchstabenkombinationen finden kann. Kann mir jemand helfen? Bin leider noch nicht sonderlich erfahren mit C++...</p>
<p>Thx für Rettungsversuche,</p>
<p>die Killermilchschnitte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890642</guid><dc:creator><![CDATA[Killermilchschnitte]]></dc:creator><pubDate>Wed, 12 Oct 2005 13:43:11 GMT</pubDate></item><item><title><![CDATA[Reply to dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt on Wed, 12 Oct 2005 13:53:15 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Das liegt an ios_base::out, welches Die Datei beim öffnen auf 0 setzt. Was du machst, ist eine Datei zum lesen zu öffnen, (der Dateiinhalt bleibt hierbei noch erhalten), danach jedoch die gleiche Datei zum schreiben zu öffnen =&gt; Der Dateiinhalt wird gelöscht... (Btw.: Ich würde nicht mit zwei Streams auf eine Datei gleichzeitig arbeiten...)</p>
<p>/edit: Bzg. den vielen Ifs: Schau dir doch mal Schleifen und Arrays an :).</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890650</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 12 Oct 2005 13:53:15 GMT</pubDate></item><item><title><![CDATA[Reply to dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt on Wed, 12 Oct 2005 14:07:38 GMT]]></title><description><![CDATA[<p>Hi caipi,</p>
<blockquote>
<p>Das liegt an ios_base::out, welches Die Datei beim öffnen auf 0 setzt. Was du machst, ist eine Datei zum lesen zu öffnen, (der Dateiinhalt bleibt hierbei noch erhalten), danach jedoch die gleiche Datei zum schreiben zu öffnen =&gt; Der Dateiinhalt wird gelöscht... (Btw.: Ich würde nicht mit zwei Streams auf eine Datei gleichzeitig arbeiten...)</p>
</blockquote>
<p>Wie kann ich denn stattdessen in eine Datei schreiben, ohne sie zu nullen?</p>
<blockquote>
<p>Bzg. den vielen Ifs: Schau dir doch mal Schleifen und Arrays an .</p>
</blockquote>
<p>Ne, das versteh ich jetzt nicht... <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/890679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890679</guid><dc:creator><![CDATA[killermilchschnitte]]></dc:creator><pubDate>Wed, 12 Oct 2005 14:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt on Wed, 12 Oct 2005 14:14:58 GMT]]></title><description><![CDATA[<p>killermilchschnitte schrieb:</p>
<blockquote>
<p>Hi caipi,</p>
<blockquote>
<p>Das liegt an ios_base::out, welches Die Datei beim öffnen auf 0 setzt. Was du machst, ist eine Datei zum lesen zu öffnen, (der Dateiinhalt bleibt hierbei noch erhalten), danach jedoch die gleiche Datei zum schreiben zu öffnen =&gt; Der Dateiinhalt wird gelöscht... (Btw.: Ich würde nicht mit zwei Streams auf eine Datei gleichzeitig arbeiten...)</p>
</blockquote>
<p>Wie kann ich denn stattdessen in eine Datei schreiben, ohne sie zu nullen?</p>
</blockquote>
<p>Entweder nacheinander mit den streams auf die Datei arbeiten, eine fstream mit der Datei assoziieren (d.h. einen Stream, mit dem du sowohl lesend als auch schreibend auf selbige zugreifen kannst), ..., Design umdenken. Du siehst, es gibt viele Wege :).</p>
<p>Persönlich würde ich dir empfehlen das Design zu überdenken. Glaub mir, da liegt der Hase im Pfeffer :).</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890690</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 12 Oct 2005 14:14:58 GMT</pubDate></item><item><title><![CDATA[Reply to dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt on Wed, 12 Oct 2005 14:13:48 GMT]]></title><description><![CDATA[<p>Nimm eine zweite Datei für die Ausgabe <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12286">@ifs</a>: Du kannst auch versuchen, die Datei zeilenweise in einen std::string einzulesen - dann kannst du mit string-eigenen Methoden suchen und ersetzen.</p>
<p>(ohne Anspruch auf Korrektheit)</p>
<pre><code class="language-cpp">dat_ein.getline(s);
while((i=s.find(&quot;Studie&quot;))!=string::npos)
  s=s.substring(0,i)+&quot;frei&quot;+s.substring(i+6 /*&lt;- Länge von &quot;Studie&quot;);
dat_aus &lt;&lt; s;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/890693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890693</guid><dc:creator><![CDATA[CS]]></dc:creator><pubDate>Wed, 12 Oct 2005 14:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt on Fri, 14 Oct 2005 11:12:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also jetzt verstehe ich nichts mehr. Ich glaub es würde mir erstmal reichen, wenn mir jemand erklären könnte, wie aus mehreren char-Zeichen einen String bauen kann, den man dann manipuliert.</p>
<p>Das mit den beiden Streams hab ich auch nicht verstanden, mein Lehrbuch hat dazu kein Kapitel gehabt (easy C++ von M+T). Wie kann ich in eine Datei schreiben, ohne &quot;dat_aus.open(dateiname.c_str(), ios_base::out);&quot; zu schreiben und damit die Datei zu nullen?</p>
<p>Danke für eure Hilfe,</p>
<p>Killermilchschnitte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892234</guid><dc:creator><![CDATA[Killermilchschnitte]]></dc:creator><pubDate>Fri, 14 Oct 2005 11:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to dat_aus.open(dateiname.c_str(), ios_base::out); löscht Dateiinhalt on Fri, 14 Oct 2005 11:20:49 GMT]]></title><description><![CDATA[<p>@Strings: an einen bestehenden string kannst du mit str+=c oder str.append(c) weitere Zeichen anhängen.</p>
<p>@Streams: Erstens solltest du für Ein- und Ausgabe verschiedene Dateien<sup>*</sup> nehmen, sonst kommst du mit dir selbst ins Gehege - und das kann nicht gesund sein. Und zweitens versuch' mal &quot;dat_aus.open(dateiname.c_str(), ios_base::append);&quot; (damit wird die Datei geöffnet und neue Daten hinter dem bisherigen Inhalt angehängt).</p>
<p><sup>*</sup> Damit sind nicht verschiedene Streams gemeint, sondern die Dateien auf der Festplatte:</p>
<pre><code class="language-cpp">dat_ein.open(dateiname.c_str(),iosbase::in);
dateiname.insert(dateiname.rfind('.')-1,&quot;neu&quot;); // hängt ein &quot;neu&quot; vor der Dateiendung an
dat_aus.open(dateiname.c_str(),iosbase::append);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/892239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892239</guid><dc:creator><![CDATA[CS]]></dc:creator><pubDate>Fri, 14 Oct 2005 11:20:49 GMT</pubDate></item></channel></rss>