<?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[Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen]]></title><description><![CDATA[<p>Abend,</p>
<p>ich versuche gerade, eine bestimmte Anzahl von Zeichen ab einer bestimmten Position via <code>istream_iterator</code> zu lesen, habe aber so meine Schwierigkeiten damit. Zum Beispiel will ich aus der Datei foo.bin 10 Zeichen lesen, von Postition 100 bis 109. Probleme bereitet mir nun, einen Iterator auf das Ende zu setzen:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;

int main()
{
	std::ifstream begin(&quot;foo.bin&quot;,std::ios_base::binary);
	begin.seekg(100,std::ios_base::beg);

	std::string content(std::istream_iterator&lt;char&gt;(begin),std::istream_iterator&lt;char&gt;(/*end*/));
}
</code></pre>
<p>Ich habe versucht, einen Iterator auf dieselbe Position wie <code>begin</code> zu setzen und ihn dann 10x zu inkrementieren. Irgendwie schwachsinnig und es hat auch nicht funktioniert; ich habe einen leeren String bekommen. Gibt es überhaupt eine Möglichkeit, das Ganze mit <code>istream_iterator</code> zu machen?</p>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302180/via-istream_iterator-n-aufeinanderfolgende-zeichen-aus-einer-datei-lesen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 15:15:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302180.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Apr 2012 18:23:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Thu, 12 Apr 2012 18:23:44 GMT]]></title><description><![CDATA[<p>Abend,</p>
<p>ich versuche gerade, eine bestimmte Anzahl von Zeichen ab einer bestimmten Position via <code>istream_iterator</code> zu lesen, habe aber so meine Schwierigkeiten damit. Zum Beispiel will ich aus der Datei foo.bin 10 Zeichen lesen, von Postition 100 bis 109. Probleme bereitet mir nun, einen Iterator auf das Ende zu setzen:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;

int main()
{
	std::ifstream begin(&quot;foo.bin&quot;,std::ios_base::binary);
	begin.seekg(100,std::ios_base::beg);

	std::string content(std::istream_iterator&lt;char&gt;(begin),std::istream_iterator&lt;char&gt;(/*end*/));
}
</code></pre>
<p>Ich habe versucht, einen Iterator auf dieselbe Position wie <code>begin</code> zu setzen und ihn dann 10x zu inkrementieren. Irgendwie schwachsinnig und es hat auch nicht funktioniert; ich habe einen leeren String bekommen. Gibt es überhaupt eine Möglichkeit, das Ganze mit <code>istream_iterator</code> zu machen?</p>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201278</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Apr 2012 18:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Thu, 12 Apr 2012 18:34:44 GMT]]></title><description><![CDATA[<p>Du kannst mit std::copy_n eine bestimmte Anzahl kopieren und mittels std::back_inserter zum String hinzufügen:</p>
<pre><code class="language-cpp">std::copy_n(std::istream_iterator&lt;char&gt;(begin), 10, std::back_inserter(content));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2201279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201279</guid><dc:creator><![CDATA[macian]]></dc:creator><pubDate>Thu, 12 Apr 2012 18:34:44 GMT</pubDate></item><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Thu, 12 Apr 2012 18:44:03 GMT]]></title><description><![CDATA[<p>Stimmt :), aber wie schauts ohne C++11 aus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201283</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Apr 2012 18:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Thu, 12 Apr 2012 18:47:13 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Stimmt :), aber wie schauts ohne C++11 aus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Dann programmier dir copy_n. Die andere Methode, sich einen zählenden istream_iterator zu schreiben ist viel, viel aufwändiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201284</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 12 Apr 2012 18:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Thu, 12 Apr 2012 19:33:06 GMT]]></title><description><![CDATA[<p>Auf <a href="http://en.cppreference.com/w/cpp/algorithm/copy_n" rel="nofollow">http://en.cppreference.com/w/cpp/algorithm/copy_n</a> kannst du auch ein mögliches copy_n anschauen/ übernehmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> :</p>
<pre><code class="language-cpp">template&lt; class InputIterator, class Size, class OutputIterator&gt;
OutputIterator copy_n(InputIterator first, Size count, OutputIterator result)
{
    if (count &gt; 0) {
        *result++ = *first;
        for (Size i = 1; i &lt; count; ++i) {
            *result++ = *++first;
        }
    }
    return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2201299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201299</guid><dc:creator><![CDATA[macian]]></dc:creator><pubDate>Thu, 12 Apr 2012 19:33:06 GMT</pubDate></item><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Thu, 12 Apr 2012 19:33:10 GMT]]></title><description><![CDATA[<p>macian schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if (count &gt; 0) {
        *result++ = *first;
        for (Size i = 1; i &lt; count; ++i) {
            *result++ = *++first;
        }
    }
</code></pre>
</blockquote>
<p>Diese Implementierung finde ich seltsam, wieso nicht ganz einfach so...</p>
<pre><code class="language-cpp">if( count&gt;0 )
	{
		for(Size i=0; i&lt;count; ++i,++first,++result)
		{
			*result = *first;
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2201303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201303</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Apr 2012 19:33:10 GMT</pubDate></item><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Thu, 12 Apr 2012 20:24:07 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Stimmt :), aber wie schauts ohne C++11 aus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Dann programmier dir copy_n. Die andere Methode, sich einen zählenden istream_iterator zu schreiben ist viel, viel aufwändiger.</p>
</blockquote>
<p>Aber Achtung - ein copy_n ist wider Erwarten gar nicht trivial. Eine 'normale' Implementierung führt in Kombination mit std::istream_iterator sofort zu einem Fehler. Mit Rücksicht auf den input-iterator darf die Quelle (istream_iterator) nur N-1-mal inkrementiert werden.<br />
copy_n mit N==0 ist übrigens nicht zulässig!</p>
<p>Falsch wäre</p>
<pre><code class="language-cpp">template&lt; typename Src, typename Sz, typename Dst &gt;
    Dst copy_n( Src src, Sz count, Dst dst )
    {
        for( ; count &gt; 0; --count, ++dst, ++src ) // 'src' wird 'count'-mal inkrementiert
            *dst = *src;
        return dst;
    }
</code></pre>
<p>Korrekter ist:</p>
<pre><code class="language-cpp">template&lt; typename Src, typename Sz, typename Dst &gt;
    Dst copy_n( Src src, Sz count, Dst dst )
    {
        assert( count &gt; 0 );
        *dst = *src;
        while( --count &gt; 0 )
            *++dst = *++src; // 'src' wird 'count-1'-mal inkrementiert
        return ++dst;
    }
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201325</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 12 Apr 2012 20:24:07 GMT</pubDate></item><item><title><![CDATA[Reply to Via istream_iterator N aufeinanderfolgende Zeichen aus einer Datei lesen on Fri, 13 Apr 2012 04:46:32 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Aber Achtung - ein copy_n ist wider Erwarten gar nicht trivial. Eine 'normale' Implementierung führt in Kombination mit std::istream_iterator sofort zu einem Fehler. Mit Rücksicht auf den input-iterator darf die Quelle (istream_iterator) nur N-1-mal inkrementiert werden.<br />
copy_n mit N==0 ist übrigens nicht zulässig!</p>
</blockquote>
<p>Ah, ok, das erklärt, warum es auf diese Art und Weise implementiert ist. Danke euch <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/2201408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201408</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 13 Apr 2012 04:46:32 GMT</pubDate></item></channel></rss>