<?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[Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt]]></title><description><![CDATA[<p>Hallo, ich habe folgendes Problem:</p>
<p>ich habe eine Database.txt (ca. 5MB), in der Allerhand Sonderzeichen vorkommen. Diese Sonderzeichen werden nur benutzt, um die Daten in der Datei zu trennen. Leider ist eines der Sonderzeichen '\0' (also das Nullterminierende Zeichen). Wenn ich jetzt die Datei per ifstream einlesen will, bricht das Einlesen natürlich immer bei den NULL Zeichen ab. Ich habe schon versucht, das ganze über .clear() oder .get() und isprintable() abzufangen, allerdings ohne Erfolg.</p>
<p>Hat jemand eine Ahnung, wie ich so eine Datei handeln kann? Und wie sieht dann die &quot;Abbruchbedingung&quot; für das Einlesen aus? while(!is.eof()) geht ja dann nicht mehr...</p>
<p>Vielen Dank für alle Ideen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242935/problem-mit-database-in-der-0-vorkommt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 17:11:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242935.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Jun 2009 22:11:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Tue, 09 Jun 2009 22:11:24 GMT]]></title><description><![CDATA[<p>Hallo, ich habe folgendes Problem:</p>
<p>ich habe eine Database.txt (ca. 5MB), in der Allerhand Sonderzeichen vorkommen. Diese Sonderzeichen werden nur benutzt, um die Daten in der Datei zu trennen. Leider ist eines der Sonderzeichen '\0' (also das Nullterminierende Zeichen). Wenn ich jetzt die Datei per ifstream einlesen will, bricht das Einlesen natürlich immer bei den NULL Zeichen ab. Ich habe schon versucht, das ganze über .clear() oder .get() und isprintable() abzufangen, allerdings ohne Erfolg.</p>
<p>Hat jemand eine Ahnung, wie ich so eine Datei handeln kann? Und wie sieht dann die &quot;Abbruchbedingung&quot; für das Einlesen aus? while(!is.eof()) geht ja dann nicht mehr...</p>
<p>Vielen Dank für alle Ideen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724183</guid><dc:creator><![CDATA[StreamProblem]]></dc:creator><pubDate>Tue, 09 Jun 2009 22:11:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Tue, 09 Jun 2009 22:54:03 GMT]]></title><description><![CDATA[<p>1. Verwende <code>std::ios::binary</code> :<br />
<a href="http://www.cplusplus.com/reference/iostream/ios_base/openmode/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios_base/openmode/</a><br />
2. <code>while(!is.eof())</code> ist sowieso meistens eine schlechte Idee. Das <code>eofbit</code> Flag wird erst gesetzt, nachdem man über das Ende hinausgelesen hat. Man sollte die Gültigkeit des Streams immer nach einer Leseoperation prüfen, davor bringt eigentlich nicht viel.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724198</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 09 Jun 2009 22:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Tue, 09 Jun 2009 23:06:36 GMT]]></title><description><![CDATA[<p>Schonmal Danke für den Tipp!</p>
<p>Ich habe jetzt im binary Modus eingelesen, und tatsächlich wird nicht beim ersten Nullzeichen abgebrochen. Allerdings scheint isprint() nicht im binary modus zu funktionieren.</p>
<p>Mein Asatz ist Folgender: Der Sinn ist, alle Sonderzeichen zu entfernen und mit Zeilenumbrüchen zu ersetzen</p>
<pre><code class="language-cpp">vector&lt;unsigned char&gt;vec; //Vektor zum Zwischenspeichern anlegen

ifstream lesen (&quot;Master.mwBase&quot;, ios::in | ios::binary); //öffnen im binary modus

unsigned char c;
while(!lesen.eof()) //ganze Datei lesen
{
    c = lesen.get(); //Buchstabenweise lesen

    if(!isprint(c)) //Sonderzeichen ersetzen. Scheint im binarymodus
       c='\n';      //nicht zu funktionieren
    vec.push_back(c);
}
lesen.close();

ofstream out;
out.open(&quot;output.txt&quot;, ios::out | ios::binary);

for(unsigned int t(0);t!=vec.size();++t)
    out&lt;&lt;vec[t]; //Database ohne sonderzeichen in Outputdatei scheiben
out.close();
</code></pre>
<p>Denn die Output Datei ist jetzt eine 1:1 Kopie der Originaldatei (mit Sonderzeichen).<br />
Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724201</guid><dc:creator><![CDATA[StreamProblem]]></dc:creator><pubDate>Tue, 09 Jun 2009 23:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Tue, 09 Jun 2009 23:14:02 GMT]]></title><description><![CDATA[<p>StreamProblem schrieb:</p>
<blockquote>
<p>Was mache ich falsch?</p>
</blockquote>
<p>Naja, du prüfst ja noch nicht mal irgendwo nach Sonderzeichen.</p>
<p>Übrigens kann man Dateien auch in einem Rutsch einlesen:</p>
<pre><code class="language-cpp">ifstream file( &quot;...&quot;, ios::binary );     // Datei öffnen
file.seekg( 0, ios::end );               // Dateizeiger an's Ende setzen
size_t file_size = file.tellg();         // Dateigröße ermitteln
file.seekg( 0, ios::beg );               // Dateizeiger wieder an den Anfang

std::vector&lt;char&gt; content( file_size );  // vector erstellen mit genug Elementen
file.read( &amp;content[0], file_size );     // Alles einlesen
</code></pre>
<p>Was bezeichnest du eigentlich als &quot;Sonderzeichen&quot;, also wie grenzt du sie ein?</p>
<p>Und: Bei ifstream brauchst du das Flag ios::in nicht übergeben, ist implizit.</p>
<p>edit: Und geschlossen werden die Dateien automatisch mit dem Destruktor, das brauchst du nicht manuell zu machen <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/1724205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724205</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 09 Jun 2009 23:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Tue, 09 Jun 2009 23:20:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Und: Bei ifstream brauchst du das Flag ios::in nicht übergeben, ist implizit.<br />
edit: Und geschlossen werden die Dateien automatisch mit dem Destruktor, das brauchst du nicht manuell zu machen</p>
</blockquote>
<p>Das wusste ich noch garnicht. Wieder was gelernt <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="😃"
    /></p>
<blockquote>
<p>Naja, du prüfst ja noch nicht mal irgendwo nach Sonderzeichen.</p>
</blockquote>
<p>Das Prüfen der Sondereichen wollte ich über isprint(c) realisieren</p>
<pre><code class="language-cpp">Was bezeichnest du eigentlich als &quot;Sonderzeichen&quot;, also wie grenzt du sie ein?
</code></pre>
<p>In dem Textdokument selber sehe ich die Sonderzeichen nur als &quot;Kästchen&quot;. Wenn ich die Datei einlese, werden mit diese Zeichen als Smileys, Herzen, &quot;ý&quot; oder ähnlichem angezeigt. Und natürlich das null Zeichen. Diese habe ich versucht über isprint(c) herauszufiltern.</p>
<p>Den Tipp mit der ganzen Datei einlesen werde ich gleich mal ausprobieren <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724207</guid><dc:creator><![CDATA[StreamProblem]]></dc:creator><pubDate>Tue, 09 Jun 2009 23:20:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Tue, 09 Jun 2009 23:28:21 GMT]]></title><description><![CDATA[<p>StreamProblem schrieb:</p>
<blockquote>
<blockquote>
<p>Naja, du prüfst ja noch nicht mal irgendwo nach Sonderzeichen.</p>
</blockquote>
<p>Das Prüfen der Sondereichen wollte ich über isprint(c) realisieren</p>
</blockquote>
<p>Ohje, sorry, hab ich total übersehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
<p>Der Fehler in deinem Code war ein fehlendes &quot;else&quot; nach Zeile 11 <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>Wenn du die Datei in einem Rutsch liest und schreibst ( <code>outfile.write(&amp;content[0],content.size())</code> ), kannst du zum Ersetzen (nach Lesen, vor Schreiben) einen Algorithmus aus der STL verwenden: <a href="http://cplusplus.com/reference/algorithm/replace_if/" rel="nofollow">std::replace_if</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724210</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 09 Jun 2009 23:28:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Tue, 09 Jun 2009 23:28:36 GMT]]></title><description><![CDATA[<p>Ok, der Ansatz von Badestrand funktioniert einwandfrei.</p>
<p>Vielen Dank! <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/1724211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724211</guid><dc:creator><![CDATA[StreamProblem]]></dc:creator><pubDate>Tue, 09 Jun 2009 23:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Wed, 10 Jun 2009 06:04:32 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>StreamProblem schrieb:</p>
<blockquote>
<blockquote>
<p>Naja, du prüfst ja noch nicht mal irgendwo nach Sonderzeichen.</p>
</blockquote>
<p>Das Prüfen der Sondereichen wollte ich über isprint(c) realisieren</p>
</blockquote>
<p>Ohje, sorry, hab ich total übersehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
<p>Der Fehler in deinem Code war ein fehlendes &quot;else&quot; nach Zeile 11 <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>
</blockquote>
<p>Das leuchtet mir nicht ein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724231</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 10 Jun 2009 06:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Database, in der &#x27;&#x5C;0&#x27; vorkommt on Wed, 10 Jun 2009 09:32:40 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>Das leuchtet mir nicht ein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Mir auch nicht mehr, war wohl zu spät.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724354</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 10 Jun 2009 09:32:40 GMT</pubDate></item></channel></rss>