<?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[Nur jedes zweite Zeichen aus einem File...]]></title><description><![CDATA[<p>Hallo liebe Leute!:)</p>
<p>Ich habe ein kleines Problem.<br />
Ich soll eine Datei öffnen, z.B. eine Textdatei, dann soll nur jedes zweite Zeichen aus dem Text berücksichtigt werden und in eine Zieldatei gespeichert werden.<br />
Das ist bestimmt sehr simpel, aber ich kriegs net hin.:(<br />
Momentan hab ich es soweit, daß ich mit getline() Zeile für Zeile des Quelltextes lese per While-Schleife und einem String übergebe.</p>
<p>Dummerweise hab ich mit jetzt den Code net auf de Stick gemacht..Mist.<br />
Na ja, vielleicht gehts auch so...</p>
<p>Innerhalb der While-Schleife arbeite ich dann mit einem bestimmten String-Pointer(interior?) und ordne in einer for-schleife mit einer SChrittweite von zwei mittels Ziel.put(*i) jedes zweite Zeichen dem Ziel zu.</p>
<p>Leider passiert bei einer ungeraden Zeichenanzahl Mist, denn dann erscheint im Zieltext ein Leerzeichen, könnte wohl was mit dem Zeilenumbruch zu tun haben?</p>
<p>Irgendwie ist mir schon klar, daß es ein Unterschied ist, ob ich eine gerade oder ungerade Anzahl pro Zeile habe.<br />
Aber wie fang ich das ab?</p>
<p>Um Tipps wäre ich sehr sehr dankbar!:)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217064/nur-jedes-zweite-zeichen-aus-einem-file</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 22:10:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217064.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Jul 2008 16:20:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 16:20:16 GMT]]></title><description><![CDATA[<p>Hallo liebe Leute!:)</p>
<p>Ich habe ein kleines Problem.<br />
Ich soll eine Datei öffnen, z.B. eine Textdatei, dann soll nur jedes zweite Zeichen aus dem Text berücksichtigt werden und in eine Zieldatei gespeichert werden.<br />
Das ist bestimmt sehr simpel, aber ich kriegs net hin.:(<br />
Momentan hab ich es soweit, daß ich mit getline() Zeile für Zeile des Quelltextes lese per While-Schleife und einem String übergebe.</p>
<p>Dummerweise hab ich mit jetzt den Code net auf de Stick gemacht..Mist.<br />
Na ja, vielleicht gehts auch so...</p>
<p>Innerhalb der While-Schleife arbeite ich dann mit einem bestimmten String-Pointer(interior?) und ordne in einer for-schleife mit einer SChrittweite von zwei mittels Ziel.put(*i) jedes zweite Zeichen dem Ziel zu.</p>
<p>Leider passiert bei einer ungeraden Zeichenanzahl Mist, denn dann erscheint im Zieltext ein Leerzeichen, könnte wohl was mit dem Zeilenumbruch zu tun haben?</p>
<p>Irgendwie ist mir schon klar, daß es ein Unterschied ist, ob ich eine gerade oder ungerade Anzahl pro Zeile habe.<br />
Aber wie fang ich das ab?</p>
<p>Um Tipps wäre ich sehr sehr dankbar!:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539864</guid><dc:creator><![CDATA[Programmier-Legastheniker]]></dc:creator><pubDate>Wed, 02 Jul 2008 16:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 16:32:39 GMT]]></title><description><![CDATA[<p>ich hätte da einen vorschlag:</p>
<p>wenn du doch jede zeile einlesen kannst, kannst du sie doch auch in einem char-Feld oder einem string speichern, welches du dann mittels for-schleife durchläufst und jedes 2. zeichen daraus entziehst:</p>
<pre><code class="language-cpp">char* tmp = .... // einlesenfunktion
int size = sizeof(tmp) / sizeof(char); // ich glaub string hat eigenen size Operator
char *tmp2;
for (int i=0; i&lt;size; i+=2)
{
    tmp2[i] = tmp[i];
}
</code></pre>
<pre><code class="language-cpp">oder ohne 2 tmp-Variablen in einer Schleife
int j = 0;
for (int i=0; i&lt;size; i+=2)
{
    tmp[j] = tmp[i];
    j++
}
// und damit der string auch am ende abgeschlossen ist fügen wir noch das ein:
tmp[j+1] = '\0';
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1539869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539869</guid><dc:creator><![CDATA[Quellcode]]></dc:creator><pubDate>Wed, 02 Jul 2008 16:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 16:41:44 GMT]]></title><description><![CDATA[<p>Das wäre jetzt unter C, oder?<br />
Da muss ich das File doch aber per fopen aufmachen, oder?<br />
dann muss ich den Inhalt des Files doch aber einem String zuordnen und irgendwie hat das net geklappt, das was du gemailt hast hatte ich im Sinn, wenn auch net so ausgereift, da ich ja noch net so die Ahnung habe.</p>
<p>Ich hab das File so aufgemacht:</p>
<p>File *f1;<br />
f1 = fopen(quelldateiname; &quot;rb&quot;);</p>
<p>Da ich den Inhalt von f1 net mit einer For-SChleife durchtippeln konnte, weiss jedenfalls net wie,<br />
da habe ich dann versucht f1 einem string zuzuweisen, aber das verträgt sich von den typen her net.</p>
<p>Möglicherweise, oder sehr wahrscheinlich mach ich was ganz grundlegendes falsch.^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539875</guid><dc:creator><![CDATA[Programmier-Legastheniker]]></dc:creator><pubDate>Wed, 02 Jul 2008 16:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 17:16:41 GMT]]></title><description><![CDATA[<p>Okay...<br />
hm...<br />
dann probiers doch mal mit streams</p>
<pre><code class="language-cpp">ifstream in(&quot;Pfadname&quot;);   // Nicht vergessen \ als \\ zu schreiben
char c[200];

while ( !in.eof() )        // Schreibt alle Zeichen in der Datei in das Feld c
{
    c[i] = in.get();
    i++;
};
c[i] = '\0';               // damit das Feld ab hier abgeschlossen wird
</code></pre>
<p>Nach diesem Einlesen kannst du wie bereits oben angedeutet alles nochmal in eine andre variable schieben, bei der du nur jedes 2. zeichen berücksichtigst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539891</guid><dc:creator><![CDATA[Quellcode]]></dc:creator><pubDate>Wed, 02 Jul 2008 17:16:41 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 17:41:41 GMT]]></title><description><![CDATA[<p>Ok,vielen Dank!:)<br />
Ich dachte halt, es gäbe ein etwas elegantere Lösung, weil ich ja theoretisch im Vorfeld nicht wissen kann, wie groß das benötigte Feld ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539917</guid><dc:creator><![CDATA[Programmier-Legastheniker]]></dc:creator><pubDate>Wed, 02 Jul 2008 17:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 18:07:46 GMT]]></title><description><![CDATA[<p>Ich weiß nicht zwar nicht was Eleganz in C++ bedeutet,<br />
aber man könnte auch anstelle eines Feldes mit statischer Größe,<br />
ein zeiger auf eine char variable benutzen... damit kann man auch [] benutzen und so^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539939</guid><dc:creator><![CDATA[Quellcode]]></dc:creator><pubDate>Wed, 02 Jul 2008 18:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 19:01:03 GMT]]></title><description><![CDATA[<p>noch besser wäre wohl ein vector&lt;char&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539968</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 02 Jul 2008 19:01:03 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Wed, 02 Jul 2008 19:12:39 GMT]]></title><description><![CDATA[<p>Eleganz in C++ bedeutet vermutlich Kapselung, generische Programmierung und raffinierter Einsatz der STL. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1539979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539979</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Wed, 02 Jul 2008 19:12:39 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 00:53:46 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>noch besser wäre wohl ein vector&lt;char&gt;.</p>
</blockquote>
<p>und schneller wäre es,wenn man die 'länge' der datei misst und ein char-feld mit halber größe der länge dieser datei erstellt<br />
vector ist für sowas doch overkill,eleganz hin oder her</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540143</guid><dc:creator><![CDATA[nutella and go]]></dc:creator><pubDate>Thu, 03 Jul 2008 00:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 01:36:10 GMT]]></title><description><![CDATA[<p>Um mal meine Vorredner aufzugreifen, man kann aus den beiden einzelnen Schritten, einlesen der Daten und anschließendes filtern, einen einzigen machen, das sähe dann zum Beispiel so aus:</p>
<pre><code class="language-cpp">int main()
{
    int laenge;
    ifstream datei;
    datei.open(&quot;Text.txt&quot;, ios:: binary);

// Länge der Textdatei ermitteln
    datei.seekg (0, ios::end);
    laenge = datei.tellg();
    datei.seekg (0, ios::beg);

    char zeichen[laenge/2];

    for(int i=0;i&lt;laenge;++i)
    {
        datei.get(zeichen[i]); //Einlesen eines Zeichens vom stream und speichern in zeichen
        datei.get();           //Einlesen eines weiteren Zeichens, aber wird nicht gespeichert
    }
</code></pre>
<p>Mhhh wollte eigentlich mit seekg() ein Zeichen überspringen, das hat aber irgendwie nicht so geklappt wie ich es mir gedacht hatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540145</guid><dc:creator><![CDATA[Nebukat]]></dc:creator><pubDate>Thu, 03 Jul 2008 01:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 03:02:02 GMT]]></title><description><![CDATA[<p>Quellcode schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char* tmp = .... // einlesenfunktion
int size = sizeof(tmp) / sizeof(char); // ich glaub string hat eigenen size Operator
char *tmp2;
for (int i=0; i&lt;size; i+=2)
{
    tmp2[i] = tmp[i];
}
</code></pre>
</blockquote>
<p>damit du nicht anfängst, so zu programmieren: das funktioniert nicht. sizeof liefert dir hier die größe von tmp, tmp ist ein char*, d.h. <code>sizeof(tmp) == sizeof(char*)</code> , idR &quot;4&quot;, <code>sizeof(char)</code> liefert dir immer &quot;1&quot;. der wahrscheinlichste (auf dem system, das du verwendest) inhalt von size ist also 4.<br />
übrigens reicht weiter unten dann tmp[j] = '\0'.</p>
<p>Nebukat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// Länge der Textdatei ermitteln
    datei.seekg (0, ios::end);
    laenge = datei.tellg();
    datei.seekg (0, ios::beg);

    char zeichen[laenge/2];
</code></pre>
</blockquote>
<p>das wird auch nicht funktionieren, weil laenge/2 erst zur laufzeit berechnet werden kann und in C++ arrays, deren größe erst dann feststeht, mit new[] angefordert werden müssen (und dann mit delete[] freigegeben).</p>
<p>warum nicht einen container, z.b. <code>std::string</code> ?</p>
<pre><code class="language-cpp">int main()
{
   ifstream fin(&quot;test&quot;);

   string text;

   for (char tmp = fin.get(); fin; fin &gt;&gt; tmp)
   {
      if (fin &gt;&gt; tmp)
         text.push_back(tmp);
   }

   cout &lt;&lt; text &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1540150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540150</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 03 Jul 2008 03:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 03:43:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ifstream datei;
  datei.open(&quot;Text.txt&quot;, ios:: binary);

// Länge der Textdatei ermitteln
   datei.seekg (0, ios::end);
   vector&lt;char&gt; vData(datei.tellg();/2);
   datei.seekg (0, ios::beg);

    for(;datei ;datei.get())
        datei.get(vData[i]); //Einlesen jedes zweiten zeichen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1540151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540151</guid><dc:creator><![CDATA[MorgenStund]]></dc:creator><pubDate>Thu, 03 Jul 2008 03:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 08:59:35 GMT]]></title><description><![CDATA[<p>ich will auch meinen Senf dazu geben <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>
<pre><code class="language-cpp">std::ifstream file( &quot;file.txt&quot;, std::ios::ate );
int size = file.tellg();
file.seekg(0, std::ios::beg);
char * content = new char[size];
file.read( content, size );
char * halfcontent = new char[ size / 2 ];
for( int i = 0; i &lt; size; i+= 2 )
{
    halfcontent[ i / 2 ] = content[ i ];
}
delete [] content;
std::cout &lt;&lt; halfcontent &lt;&lt; std::flush;
delete [] halfcontent;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1540246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540246</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Thu, 03 Jul 2008 08:59:35 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 09:05:16 GMT]]></title><description><![CDATA[<p>bitte löschen war versehentlich ein doppelpost</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540249</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Thu, 03 Jul 2008 09:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 13:17:27 GMT]]></title><description><![CDATA[<p>Habs hingekriegt, vielen Dank an alle!:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1540431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540431</guid><dc:creator><![CDATA[Programmier-Legastheniker]]></dc:creator><pubDate>Thu, 03 Jul 2008 13:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Nur jedes zweite Zeichen aus einem File... on Thu, 03 Jul 2008 13:25:47 GMT]]></title><description><![CDATA[<p>Erhard Henkes schrieb:</p>
<blockquote>
<p>Eleganz in C++ bedeutet vermutlich Kapselung, generische Programmierung und raffinierter Einsatz der STL. <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>
</blockquote>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iterator&gt;

template&lt; typename T, typename In &gt;
struct IncTwice : std::iterator&lt; std::input_iterator_tag, T &gt;
{
    explicit IncTwice( In p ) : m_p( p ) {}
    IncTwice&amp; operator++()
    {
        ++m_p; ++m_p;   // zwei mal inkrementieren
        return *this;
    }
    T operator*() const { return *m_p; }
    bool operator!=( const IncTwice&amp; b ) const
    {
        return m_p != b.m_p;
    }
private:
    In m_p;
};
template&lt; typename T, typename In &gt;
IncTwice&lt; T, In &gt; incTwice( In out )
{
    return IncTwice&lt; T, In &gt;( out );
}

int main()
{
    using namespace std;
    ifstream quelle( &quot;input.txt&quot; );
    ofstream ziel( &quot;output.txt&quot; );
    copy(   incTwice&lt; char &gt;( istreambuf_iterator&lt; char &gt;( quelle ) ), 
            incTwice&lt; char &gt;( istreambuf_iterator&lt; char &gt;() ),
            ostreambuf_iterator&lt; char &gt;( ziel ) );
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1540438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1540438</guid><dc:creator><![CDATA[Elegant]]></dc:creator><pubDate>Thu, 03 Jul 2008 13:25:47 GMT</pubDate></item></channel></rss>