<?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 Vektoren und Auslesen einer Textdatei]]></title><description><![CDATA[<p>Ich habe mir grade eine Funktion geschrieben, um mir Datei aus einer Textdatei auszulesen. Diese sieht so aus:</p>
<pre><code>\tx  \ty
1\t432\t234
2\t424\t798
</code></pre>
<p>Das '\t' soll einen Tab-darstellen.</p>
<p>Ich lese die File so aus:</p>
<pre><code>ifstream xyCoordinatesIfS;
	xyCoordinatesIfS.open(path,ios::in);
	vector &lt;string&gt; lineT (100);
	int i = 1;
	while ( getline(xyCoordinatesIfS,lineT[i], '\t')) {
		if (i &gt; 3 &amp;&amp; i % 2 == 0 ) {
			cout &lt;&lt; lineT[i] &lt;&lt; &quot;\t&quot; &lt;&lt; i &lt;&lt; endl;   //Die hier ist gemeint
		}
		i++;
	}
	xyCoordinatesIfS.close();
	lineT.shrink_to_fit();
	int test = lineT.size();
	cout &lt;&lt; test &lt;&lt; endl;
</code></pre>
<p>Bie der Anzeige in der Konsole bekomme ich immer nur den x-Wert, obwole eig. auch der y-Wert, getrennt von einem \n enthalten sein müsse. Dies weiss ich, weil wenn man das modulo entfernt, kann man dies sehen.<br />
Die Ausgabe mit modulo lautet bei der obigen bsp. Datei:</p>
<pre><code>432    4
424    6
</code></pre>
<p>ohne Modulo:</p>
<pre><code>432    4
234
2      5
424    6
798
</code></pre>
<p>Kann es nun sein, das das 234 und 798 aus der Wert 6,5 oder so liegt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":O"
      alt="😮"
    /> (ich weiss gibt es nicht, aber ich hoffe ihr wisst, was mich meine)</p>
<p>So meine zweite Frage ist , wie man den Vektor auf seine besetzten Elemente verkleinen kann. Also bei der obigen Datei 6 anstatt der 100, die ich bei der Initialisierung angegeben habe, denn ohne geht es nicht.</p>
<p>IDE ist MS VC++ Express auf Win7</p>
<p>Ich hoffe ihr könnt mir weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313014/problem-mit-vektoren-und-auslesen-einer-textdatei</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 08:35:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313014.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Jan 2013 17:35:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sat, 19 Jan 2013 17:35:28 GMT]]></title><description><![CDATA[<p>Ich habe mir grade eine Funktion geschrieben, um mir Datei aus einer Textdatei auszulesen. Diese sieht so aus:</p>
<pre><code>\tx  \ty
1\t432\t234
2\t424\t798
</code></pre>
<p>Das '\t' soll einen Tab-darstellen.</p>
<p>Ich lese die File so aus:</p>
<pre><code>ifstream xyCoordinatesIfS;
	xyCoordinatesIfS.open(path,ios::in);
	vector &lt;string&gt; lineT (100);
	int i = 1;
	while ( getline(xyCoordinatesIfS,lineT[i], '\t')) {
		if (i &gt; 3 &amp;&amp; i % 2 == 0 ) {
			cout &lt;&lt; lineT[i] &lt;&lt; &quot;\t&quot; &lt;&lt; i &lt;&lt; endl;   //Die hier ist gemeint
		}
		i++;
	}
	xyCoordinatesIfS.close();
	lineT.shrink_to_fit();
	int test = lineT.size();
	cout &lt;&lt; test &lt;&lt; endl;
</code></pre>
<p>Bie der Anzeige in der Konsole bekomme ich immer nur den x-Wert, obwole eig. auch der y-Wert, getrennt von einem \n enthalten sein müsse. Dies weiss ich, weil wenn man das modulo entfernt, kann man dies sehen.<br />
Die Ausgabe mit modulo lautet bei der obigen bsp. Datei:</p>
<pre><code>432    4
424    6
</code></pre>
<p>ohne Modulo:</p>
<pre><code>432    4
234
2      5
424    6
798
</code></pre>
<p>Kann es nun sein, das das 234 und 798 aus der Wert 6,5 oder so liegt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":O"
      alt="😮"
    /> (ich weiss gibt es nicht, aber ich hoffe ihr wisst, was mich meine)</p>
<p>So meine zweite Frage ist , wie man den Vektor auf seine besetzten Elemente verkleinen kann. Also bei der obigen Datei 6 anstatt der 100, die ich bei der Initialisierung angegeben habe, denn ohne geht es nicht.</p>
<p>IDE ist MS VC++ Express auf Win7</p>
<p>Ich hoffe ihr könnt mir weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291397</guid><dc:creator><![CDATA[Crysis_02]]></dc:creator><pubDate>Sat, 19 Jan 2013 17:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sat, 19 Jan 2013 19:49:12 GMT]]></title><description><![CDATA[<p>Problem gelöst!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291424</guid><dc:creator><![CDATA[Crysis_02]]></dc:creator><pubDate>Sat, 19 Jan 2013 19:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sun, 20 Jan 2013 12:26:52 GMT]]></title><description><![CDATA[<p>Hallo Crysis_02,</p>
<p>ich schließe aus der von Dir beschriebenen Ausgabe, dass die Datei so aussieht:</p>
<pre><code>x	y
	432	234
	424	798
</code></pre>
<p>also ohne die Nummerierung am Anfang der Zeile.<br />
Wobei als Trennzeichen der Tabulator benutzt wird, was aber für das Einlesen irrelevant ist.<br />
Ich unterstelle weiter, dass Du an den Zahlen (Koordinaten) interessiert bist, und diese nicht als Strings brauchst. Dann wäre das eine brauchbare Lösung:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;limits&gt; // numeric_limits
#include &lt;vector&gt;

struct XY // diese Struktur nimmt eine Koordinate auf
{
    int x_, y_;
};

int main()
{
    using namespace std;
    vector&lt; XY &gt; coordinates; // leeren(!) Container anlegen
    const char* path=&quot;input.txt&quot;;
    ifstream xyCoordinatesIfS( path ); // ios::in ist überflüssig, wg. (I)fstream
    if( !xyCoordinatesIfS.is_open() )
    {
        cerr &lt;&lt; &quot;Fehler beim Oeffnen von &quot; &lt;&lt; path &lt;&lt; endl;
        return -2;
    }
    xyCoordinatesIfS.ignore( numeric_limits&lt; streamsize &gt;::max(), '\n' ); // erste Zeile überlesen
    for( XY c; xyCoordinatesIfS &gt;&gt; c.x_ &gt;&gt; c.y_; ) // Koordinaten als ZAHLEN lesen
        coordinates.push_back( c ); // push_back fügt ein Element hinzu
    if( xyCoordinatesIfS.eof() ) // bis EOF, dann ok
    {
        cout &lt;&lt; &quot;Ok; &quot; &lt;&lt; coordinates.size() &lt;&lt; &quot; Koordinaten gelesen&quot; &lt;&lt; endl;
    }
    else
        cerr &lt;&lt; &quot;Lesefehler&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Du brauchst den Vektor auch nicht verkleinern - schon gar nicht mit <a href="http://www.cplusplus.com/reference/vector/vector/shrink_to_fit/" rel="nofollow">shrink_to_fit()</a> - das macht was anderes. <a href="http://www.cplusplus.com/reference/vector/vector/" rel="nofollow">std::vector</a> ist eine dynamische Datenstruktur, die z.B. mit <a href="http://www.cplusplus.com/reference/vector/vector/push_back/" rel="nofollow">push_back</a> sukzessive vergrößert wird. Die Methode <a href="http://www.cplusplus.com/reference/vector/vector/size/" rel="nofollow">size()</a> gibt Dir dann die Anzahl der im vector enthaltenen Elemente zurück.</p>
<p>Um das Einlesen etwas eleganter zu gestalten, kannst Du noch für die struct XY einen Streamingoperator hinzufügen:</p>
<pre><code>std::istream&amp; operator&gt;&gt;( std::istream&amp; in, XY&amp; c )
{
    return in &gt;&gt; c.x_ &gt;&gt; c.y_;
}
</code></pre>
<p>dann vereinfacht sich Zeile 23 zu</p>
<pre><code>for( XY c; xyCoordinatesIfS &gt;&gt; c; )
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291587</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 20 Jan 2013 12:26:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sun, 20 Jan 2013 17:33:14 GMT]]></title><description><![CDATA[<p>Nee. Die Datei hat vorne noch die Zahlen.</p>
<pre><code>X	Y
1	287	454
2	587	789
</code></pre>
<p>zur Zeit habe ich es so gelöst.</p>
<pre><code>vector &lt;int&gt; solarCoordinateTransformation::GetXYCoordinates(string path) {
	ifstream xyCoordinatesIfS;
	xyCoordinatesIfS.open(path,ios::in);
	vector &lt;string&gt; lineV (10);
	int b = 0;
	if (xyCoordinatesIfS.is_open())
	{
		//Hier mit den Limits?
		while(!xyCoordinatesIfS.eof()) {
			lineV.resize(b+1);
			xyCoordinatesIfS &gt;&gt; lineV[b];
			b++;
		}
	}
	xyCoordinatesIfS.close();
	int test = lineV.size();
	int VectorSize = lineV.size()-3;
	int VectorS = VectorSize/3*2;
	vector &lt;string&gt; line (VectorS);
	int e = 0;
	int f = 1;
	for (int d = 0; d &lt; lineV.size() -1; d++) {
		if (d &gt; 2) {
			if (f != 3) {
				line[e] = lineV[d];
				e++;
				f++;
			} else {
				f = 1;
			}
		}
	}
	vector &lt;int&gt; returnValue (line.size());
	for (int h = 0; h &lt; line.size(); h++) {
		returnValue[h] = atoi(line[h].c_str());
	}
	return returnValue;
}
</code></pre>
<p>Jedoch finde ich das mit den &quot;limits&quot; sehr cool. Wo muss ich dies jedoch in meinem code hinschreiben? Hab mal oben nen Kommentar reingemacht, wo ich denke, wo es hinkommt <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>
<p>Ich weiss es sieht nicht so gut aus, aber er funktioniert bei einer gewissen Ordnerstrunktur, die ich überall habe. Das Programm ist ja nur für mich ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291689</guid><dc:creator><![CDATA[Crysis_02]]></dc:creator><pubDate>Sun, 20 Jan 2013 17:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sun, 20 Jan 2013 18:29:51 GMT]]></title><description><![CDATA[<p>Hallo Crysis_02,</p>
<p>Crysis_02 schrieb:</p>
<blockquote>
<p>Nee. Die Datei hat vorne noch die Zahlen.</p>
<pre><code>X	Y
1	287	454
2	587	789
</code></pre>
</blockquote>
<p>Dann erweitere die Zeile 23 in meinem ersten Posting zu:</p>
<pre><code>int nr;
    for( XY c; xyCoordinatesIfS &gt;&gt; nr &gt;&gt; c.x_ &gt;&gt; c.y_; ) // Koordinaten als ZAHLEN lesen
</code></pre>
<p>Crysis_02 schrieb:</p>
<blockquote>
<p>zur Zeit habe ich es so gelöst. ...</p>
<p>Jedoch finde ich das mit den &quot;limits&quot; sehr cool. Wo muss ich dies jedoch in meinem code hinschreiben? Hab mal oben nen Kommentar reingemacht, wo ich denke, wo es hinkommt <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>ja genau da, Du musst natürlich den Code dahinter entsprechend anpassen. Suche hier im Forum mal nach <a href="http://www.c-plusplus.net/forum/p2281397#2281397" rel="nofollow">skipline</a>.</p>
<p>Crysis_02 schrieb:</p>
<blockquote>
<p>Ich weiss es sieht nicht so gut aus, aber er funktioniert bei einer gewissen Ordnerstrunktur, die ich überall habe. Das Programm ist ja nur für mich ^^</p>
</blockquote>
<p>Nein, es funktioniert nicht. Und zwar genau dann nicht, wenn hinter der letzten Zahl kein Zeilenende, sondern bereits ein EOF steht. Probier's aus.</p>
<p>Ursache dafür ist zum einen der sehr verbreitete Fehler auf EOF statt auf Fail abzufragen und zum anderen die wahrlich kryptische Methode, wie Du die Strings weiter verarbeitest. Du benötigst drei Container für das Einlesen - nötig wäre maximal einer.<br />
Ganz einfache Regel: lese das was Du brauchst - nur das und mit dem richtigen Typ (was sonst).</p>
<pre><code>vector &lt;int&gt; solarCoordinateTransformation::GetXYCoordinates(string path) {
    ifstream xyCoordinatesIfS;
    xyCoordinatesIfS.open(path,ios::in); // ios::in ist überflüssig, das ist bereits ein i(nput)fstream
    vector &lt;string&gt; lineV (10); // diese Vorbelegung ist überflüssig und fehlerträchtig
    int b = 0;
    if (xyCoordinatesIfS.is_open())
    {
        //Hier mit den Limits?
        while(!xyCoordinatesIfS.eof()) { // NACH(!) dem Lesen immer auf !fail() abfragen -&gt; endlos-Loop bei Lesefehler und undefiniertes Ende
            lineV.resize(b+1); // Oje - Performance-loch
            xyCoordinatesIfS &gt;&gt; lineV[b]; // Du brauchst Zahlen, warum dann Texte lesen?
            b++;
        }
    }
    xyCoordinatesIfS.close(); // überflüssig
    int test = lineV.size();
    int VectorSize = lineV.size()-3;
    int VectorS = VectorSize/3*2; // wenn hier jetzt der letzte String fehlt (s.o.), ist 'VectorS' um 1 zu klein -&gt; Programmfehler

    // der Code der hier kommt, wäre überflüssig, wenn Du gleich nur das liest, was benötigt wird
    // das würde auch das Code-Verständnis wesentlich erhöhen
    vector &lt;string&gt; line (VectorS);
    int e = 0;
    int f = 1;
    for (int d = 0; d &lt; lineV.size() -1; d++) {
        if (d &gt; 2) {
            if (f != 3) {
                line[e] = lineV[d];
                e++; // gewöhne Dir prefix statt postfix an.
                f++;
            } else {
                f = 1;
            }
        }
    }
    vector &lt;int&gt; returnValue (line.size());
    for (int h = 0; h &lt; line.size(); h++) {
        returnValue[h] = atoi(line[h].c_str());
    }
    return returnValue;
}
</code></pre>
<p>Du fährst sicher mit mit einer Struktur XY besser, als die Koordinaten X und Y hinter einander in einen vector&lt;int&gt; zu schreiben.<br />
Und GetXYCoordinates macht als Methode keinen Sinn, da sie weder lesend noch schreibend auf irgendwelche Klassenmeber zugreift. Mache daraus besser eine Funktion.</p>
<p>Crysis_02 schrieb:</p>
<blockquote>
<p>Das Programm ist ja nur für mich ^^</p>
</blockquote>
<p>Trotzdem sollte es korrekt sein und kürzere Programme lassen sich auch einfacher lesen - auch von einem selbst.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291724</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 20 Jan 2013 18:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sun, 20 Jan 2013 18:41:11 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Suche hier im Forum mal nach <a href="http://www.c-plusplus.net/forum/p2281397#2281397" rel="nofollow">skipline</a>.</p>
</blockquote>
<p>Es gibt so viele nette Helfer von dir, aber ich habe leider keinen Überblick.</p>
<p>Gibt es irgendwo Werners IO-Suite, in der sie alle zentral aufgelistet sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291730</guid><dc:creator><![CDATA[bathsebas]]></dc:creator><pubDate>Sun, 20 Jan 2013 18:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sun, 20 Jan 2013 20:24:37 GMT]]></title><description><![CDATA[<p>Danke. der Code ist echt fürzer und besser zu verstehen ^^</p>
<p>Jedoch gind das mit den limits nicht. Hab jetzt einfach 100 eingegeben. Reicht auf jeden Fall.</p>
<p>Sieht jetzt so aus:</p>
<pre><code>vector &lt;XY&gt; solarCoordinateTransformation::GetXYCoordinates(string path) {
	ifstream xyCoordinates;
	vector &lt;XY&gt; coordinates;
	int nr;
	xyCoordinates.open(path);
	if(xyCoordinates.is_open()) {
		xyCoordinates.ignore(100 /*numeric_limits&lt; streamsize &gt;::max()*/, '\n' ); // erste Zeile überlesen
		for( XY c; xyCoordinates &gt;&gt; nr &gt;&gt; c.x &gt;&gt; c.y; ) // Koordinaten als ZAHLEN lesen
			coordinates.push_back( c ); // push_back fügt ein Element hinzu
		//if( xyCoordinates.eof() ) // bis EOF, dann ok
		//{
		//	cout &lt;&lt; &quot;Ok; &quot; &lt;&lt; coordinates.size() &lt;&lt; &quot; Koordinaten gelesen&quot; &lt;&lt; endl;
		//}
		//else {
		//	cerr &lt;&lt; &quot;Lesefehler&quot; &lt;&lt; endl;
		//}
	}
	return coordinates;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2291747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291747</guid><dc:creator><![CDATA[Crysis_02]]></dc:creator><pubDate>Sun, 20 Jan 2013 20:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sun, 20 Jan 2013 21:27:16 GMT]]></title><description><![CDATA[<p>Crysis_02 schrieb:</p>
<blockquote>
<p>Jedoch ging das mit den limits nicht.</p>
</blockquote>
<p>Hallo Crysis_02,</p>
<p>.. mögliche Ursachen: Du hast ein <code>#include &lt;limits&gt;</code> vergesen, oder Du arbeitest mit dem Visual Studio und hast oben ein <code>#include &lt;windows.h&gt;</code> oder <code>#include &lt;stdafx.h&gt;</code> stehen. Im letzteren Fall füge als erste Zeile in <code>stdafx.h</code> oder in Deinem Sourcefile vor <code>windows.h</code> , falls Du kein <code>stdafx.h</code> benutzt, ein <a href="http://support.microsoft.com/kb/143208/de" rel="nofollow">#define NOMINMAX</a> ein.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291758</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 20 Jan 2013 21:27:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Sun, 20 Jan 2013 22:44:40 GMT]]></title><description><![CDATA[<p>Ja benutze die windows.h</p>
<p>Werde es morge probieren. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2291777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2291777</guid><dc:creator><![CDATA[Crysis_02]]></dc:creator><pubDate>Sun, 20 Jan 2013 22:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vektoren und Auslesen einer Textdatei on Tue, 22 Jan 2013 16:16:55 GMT]]></title><description><![CDATA[<p>super jetzt geht alles <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292360</guid><dc:creator><![CDATA[Crysis_02]]></dc:creator><pubDate>Tue, 22 Jan 2013 16:16:55 GMT</pubDate></item></channel></rss>