<?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[Stringstream to Int64_t]]></title><description><![CDATA[<p>Hallo an alle!<br />
Ich habe eine Frage: Ich möchte einen gegebenen Stringstream in ein int64_t convertieren.<br />
Ansich geht das ja ganz einfach:</p>
<pre><code>stringstream ss;
    int64_t nummer = 0;
ss &gt;&gt; nummer;
</code></pre>
<p>Bisher habe ich das immer so gemacht und das hat auch funktioniert, aber jetzt mekkert er rum:</p>
<pre><code class="language-cpp">int main(int argc, char *argv[])
{
    ifstream file;
    char     zeile[1024];
    std::string str = &quot;meinedatei.txt&quot;;
    char * filename = new char[str.size() + 1];
    std::copy(str.begin(), str.end(), filename);
    filename[str.size()] = '\0';
    int zaehler = 0;
    string s;
    stringstream ss;
    int64_t nummer = 0;
    int64_t zeitSub = 0;
    int64_t zeit_Pub = 0;
    int64_t nummern = 0;

    file.open(filename, ios::in);// Datei öffnen

    if (file.good())// Wenn die Datei geoeffnet werden konnte
    {

        file.seekg(0L, ios::beg); // An den Anfang der Datei springen

        while (! file.eof()){
            // Die Datei zeilenweise auslesen
            file.getline(zeile, 1024);
            cout &lt;&lt; zeile &lt;&lt; endl;
            zaehler = 0 ;
            while(zeile[zaehler] != ';'){
            	if(zeile[zaehler] != ':' &amp;&amp; zeile[zaehler] != ','){
            		s += zeile[zaehler];
            		 cout &lt;&lt; &quot;Aktueller String: &quot; &lt;&lt; s &lt;&lt; endl;
            	}else{
            		ss.str(s);
            		cout &lt;&lt; &quot;Stringstream: &quot; &lt;&lt; ss.str() &lt;&lt; endl;
            		if(nummer !=0 &amp;&amp; zeitSub != 0) {
            			cout &lt;&lt; &quot;Fall 3!&quot; &lt;&lt;endl;
            			ss &gt;&gt; zeit_Pub; 
            			cout &lt;&lt; &quot;Pub Zeit: &quot; &lt;&lt; zeit_Pub &lt;&lt; endl;} 
            		if(nummer !=0 &amp;&amp; zeitSub == 0) {
            			cout &lt;&lt; &quot;Fall 2!&quot; &lt;&lt;endl;
            			ss &gt;&gt; zeitSub;
            			cout &lt;&lt; &quot;Sub Zeit: &quot; &lt;&lt; zeitSub &lt;&lt;  endl;}
            		if(nummer == 0) {
            			cout &lt;&lt; &quot;Fall 1!&quot; &lt;&lt;endl;
            			ss &gt;&gt; nummer; 
            			cout &lt;&lt; ss.str()&lt;&lt; endl;
            			ss &gt;&gt; nummern;
            			cout &lt;&lt; &quot;Nummer: &quot; &lt;&lt; nummer &lt;&lt;&quot;sss&quot; &lt;&lt; nummern &lt;&lt; endl;}
            		s = &quot;&quot;;
            		ss &lt;&lt; &quot;&quot;;
            	}	
            	zaehler++;
            }//while(zeile[zaehler] != ';')
/*    		cout &lt;&lt; &quot;Stringstream: &quot; &lt;&lt; ss.str() &lt;&lt; endl;
    		cout &lt;&lt; &quot;Nummer: &quot; &lt;&lt; nummer &lt;&lt; endl;
    		cout &lt;&lt; &quot;Sub Zeit: &quot; &lt;&lt; zeit_Sub &lt;&lt; endl;
    		cout &lt;&lt; &quot;Pub Zeit: &quot; &lt;&lt; zeit_Pub &lt;&lt; endl;*/
        }//while (! file.eof())
    }
    else // Wenn die Datei nicht geoeffnet werden konnte
    {      
        cout &lt;&lt; &quot;Datei nicht gefunden.&quot; &lt;&lt; endl;
    }

    return 0;
}
</code></pre>
<p>Die Ausgabe sieht wie folgt aus:</p>
<blockquote>
<p>122:1322947545256,1322947545244; &lt;--- das steht in der .txt<br />
Aktueller String: 1<br />
Aktueller String: 12<br />
Aktueller String: 122<br />
Stringstream: 122<br />
Fall 1!<br />
122<br />
Nummer: 122sss0</p>
</blockquote>
<p>Die Frage die ich habe: wieso macht er den cast ss &gt;&gt; nummer korrekt, aber 2 codezeilen später ss &gt;&gt; nummern nichtmehr ???<br />
Ich hab mir den stringstream wie ihr sehr zwischendurch auch ausgebenlassen um zu sehn ob er vllt. gelehrt wird, dem ist aber nicht so.<br />
Kann mir da jemand helfen ?</p>
<p>Viele Grüße<br />
Alfred</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296617/stringstream-to-int64_t</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 21:00:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296617.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Dec 2011 14:00:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stringstream to Int64_t on Thu, 08 Dec 2011 14:00:07 GMT]]></title><description><![CDATA[<p>Hallo an alle!<br />
Ich habe eine Frage: Ich möchte einen gegebenen Stringstream in ein int64_t convertieren.<br />
Ansich geht das ja ganz einfach:</p>
<pre><code>stringstream ss;
    int64_t nummer = 0;
ss &gt;&gt; nummer;
</code></pre>
<p>Bisher habe ich das immer so gemacht und das hat auch funktioniert, aber jetzt mekkert er rum:</p>
<pre><code class="language-cpp">int main(int argc, char *argv[])
{
    ifstream file;
    char     zeile[1024];
    std::string str = &quot;meinedatei.txt&quot;;
    char * filename = new char[str.size() + 1];
    std::copy(str.begin(), str.end(), filename);
    filename[str.size()] = '\0';
    int zaehler = 0;
    string s;
    stringstream ss;
    int64_t nummer = 0;
    int64_t zeitSub = 0;
    int64_t zeit_Pub = 0;
    int64_t nummern = 0;

    file.open(filename, ios::in);// Datei öffnen

    if (file.good())// Wenn die Datei geoeffnet werden konnte
    {

        file.seekg(0L, ios::beg); // An den Anfang der Datei springen

        while (! file.eof()){
            // Die Datei zeilenweise auslesen
            file.getline(zeile, 1024);
            cout &lt;&lt; zeile &lt;&lt; endl;
            zaehler = 0 ;
            while(zeile[zaehler] != ';'){
            	if(zeile[zaehler] != ':' &amp;&amp; zeile[zaehler] != ','){
            		s += zeile[zaehler];
            		 cout &lt;&lt; &quot;Aktueller String: &quot; &lt;&lt; s &lt;&lt; endl;
            	}else{
            		ss.str(s);
            		cout &lt;&lt; &quot;Stringstream: &quot; &lt;&lt; ss.str() &lt;&lt; endl;
            		if(nummer !=0 &amp;&amp; zeitSub != 0) {
            			cout &lt;&lt; &quot;Fall 3!&quot; &lt;&lt;endl;
            			ss &gt;&gt; zeit_Pub; 
            			cout &lt;&lt; &quot;Pub Zeit: &quot; &lt;&lt; zeit_Pub &lt;&lt; endl;} 
            		if(nummer !=0 &amp;&amp; zeitSub == 0) {
            			cout &lt;&lt; &quot;Fall 2!&quot; &lt;&lt;endl;
            			ss &gt;&gt; zeitSub;
            			cout &lt;&lt; &quot;Sub Zeit: &quot; &lt;&lt; zeitSub &lt;&lt;  endl;}
            		if(nummer == 0) {
            			cout &lt;&lt; &quot;Fall 1!&quot; &lt;&lt;endl;
            			ss &gt;&gt; nummer; 
            			cout &lt;&lt; ss.str()&lt;&lt; endl;
            			ss &gt;&gt; nummern;
            			cout &lt;&lt; &quot;Nummer: &quot; &lt;&lt; nummer &lt;&lt;&quot;sss&quot; &lt;&lt; nummern &lt;&lt; endl;}
            		s = &quot;&quot;;
            		ss &lt;&lt; &quot;&quot;;
            	}	
            	zaehler++;
            }//while(zeile[zaehler] != ';')
/*    		cout &lt;&lt; &quot;Stringstream: &quot; &lt;&lt; ss.str() &lt;&lt; endl;
    		cout &lt;&lt; &quot;Nummer: &quot; &lt;&lt; nummer &lt;&lt; endl;
    		cout &lt;&lt; &quot;Sub Zeit: &quot; &lt;&lt; zeit_Sub &lt;&lt; endl;
    		cout &lt;&lt; &quot;Pub Zeit: &quot; &lt;&lt; zeit_Pub &lt;&lt; endl;*/
        }//while (! file.eof())
    }
    else // Wenn die Datei nicht geoeffnet werden konnte
    {      
        cout &lt;&lt; &quot;Datei nicht gefunden.&quot; &lt;&lt; endl;
    }

    return 0;
}
</code></pre>
<p>Die Ausgabe sieht wie folgt aus:</p>
<blockquote>
<p>122:1322947545256,1322947545244; &lt;--- das steht in der .txt<br />
Aktueller String: 1<br />
Aktueller String: 12<br />
Aktueller String: 122<br />
Stringstream: 122<br />
Fall 1!<br />
122<br />
Nummer: 122sss0</p>
</blockquote>
<p>Die Frage die ich habe: wieso macht er den cast ss &gt;&gt; nummer korrekt, aber 2 codezeilen später ss &gt;&gt; nummern nichtmehr ???<br />
Ich hab mir den stringstream wie ihr sehr zwischendurch auch ausgebenlassen um zu sehn ob er vllt. gelehrt wird, dem ist aber nicht so.<br />
Kann mir da jemand helfen ?</p>
<p>Viele Grüße<br />
Alfred</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154623</guid><dc:creator><![CDATA[Dark_Alfred]]></dc:creator><pubDate>Thu, 08 Dec 2011 14:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to Stringstream to Int64_t on Thu, 08 Dec 2011 14:26:15 GMT]]></title><description><![CDATA[<p>Erstmal vorneweg: das ist keine Konvertierung die der stringstream tut. Er ließt einfach nur eine Zahl ein. Wenn, dann &quot;konvertierung eines strings&quot;</p>
<p>Aber zurück:</p>
<p>Was soll da noch kommen? in &quot;s&quot; steht nur &quot;122&quot; drin und die hast du in &quot;nummer&quot; eingelesen. Du kannst nichts mehr weiter über den stringstream einlesen, da du bereits am Ende des Strigns angelangt bist. Du musst wohl erstmal mehr einlesen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154634</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 08 Dec 2011 14:26:15 GMT</pubDate></item><item><title><![CDATA[Reply to Stringstream to Int64_t on Thu, 08 Dec 2011 14:33:12 GMT]]></title><description><![CDATA[<p>Ah ok, d.h. wenn ich quasi &quot;nummer&quot; eingelesen habe und dann &quot;nummern&quot; einlesen möchte (da sollte testweise quasi am ende das gleiche drinstehn wie bei nummer) muss ich ihm erst sagen das er wieder an den anfang des stringstreams gehen muss?<br />
Ok das sollte erstma Info genug sein, damit bekom ich es sicher hin!<br />
Danke <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/2154639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154639</guid><dc:creator><![CDATA[Dark_Alfred]]></dc:creator><pubDate>Thu, 08 Dec 2011 14:33:12 GMT</pubDate></item><item><title><![CDATA[Reply to Stringstream to Int64_t on Thu, 08 Dec 2011 15:19:34 GMT]]></title><description><![CDATA[<p>Vielleicht noch etwas weniger gefummel mir ohen Arrays:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;

struct replacer
{
    replacer(std::string const &amp; to_replace) : m_to_replace(to_replace){}
    bool operator()(char c) const{ return std::find(m_to_replace.begin(), m_to_replace.end(), c) != m_to_replace.end(); }
    std::string m_to_replace;
};

int main(int argc, char *argv[])
{
    int64_t nummer = 0;
    int64_t zeitSub = 0;
    int64_t zeit_Pub = 0;
    int64_t nummern = 0;
    std::string str = &quot;meinedatei.txt&quot;; //oder gleich direkt im stream angeben...
    ifstream reader(str.c_str()); 
    std::string line;
    while(std::getline(reader, line))
    {
        std::cout &lt;&lt; &quot;Current line: &quot; &lt;&lt; line &lt;&lt; std::endl;
        //alle trennzeichen durch leerzeichen austauschen
        std::replace_if(line.begin(), line.end(), replacer(&quot;,:;&quot;), ' ');
        std::istringstream isstr(line);
        int64_t current = 0;
        while(isstr &gt;&gt; current)
        {
            if(nummer == 0)
            {
                nummer == current;
                isstr &gt;&gt; nummern;
            }
            else
            {
                if(zeitSub == 0)
                {
                    zeitSub = current;
                }
                else
                {
                    zeit_Pub = current;
                }
            }
        }
        std::cout 
            &lt;&lt; &quot;Parse line result: \n&quot;
            &lt;&lt; &quot;  nummer   : &quot; &lt;&lt; nummer &lt;&lt; '\n'
            &lt;&lt; &quot;  nummern  : &quot; &lt;&lt; nummern &lt;&lt; '\n'
            &lt;&lt; &quot;  zeitSub  : &quot; &lt;&lt; zeitSub &lt;&lt; '\n'
            &lt;&lt; &quot;  zeit_Pub : &quot; &lt;&lt; zeit_Pub &lt;&lt; std::endl;

    }
}
</code></pre>
<p>Außerdem: Bist Du Dir sicher, dass die Logik, nach der nummer, zeitSub und zeit_Pub zugewiesen werden so richtig ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154667</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 08 Dec 2011 15:19:34 GMT</pubDate></item></channel></rss>