<?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[Aus Datei in Array schreiben]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe noch weitere Probleme mit dem ganzen File-Streams Gedöns. Ich öffne eine Datei zum Lesen:</p>
<pre><code class="language-cpp">ifstream inf1(inFile1.c_str()),
</code></pre>
<p>In dieser Datei befinden sich einfach nur Zahlen. Der Dateiinhalt könnte folglich so aussehen:</p>
<pre><code>125324564
</code></pre>
<p>Nun möchte ich jede Ziffer in einem integer Array speichern. Dazu müsste ich wissen, wieviele Zifern in der Datei sind und wie ich Ziffer für Ziffer auslesen kann und einem dynamich erzeugten int Array zuweisen kann.</p>
<p>Ich weiß jedoch nicht, wie ich Ziffern- bzw. Zeichenanzahl der Datei bestimmen kann. Das dynamische Array kann ich erzeugen. Doch wie weise ich dann den Elementen jede Ziffer einzeln zu?</p>
<p>Könnt ihr mir da nochmal helfen?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271147/aus-datei-in-array-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 15:54:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271147.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Jul 2010 13:51:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 13:51:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe noch weitere Probleme mit dem ganzen File-Streams Gedöns. Ich öffne eine Datei zum Lesen:</p>
<pre><code class="language-cpp">ifstream inf1(inFile1.c_str()),
</code></pre>
<p>In dieser Datei befinden sich einfach nur Zahlen. Der Dateiinhalt könnte folglich so aussehen:</p>
<pre><code>125324564
</code></pre>
<p>Nun möchte ich jede Ziffer in einem integer Array speichern. Dazu müsste ich wissen, wieviele Zifern in der Datei sind und wie ich Ziffer für Ziffer auslesen kann und einem dynamich erzeugten int Array zuweisen kann.</p>
<p>Ich weiß jedoch nicht, wie ich Ziffern- bzw. Zeichenanzahl der Datei bestimmen kann. Das dynamische Array kann ich erzeugen. Doch wie weise ich dann den Elementen jede Ziffer einzeln zu?</p>
<p>Könnt ihr mir da nochmal helfen?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930716</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Fri, 23 Jul 2010 13:51:35 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 14:02:06 GMT]]></title><description><![CDATA[<p>Nimm vector&lt;int&gt; und push_back.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930722</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 23 Jul 2010 14:02:06 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 14:07:14 GMT]]></title><description><![CDATA[<p>Gedankenanstoß:</p>
<pre><code class="language-cpp">char *fptr;
// file pointer auf anfang der datei und um bspw. um 4 inkrementieren bei 
// 4 byte integer
// anzahl der zahlen entspr. size / 4

while(!amEndeDerDatei)
{
  int i = (int)*(fptr);
  fptr += 4;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1930726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930726</guid><dc:creator><![CDATA[krabbels]]></dc:creator><pubDate>Fri, 23 Jul 2010 14:07:14 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 14:06:00 GMT]]></title><description><![CDATA[<p>Ich würde die Elemente in einer Liste wie z.B. Vector speichern. Das hat den Vorteil, dass du einfach Elemente anhängen kannst und nicht bei der Erzeugung des Vector-Objekts wissen musst, wie viele Elemente du speichern wirst.</p>
<p>Dann könntest du den Inhalt der Datei byteweise auslesen und in den Vector speichern.</p>
<pre><code class="language-cpp">vector&lt;int&gt; Zahlen;

while(true)
{
    char tmp;
    inf1.get(tmp);
    if(inf1.eof())break;
    Zahlen.push_back(atoi(tmp));
}

// Die Anzahl der Zahlen kannst du mit Zahlen.size() ermitteln.
// Zugriff auf einzelne Elemente ist mithilfe des []-operators möglich.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1930728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930728</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Fri, 23 Jul 2010 14:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 14:07:30 GMT]]></title><description><![CDATA[<p>Ich würde auch vector&lt;int&gt; nehmen.</p>
<p>Aber wenns denn unbedingt ein dynamisch erzeugtes Array sein soll, weiß zwar nicht warum, aber dann speicher doch alles in nem Vektor und schau mit .size() wie groß er ist, dann hast die anzahl und dann kannst ja vom vektor aus in eine dynamisches Array kopieren. Auch wenn das ganze unlogisch ist.</p>
<p>Aber wie volkard schon sagt, nehm doch einfach nen vektor.</p>
<p>Gruß freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930729</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Fri, 23 Jul 2010 14:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 15:36:35 GMT]]></title><description><![CDATA[<p>Hallo,<br />
super, ich weiß jetzt wie ich es mache. Doch krabbels Denkanstoß habe ich nicht ganz verstanden. Kannst Du den noch etwas ausweiten, weil mich die Variante mit einem Pointer interessiert.</p>
<p>Ich suche nämlich noch eine Methode, um die Anzahl der Zeichen zu bestimmen. Ihr bestimmt einfach die Größe des Vectors. Klar, das kann ich machen, doch kann ich irgendwas durch die Datei &quot;laufen&quot; lassen, bis das Dateiende erreicht worden ist?</p>
<pre><code class="language-cpp">while(!inf1.eof())
	{
		//geh ein Zeichen weiter
		len1++;
	}
</code></pre>
<p>Entspricht das krabbels Tipp? Ich weiß nur nicht, wie man &quot;durch die Datei geht&quot;. Wie soll das mit einem Zeiger möglich sein oder muss ich get() benutzen?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930766</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Fri, 23 Jul 2010 15:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 15:43:30 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Der Dateiinhalt könnte folglich so aussehen:</p>
<pre><code>125324564
</code></pre>
<p>Nun möchte ich jede Ziffer in einem integer Array speichern. Dazu müsste ich wissen, wieviele Zifern in der Datei sind ...</p>
</blockquote>
<p>Musst Du nicht wissen. Man liest einfach Ziffer für Ziffer und steckt sie in einen Container. Und mit jeder Ziffer wird der Container um 1 größer.</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>... und wie ich Ziffer für Ziffer auslesen kann</p>
</blockquote>
<p>Das ist schon etwas schwieriger, da die Ziffer nun mal Ziffern und keine Zahlen sind. Ich tue zunächst mal so, als seinen es Zahlen. Dann geht es z.B. so:</p>
<pre><code class="language-cpp">vector&lt; int &gt; ziffern;

    string inFile1 = &quot;input.txt&quot;;
    ifstream inf1(inFile1.c_str());
    for( int ziffer; inf1 &gt;&gt; ziffer; )
        ziffern.push_back( ziffer );
    if( inf1.eof() )
    {
        cout &lt;&lt; &quot;Datei bis zum Ende gelesen; &quot; &lt;&lt; ziffern.size() &lt;&lt; &quot; Ziffern gelesen&quot; &lt;&lt; endl;
        // usw...
</code></pre>
<p>Eine Zahl besteht aus einer Folge von Ziffern bis ein Zeichen auftaucht, welches keine Ziffer mehr ist oder EOF. Du willst aber die einzelnen Ziffern lesen. Dazu kann man sich ein Helferlein (hier read_ziffer) bauen, welches zunächst ein Zeichen liest und dieses in ein int wandelt. Also:</p>
<pre><code class="language-cpp">struct read_ziffer
{
    explicit read_ziffer( int&amp; ziffer )
        : m_ziffer( ziffer )
    {}
    friend std::istream&amp; operator&gt;&gt;( std::istream&amp; in, const read_ziffer&amp; rz )
    {
        char z;
        if( in &gt;&gt; z ) // einzelnes Zeichen lesen
        {
            if( z &gt;= '0' &amp;&amp; z &lt;= '9' )
                rz.m_ziffer = z - '0'; // Zeichen in Zahl umwandeln
            else
                in.setstate( std::ios_base::failbit ); // .. das war keine Ziffer, also Fehler
        }
        return in;
    }
private:
    read_ziffer&amp; operator=( read_ziffer&amp; ); // nur Compiler ruhigstellen

    int&amp; m_ziffer;
};
</code></pre>
<p>und die Zeile 5 wird geändert nach</p>
<pre><code class="language-cpp">for( int ziffer; inf1 &gt;&gt; read_ziffer( ziffer ); )
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930780</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 23 Jul 2010 15:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 16:01:54 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Doch krabbels Denkanstoß habe ich nicht ganz verstanden. Kannst Du den noch etwas ausweiten, weil mich die Variante mit einem Pointer interessiert.</p>
</blockquote>
<p>So einen char* fptr, der in eine Datei zeigt, gibt es nicht. Auch belegt ein int nicht zwingend 4 Zeichen in der Datei (zumindest nicht in einer Textdatei, und davon reden wir hier doch). Jede Ziffer liegt in einer Textdatei als Zeichen vor.</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich suche nämlich noch eine Methode, um die Anzahl der Zeichen zu bestimmen.</p>
</blockquote>
<p>Du musst schon klarer sagen, was Du willst. Die Ziffern, die Anzahl der Ziffern oder die Anzahl der Zeichen?</p>
<p>Anzahl der Zeichen geht so:</p>
<pre><code class="language-cpp">int anzahlZeichen = distance( istream_iterator&lt; char &gt;( inf1 ), istream_iterator&lt; char &gt;() ); // erfodert #include &lt;iterator&gt;
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930790</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 23 Jul 2010 16:01:54 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 17:28:04 GMT]]></title><description><![CDATA[<p>Hallo,<br />
vielen Dank! Ich werde mir den Lösungsvorschlag von Walter Salomon näher anschauen. Zuvor aber noch was ganz Banales:</p>
<pre><code class="language-cpp">while(true)
	{
		char tmp; 
		inf1.get(tmp); 
		if(inf1.eof()) 
			break;
		Zahlen.push_back(tmp); 
	}
</code></pre>
<p>Ich möchte, dass die Abbruchbedinung im Schleifenkopf steht, da ich solche Endlosschleifenkonstrukte nicht sonderlich mag. Falls ich jedoch die if Bedinung einfach in den Schleifenkopf packe, so wird immer ein Zeichen, welches dann nicht vorhanden ist, zuviel ausgelesen. Wie muss ich den Schleifenkopf anpassen?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930835</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Fri, 23 Jul 2010 17:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 19:58:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">while(!inf1.eof())
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1930885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930885</guid><dc:creator><![CDATA[=)]]></dc:creator><pubDate>Fri, 23 Jul 2010 19:58:40 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 21:23:17 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich werde mir den Lösungsvorschlag von Walter Salomon näher anschauen.</p>
</blockquote>
<p>Nix für ungut, aber vielleicht ist es besser, Du liest Dir erst mal die Antworten genau durch bevor Du neue Fragen stellst....</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>Zuvor aber noch was ganz Banales:</p>
<pre><code class="language-cpp">while(true)
	{
		char tmp; 
		inf1.get(tmp); 
		if(inf1.eof()) 
			break;
		Zahlen.push_back(tmp); 
	}
</code></pre>
<p>Ich möchte, dass die Abbruchbedinung im Schleifenkopf steht, da ich solche Endlosschleifenkonstrukte nicht sonderlich mag. Falls ich jedoch die if Bedinung einfach in den Schleifenkopf packe, so wird immer ein Zeichen, welches dann nicht vorhanden ist, zuviel ausgelesen. Wie muss ich den Schleifenkopf anpassen?</p>
</blockquote>
<p>Dazu nimmst Du das Listing, welches ich Dir bereits gepostet habe</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">vector&lt; int &gt; ziffern;

    string inFile1 = &quot;input.txt&quot;;
    ifstream inf1(inFile1.c_str());
    for( int ziffer; inf1 &gt;&gt; ziffer; )
        ziffern.push_back( ziffer );
    if( inf1.eof() )
    {
        cout &lt;&lt; &quot;Datei bis zum Ende gelesen; &quot; &lt;&lt; ziffern.size() &lt;&lt; &quot; Ziffern gelesen&quot; &lt;&lt; endl;
        // usw...
</code></pre>
</blockquote>
<p>und ersetzt in den Zeilen 1 und 5 int durch char, und schon hast Du die gewünschte Schleife, mit Abbruch am Schleifenkopf.</p>
<p>Und wieso eigentlich istream.get(char)? Du fragtest vorhin danach, wie man die Ziffern liest. Mit get() liest Du alle Zeichen inklusive 'Neue Zeile' usw.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930915</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 23 Jul 2010 21:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Fri, 23 Jul 2010 23:00:17 GMT]]></title><description><![CDATA[<p>Ds war mein fehler, mit dem get().<br />
Und wenn du die Bedingung nicht im Schleifenkopf haben willst, kannst du das so machen: (Ist jetzt aber noch schlimmer als vorher, wie ich finde <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>
<pre><code class="language-cpp">bool runloop = true;
while(runloop)
{
    char tmp;
    inf1.get(tmp);
    if(inf1.eof()){runloop=false;continue;}
    if(tmp&gt;='0'&amp;&amp;tmp&lt;='9')Zahlen.push_back(atoi(tmp));
}
</code></pre>
<p>Der Vergleich in Zeile 7 müsste funtionieren, es werden halt die Ordnungsnummern verglichen. Und das atoi muss da auch hin, sonst wird nur die Ordnungsnummer der Zahl in das array geschrieben.</p>
<p>MfG, Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930928</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Fri, 23 Jul 2010 23:00:17 GMT</pubDate></item><item><title><![CDATA[Reply to Aus Datei in Array schreiben on Sat, 24 Jul 2010 04:32:00 GMT]]></title><description><![CDATA[<p>Wenn man es einfach ohne Operatorüberladung und mit schönen Schleifenbedingungen haben will, macht man es einfach so:</p>
<pre><code class="language-cpp">std::ifstream file(&quot;test.txt&quot;); 
	vector&lt;int&gt; ziffern;
	char tmp;
	while(file.get(tmp))
	{
		if(isdigit(tmp))
		{
			ziffern.push_back(tmp-'0');
		}
	}
</code></pre>
<p>Wenn einer noch ne Funktion kennt, die aus einem char einen int macht, wäre es noch schöner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930940</guid><dc:creator><![CDATA[Prof. Dr. Einfach]]></dc:creator><pubDate>Sat, 24 Jul 2010 04:32:00 GMT</pubDate></item></channel></rss>