<?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[Neue Nummerierung- text lesen und bearbeiten]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe hier ein Programm welches neu nummeriert!<br />
Also z.B. sieht der Textfile so aus:</p>
<p>0 GGGG<br />
3 GGGG<br />
2 GGGG</p>
<p>Die Zahlen sollen dann incremental um 1 ausgegeben werden:<br />
Nun kann es sein das die erste Zeile aber mit % beginnt, dann soll nichts passieren. Zudem kann es sein das das erste Zeichen ein '/' oder 'N' ist. Die sollen auch beibehalten werden<br />
z.B. :<br />
%<br />
N6 GGGG<br />
N9 FFFF<br />
Soll:<br />
%<br />
N1 GGGG<br />
N2 FFFF</p>
<p>hier mein Quellcode wo wahrscheinlich noch ein Fehler ist: Und hoffe mir kann wieder jemand helfen??!!<br />
Tut mir leid wenn ich nicht raffe wie man diesen richtig hier einfügt<br />
Vielen Dank!! Matthi</p>
<pre><code class="language-cpp">[cpp][code]#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;

int main(int argc,char *argv[])
{
        using std::string;

        if(argc &lt; 3)
        {
                std::cerr &lt;&lt; &quot;Nicht genügend Argumente!\n&quot;;
                return -1;
        }

        string helpname = std::string( argv[1] ) + argv[2];
		//string helpname = &quot;Test&quot;;

        string filename = helpname + &quot;.mpf&quot;;
        string filename2 = helpname + &quot;-copie.mpf&quot;;

        std::ifstream datei( filename.c_str() ); 
        std::ofstream datei2( filename2.c_str() );

		for (std::string zeile ; getline(datei,zeile)  {
			datei2 &lt;&lt; zeile &lt;&lt; '\n'; //statt endl '\n'
		}

		datei.close();
		datei2.close();

		std::ifstream datei3( filename2.c_str() ); 
		std::ofstream datei4( filename.c_str() );

		for (std::string zeile2 ; getline(datei3,zeile2)  {
                if ( !zeile2.empty() ) 
                {
                        if (zeile2[0] != ' ' || zeile2[0] != ';')
                        {
                                std::ostringstream osstream;

                                if (zeile2[0] == '/')
                                        osstream &lt;&lt; '/'; 
                                if (zeile2[0] == 'N')
                                        osstream &lt;&lt; 'N';

                                static size_t SeqNum(0);
                                osstream &lt;&lt; ++SeqNum;

                                string str3 = zeile2.substr( zeile2.find(&quot; &quot;) );

                                datei4 &lt;&lt; osstream.str() + str3 &lt;&lt; '\n'; 
                        }
                        else
                                datei4 &lt;&lt; zeile2 &lt;&lt; '\n'; //statt endl '\n'
                }
		}

			datei3.close();
			datei4.close();
			//rename(filename.c_str(), filename2.c_str());
			remove(filename2.c_str());

}
</code></pre>
<p>[/code][/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309359/neue-nummerierung-text-lesen-und-bearbeiten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 06:36:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309359.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Oct 2012 12:29:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Neue Nummerierung- text lesen und bearbeiten on Sun, 21 Oct 2012 12:29:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe hier ein Programm welches neu nummeriert!<br />
Also z.B. sieht der Textfile so aus:</p>
<p>0 GGGG<br />
3 GGGG<br />
2 GGGG</p>
<p>Die Zahlen sollen dann incremental um 1 ausgegeben werden:<br />
Nun kann es sein das die erste Zeile aber mit % beginnt, dann soll nichts passieren. Zudem kann es sein das das erste Zeichen ein '/' oder 'N' ist. Die sollen auch beibehalten werden<br />
z.B. :<br />
%<br />
N6 GGGG<br />
N9 FFFF<br />
Soll:<br />
%<br />
N1 GGGG<br />
N2 FFFF</p>
<p>hier mein Quellcode wo wahrscheinlich noch ein Fehler ist: Und hoffe mir kann wieder jemand helfen??!!<br />
Tut mir leid wenn ich nicht raffe wie man diesen richtig hier einfügt<br />
Vielen Dank!! Matthi</p>
<pre><code class="language-cpp">[cpp][code]#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;

int main(int argc,char *argv[])
{
        using std::string;

        if(argc &lt; 3)
        {
                std::cerr &lt;&lt; &quot;Nicht genügend Argumente!\n&quot;;
                return -1;
        }

        string helpname = std::string( argv[1] ) + argv[2];
		//string helpname = &quot;Test&quot;;

        string filename = helpname + &quot;.mpf&quot;;
        string filename2 = helpname + &quot;-copie.mpf&quot;;

        std::ifstream datei( filename.c_str() ); 
        std::ofstream datei2( filename2.c_str() );

		for (std::string zeile ; getline(datei,zeile)  {
			datei2 &lt;&lt; zeile &lt;&lt; '\n'; //statt endl '\n'
		}

		datei.close();
		datei2.close();

		std::ifstream datei3( filename2.c_str() ); 
		std::ofstream datei4( filename.c_str() );

		for (std::string zeile2 ; getline(datei3,zeile2)  {
                if ( !zeile2.empty() ) 
                {
                        if (zeile2[0] != ' ' || zeile2[0] != ';')
                        {
                                std::ostringstream osstream;

                                if (zeile2[0] == '/')
                                        osstream &lt;&lt; '/'; 
                                if (zeile2[0] == 'N')
                                        osstream &lt;&lt; 'N';

                                static size_t SeqNum(0);
                                osstream &lt;&lt; ++SeqNum;

                                string str3 = zeile2.substr( zeile2.find(&quot; &quot;) );

                                datei4 &lt;&lt; osstream.str() + str3 &lt;&lt; '\n'; 
                        }
                        else
                                datei4 &lt;&lt; zeile2 &lt;&lt; '\n'; //statt endl '\n'
                }
		}

			datei3.close();
			datei4.close();
			//rename(filename.c_str(), filename2.c_str());
			remove(filename2.c_str());

}
</code></pre>
<p>[/code][/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262490</guid><dc:creator><![CDATA[Matthi70]]></dc:creator><pubDate>Sun, 21 Oct 2012 12:29:03 GMT</pubDate></item><item><title><![CDATA[Reply to Neue Nummerierung- text lesen und bearbeiten on Sun, 21 Oct 2012 13:47:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;

int main(int argc,char *argv[])
{
    using std::string;

    if(argc &lt; 3)
    {
        std::cerr &lt;&lt; &quot;Nicht genügend Argumente!\n&quot;;
        return -1;
    }

    string helpname = std::string( argv[1] ) + argv[2];
    //string helpname = &quot;Test&quot;;

    string filename = helpname + &quot;.mpf&quot;;
    string filename2 = helpname + &quot;-copie.mpf&quot;;

    std::ifstream datei( filename.c_str() );
    std::ofstream datei2( filename2.c_str() );

    for (std::string zeile ; getline(datei,zeile) {
        datei2 &lt;&lt; zeile &lt;&lt; '\n'; //statt endl '\n'
    }

    datei.close();
    datei2.close();

    std::ifstream datei3( filename2.c_str() );
    std::ofstream datei4( filename.c_str() );

for (std::string zeile2 ; getline(datei3,zeile2) {
    if ( !zeile2.empty() )
    {
        if (zeile2[0] != ' ' || zeile2[0] != ';')
        {
            std::ostringstream osstream;

            if (zeile2[0] == '/')
                osstream &lt;&lt; '/';
            if (zeile2[0] == 'N')
                osstream &lt;&lt; 'N';

            static size_t SeqNum(0);
            osstream &lt;&lt; ++SeqNum;

            string str3 = zeile2.substr( zeile2.find(&quot; &quot;) );

            datei4 &lt;&lt; osstream.str() + str3 &lt;&lt; '\n';
        }
        else
            datei4 &lt;&lt; zeile2 &lt;&lt; '\n'; //statt endl '\n'
    }
}

    datei3.close();
    datei4.close();
    //rename(filename.c_str(), filename2.c_str());
    remove(filename2.c_str());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2262503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262503</guid><dc:creator><![CDATA[sourcecode]]></dc:creator><pubDate>Sun, 21 Oct 2012 13:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Neue Nummerierung- text lesen und bearbeiten on Sun, 21 Oct 2012 14:28:23 GMT]]></title><description><![CDATA[<p>Matthi70 schrieb:</p>
<blockquote>
<p>Hallo zusammen,</p>
<p>habe hier ein Programm welches neu nummeriert!<br />
Also z.B. sieht der Textfile so aus:</p>
<p>0 GGGG<br />
3 GGGG<br />
2 GGGG</p>
<p>Die Zahlen sollen dann incremental um 1 ausgegeben werden:<br />
Nun kann es sein das die erste Zeile aber mit % beginnt, dann soll nichts passieren. Zudem kann es sein das das erste Zeichen ein '/' oder 'N' ist. Die sollen auch beibehalten werden<br />
z.B. :<br />
%<br />
N6 GGGG<br />
N9 FFFF<br />
Soll:<br />
%<br />
N1 GGGG<br />
N2 FFFF</p>
<p>hier mein Quellcode wo wahrscheinlich noch ein Fehler ist: Und hoffe mir kann wieder jemand helfen??!!<br />
Tut mir leid wenn ich nicht raffe wie man diesen richtig hier einfügt<br />
Vielen Dank!! Matthi</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;

int main(int argc,char *argv[])
{
    using std::string;
    if(argc &lt; 3)
    {
        std::cerr &lt;&lt; &quot;Nicht genügend Argumente!\n&quot;;
        return -1;
    }

    string helpname = std::string( argv[1] ) + argv[2];
    //string helpname = &quot;Test&quot;;

    string filename = helpname + &quot;.mpf&quot;;
    string filename2 = helpname + &quot;-copie.mpf&quot;;

    std::ifstream datei( filename.c_str() ); 
    std::ofstream datei2( filename2.c_str() );

    for (std::string zeile ; getline(datei,zeile)  {
        datei2 &lt;&lt; zeile &lt;&lt; '\n'; //statt endl '\n'
    }

    datei.close();
    datei2.close();

    std::ifstream datei3( filename2.c_str() ); 
    std::ofstream datei4( filename.c_str() );

    for (std::string zeile2 ; getline(datei3,zeile2)  {
        if ( !zeile2.empty() ) 
        {
            if (zeile2[0] != ' ' || zeile2[0] != ';')
            {
                std::ostringstream osstream;

                if (zeile2[0] == '/')
                    osstream &lt;&lt; '/'; 
                if (zeile2[0] == 'N')
                    osstream &lt;&lt; 'N';

                static size_t SeqNum(0);
                osstream &lt;&lt; ++SeqNum;

                string str3 = zeile2.substr( zeile2.find(&quot; &quot;) );

                datei4 &lt;&lt; osstream.str() + str3 &lt;&lt; '\n'; 
            }
            else
                datei4 &lt;&lt; zeile2 &lt;&lt; '\n'; //statt endl '\n'
        }
    }
    datei3.close();
    datei4.close();
    //rename(filename.c_str(), filename2.c_str());
    remove(filename2.c_str());
}
</code></pre>
</blockquote>
<p>Hallo Matthi,</p>
<p>Wenn Du meinst, dass da ein ansonsten ein Fehler drin ist, solltest Du uns noch einen Tipp geben wie sich der Fehler äußert. Zumindest hast Du in den Zeilen 24 und 34 vergessen, den for-Ausdruck zu schließen. Richtig muss es heißen:</p>
<pre><code class="language-cpp">for (std::string zeile ; getline(datei,zeile); )  { // Zeile 24
    for (std::string zeile2 ; getline(datei3,zeile2); )  { // Zeile 34
</code></pre>
<p>Zudem kann man einiges Vereinfachen - hilft dann auch beim Fehlersuchen. Auf das close kannst Du verzichten, wenn Du das Code-Segment in einen eigenen Scope packst - das schafft Übersicht. Auch brauchst Du beim Kopieren einer Datei nicht Zeile für Zeile kopieren, sondern im Stück.<br />
So können die Zeilen 21 bis 29 etwa so aussehen:</p>
<pre><code class="language-cpp">{
        std::ifstream datei( filename.c_str() ); 
        std::ofstream datei2( filename2.c_str() );
        datei2 &lt;&lt; datei.rdbuf();
    }
</code></pre>
<p>Das Einlesen einer ganzen Zeile in einen String ist auch überflüssig. Es reicht doch das erste Zeichen zu lesen, alles bis zum Leerraum überlesen und dann den Rest der Zeile zu kopieren. Etwa so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;limits&gt; // std::numeric_limits&lt;&gt;

int main(int argc,char *argv[])
{
    using std::string;
    if(argc &lt; 3)
    {
        std::cerr &lt;&lt; &quot;Nicht genügend Argumente!\n&quot;;
        return -1;
    }

    string helpname = std::string( argv[1] ) + argv[2];
    //string helpname = &quot;Test&quot;;

    string filename = helpname + &quot;.mpf&quot;;
    string filename2 = helpname + &quot;-copie.mpf&quot;;

    {   // --   copy filename -&gt; filename2
        std::ifstream datei( filename.c_str() ); 
        std::ofstream datei2( filename2.c_str() );
        datei2 &lt;&lt; datei.rdbuf();
    }

    {   // --   Inhalt aus 'filename2' nach 'filename' neu durchnummeriert
        const std::streamsize ALL = std::numeric_limits&lt; std::streamsize &gt;::max();
        std::size_t SeqNum = 0; // besser vorher initialisiern, als static
        std::ifstream datei3( filename2.c_str() ); 
        std::ofstream datei4( filename.c_str() );
        for( char c; datei3 &gt;&gt; c; )
        {
            if( c == ';' || c == '%' )  // ; oder % ??
            {
                datei3.ignore( ALL, '\n' );
                continue; // Zeilen mit ';' am Anfang werden ignoriert
            }
            if( c == '/' || c == 'N' ) // oder auch: if( !isdigit( c ) )
                datei4 &lt;&lt; c; // in diesem Fällen erstes Zeichen mit übernehmen
            datei3.ignore( ALL, ' ' ); // Nummer überspringen
            datei4 &lt;&lt; ++SeqNum &lt;&lt; &quot; &quot;;

            string rest_der_zeile;
            if( getline( datei3, rest_der_zeile ) )
                datei4 &lt;&lt; rest_der_zeile &lt;&lt; '\n';
        }
    } // &lt;-- close geht hier automatisch
    remove(filename2.c_str());
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262510</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 21 Oct 2012 14:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to Neue Nummerierung- text lesen und bearbeiten on Sun, 21 Oct 2012 14:32:03 GMT]]></title><description><![CDATA[<p>Du hast zwar keine Frage gestellt, was nicht funktioniert.<br />
Du hast auch nicht geschrieben was passiert.</p>
<p>Aber ich denke die Zeile <code>if (zeile2[0] != ' ' || zeile2[0] != ';')</code> macht nicht das, was du erwartest.</p>
<p>Wenn zeile2[0] ein ';' ist, dann ist es trotzdem ungleich einem Leerzeichen. Also ist diese Bedingung immer wahr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2262511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2262511</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Sun, 21 Oct 2012 14:32:03 GMT</pubDate></item></channel></rss>