<?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[Leerzeilen in Datei]]></title><description><![CDATA[<p>Hallo @all,<br />
meine Funktion soll mir in einer .txt Datei ein paar Zeilen löschen.<br />
Das funktioniert auch gut, jedoch werden beim erneuten Schreiben der Datei komische Zeichen am Anfang eingefügt, sowie am Ende der Datei immer 2 Leerzeichen gepostet.</p>
<p>Könnte mir bitte jemand sagen warum das so ist und wie ich es beheben könnte?</p>
<p>Gruss Michael</p>
<pre><code class="language-cpp">int deleteBuch(char* ID) {
fstream fileReadBuch;
char Text[512];
char Buffer[512];

    fileReadBuch.open(&quot;buch.txt&quot;, ios::in);
    while(!fileReadBuch.eof()) {
        fileReadBuch.getline(Text, sizeof(Text));
            //Check Ã¼bereinstimmung ID
            if(strcmp(Text, ID) == 0) {
                //lÃ¶sche Zeile mit ID und die 7 nÃ¤chsten zeilen

                for(int i = 0; i &lt; 6;i++) {
                    fileReadBuch.getline(Text, sizeof(Text));
                }
            } else {
                    //schreibe in Buffer Variable
                    strcat(Buffer, Text);
                    strcat(Buffer, &quot;\n&quot;);
                }

        }
    fileReadBuch.close();

    //schreibe Buffer Variable in Datei
    fstream fileWriteBuch;
    fileWriteBuch.open(&quot;buch.txt&quot;, ios::trunc|ios::out);
        fileWriteBuch&lt;&lt;Buffer&lt;&lt;endl;
    fileWriteBuch.close();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/144532/leerzeilen-in-datei</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 17:58:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144532.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Apr 2006 08:59:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Leerzeilen in Datei on Wed, 19 Apr 2006 08:59:05 GMT]]></title><description><![CDATA[<p>Hallo @all,<br />
meine Funktion soll mir in einer .txt Datei ein paar Zeilen löschen.<br />
Das funktioniert auch gut, jedoch werden beim erneuten Schreiben der Datei komische Zeichen am Anfang eingefügt, sowie am Ende der Datei immer 2 Leerzeichen gepostet.</p>
<p>Könnte mir bitte jemand sagen warum das so ist und wie ich es beheben könnte?</p>
<p>Gruss Michael</p>
<pre><code class="language-cpp">int deleteBuch(char* ID) {
fstream fileReadBuch;
char Text[512];
char Buffer[512];

    fileReadBuch.open(&quot;buch.txt&quot;, ios::in);
    while(!fileReadBuch.eof()) {
        fileReadBuch.getline(Text, sizeof(Text));
            //Check Ã¼bereinstimmung ID
            if(strcmp(Text, ID) == 0) {
                //lÃ¶sche Zeile mit ID und die 7 nÃ¤chsten zeilen

                for(int i = 0; i &lt; 6;i++) {
                    fileReadBuch.getline(Text, sizeof(Text));
                }
            } else {
                    //schreibe in Buffer Variable
                    strcat(Buffer, Text);
                    strcat(Buffer, &quot;\n&quot;);
                }

        }
    fileReadBuch.close();

    //schreibe Buffer Variable in Datei
    fstream fileWriteBuch;
    fileWriteBuch.open(&quot;buch.txt&quot;, ios::trunc|ios::out);
        fileWriteBuch&lt;&lt;Buffer&lt;&lt;endl;
    fileWriteBuch.close();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1040343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040343</guid><dc:creator><![CDATA[dE_MaStEr]]></dc:creator><pubDate>Wed, 19 Apr 2006 08:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Wed, 19 Apr 2006 09:04:48 GMT]]></title><description><![CDATA[<p>Die Zeichen am Anfang dürften schon vorher drin gewesen sein - initialisiere mal Buffer mit &quot;&quot;. (oder noch besser, verwende lieber std::string anstelle der char-Arrays)</p>
<p>Und die Leerzeichen am Ende kommen vermutlich daher, daß das eofbit erst gesetzt wird, wenn eine Leseoperation über's Dateiende hinausgeschossen ist. D.h. im letzten Schleifendurchlauf arbeitest du mit ungültigen Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040352</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 19 Apr 2006 09:04:48 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Wed, 19 Apr 2006 10:13:23 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Und die Leerzeichen am Ende kommen vermutlich daher, daß das eofbit erst gesetzt wird, wenn eine Leseoperation über's Dateiende hinausgeschossen ist. D.h. im letzten Schleifendurchlauf arbeitest du mit ungültigen Daten.</p>
</blockquote>
<p>Nein, in der Datei steht in der ersten Zeile nur eine 1 und sonst nichts.</p>
<p>Wie kann ich verhindern das er mit dem letzten Schleifendurchlauf keine ungültige Daten benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040407</guid><dc:creator><![CDATA[dE_MaStEr]]></dc:creator><pubDate>Wed, 19 Apr 2006 10:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Wed, 19 Apr 2006 10:50:46 GMT]]></title><description><![CDATA[<p>dE_MaStEr schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und die Leerzeichen am Ende kommen vermutlich daher, daß das eofbit erst gesetzt wird, wenn eine Leseoperation über's Dateiende hinausgeschossen ist. D.h. im letzten Schleifendurchlauf arbeitest du mit ungültigen Daten.</p>
</blockquote>
<p>Nein, in der Datei steht in der ersten Zeile nur eine 1 und sonst nichts.</p>
</blockquote>
<p>OK, dann liest er im ersten Schleifendurchlauf die &quot;1&quot; ein und merkt sie sich. Anschließend kommt die Abfrage auf eof() (ist noch nicht erfüllt - also zweiter Durchlauf). Im zweiten Durchlauf erwischst du das eof und in deinem Puffer bleibt irgendwas stehen.</p>
<blockquote>
<p>Wie kann ich verhindern das er mit dem letzten Schleifendurchlauf keine ungültige Daten benutzt?</p>
</blockquote>
<p>Indem du das eof-Flag direkt nach dem Einlesen abfragst:</p>
<pre><code class="language-cpp">while(file)
{
  file.getline(...);
  if(!file) break;//Abbruch bei Fehler (schließt EOF ein)
  ...
}
</code></pre>
<p>oder noch kürzer:</p>
<pre><code class="language-cpp">while(file.getline(...))
{
  ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1040427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040427</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 19 Apr 2006 10:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Thu, 20 Apr 2006 07:18:21 GMT]]></title><description><![CDATA[<p>Ich hab das nun ausprobiert, jedoch werden die 2 Leerzeilen am Ende immernoch eingefügt.<br />
Was mache ich falsch?</p>
<p>Thx schonmal im vorraus <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>Hier nochmal der Code:</p>
<pre><code class="language-cpp">int leiausBuch(char* ID, char* AusgeliehenVon) {
fstream fileReadBuch;
char Text[512] = &quot;&quot;;
char Buffer[512] = &quot;&quot;;

    fileReadBuch.open(&quot;buch.txt&quot;, ios::in);
    while(fileReadBuch.getline(Text, sizeof(Text))) {
        //fileReadBuch.getline(Text, sizeof(Text));
            //Check Ã¼bereinstimmung ID
            if(strcmp(Text, ID) == 0) {
                //lÃ¶sche Zeile mit ID und die 7 nÃ¤chsten zeilen
                strcat(Buffer, Text);
                strcat(Buffer, &quot;\n&quot;);

                for(int i = 0; i &lt; 6;i++) {
                    if(i &lt;= 4) {
                        fileReadBuch.getline(Text, sizeof(Text));
                        strcat(Buffer, Text);
                        strcat(Buffer, &quot;\n&quot;);
                    }
                    if(i == 5){
                        fileReadBuch.getline(Text, sizeof(Text));
                        strcat(Buffer, AusgeliehenVon);
                        strcat(Buffer, &quot;\n&quot;);

                    }
                }
            } 
            else {
                    //schreibe in Buffer Variable
                    strcat(Buffer, Text);
                    strcat(Buffer, &quot;\n&quot;);
            }
        }
    fileReadBuch.close();

    //schreibe Buffer Variable in Datei
    fstream fileWriteBuch;
    fileWriteBuch.open(&quot;buch.txt&quot;, ios::trunc|ios::out);
        fileWriteBuch&lt;&lt;Buffer&lt;&lt;endl;
    fileWriteBuch.close();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1041052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041052</guid><dc:creator><![CDATA[dE_MaStEr]]></dc:creator><pubDate>Thu, 20 Apr 2006 07:18:21 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Thu, 20 Apr 2006 07:27:02 GMT]]></title><description><![CDATA[<p>Erster Tip: Lass die char-Arrays weg und arbeite lieber mit std::string.<br />
Zweiter Tip: Wenn du die Eingabe nicht weiterverarbeiten willst, kannst du istream::ignore() verwenden.<br />
Drittens: Ich glaube, ich habe die Leerzeilen gefunden. Die erste hast du mit &quot;strcat(buf,&quot;\n&quot;);&quot; ans Ende deines Zwischenspeichers geschrieben (wenn sie dich stört, brauchst du ein &quot;buf[strlen(buf)-1]='\0';&quot; vor der Ausgabe), die zweite per &quot;endl&quot; hinterhergeschossen (das kannst du komplett weglassen - close() kümmert sich auch darum, die Daten physikalisch zu speichern).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041056</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 07:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Thu, 20 Apr 2006 08:34:43 GMT]]></title><description><![CDATA[<p>Super, danke nun klappts.</p>
<p>Ich würds ja gern mir String Klasse machen, ist aber von der Aufgabenstellung der Schule nicht erlaubt <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="😞"
    /></p>
<p>Na ja schule eben <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/1041097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041097</guid><dc:creator><![CDATA[dE_MaStEr]]></dc:creator><pubDate>Thu, 20 Apr 2006 08:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Thu, 20 Apr 2006 08:36:23 GMT]]></title><description><![CDATA[<p>Na dann solltest du mal hoffen, daß deine Dateien nicht größer als 512 Byte werden können - C++ kann sehr unfreundlich werden, wenn du jenseits des reservierten Speichers schreiben willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041101</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 08:36:23 GMT</pubDate></item><item><title><![CDATA[Reply to Leerzeilen in Datei on Thu, 20 Apr 2006 13:25:32 GMT]]></title><description><![CDATA[<p>Jap das habe ich gerade noch geändert.<br />
Werden jedoch nicht viel Daten reinkommen da es nur eine Schulaufgabe ist.</p>
<p>Thx, nochmals.</p>
<p>Gruss Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041292</guid><dc:creator><![CDATA[dE_MaStEr]]></dc:creator><pubDate>Thu, 20 Apr 2006 13:25:32 GMT</pubDate></item></channel></rss>