<?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[In die erste Zeile einer existierenden Datei schreiben ohne den Restinhalt zu löschen]]></title><description><![CDATA[<p>Hallo,</p>
<p>um mein Programm etwas schneller zu machen, wollte ich wissen wie man in eine existierende Datei am Anfang eine Zeile einfügen kann ohne den Rest der Datei zu überschreiben. Ist sowas möglich oder lohnt sich der durch Aufwand umkopieren nicht?</p>
<p>Aktuell sieht mein Code wie folgt aus ohne das ich versuche an den Anfang der Datei zu schreiben: M ist eine sparse Matrix vom Typ boost::numeric::ublas::compressed_matrix</p>
<pre><code>[cpp]
fstream f;
f.open(file, ios::out);
int number = M.nnz();
double val;
for(compressed_matrix&lt;double&gt;::const_iterator1 it = M.begin1(); it != M.end1(); ++it) {
        for(compressed_matrix&lt;double&gt;::const_iterator2 it2 = it.begin(); it2 != it.end(); ++it2) {
            val = M(it2.index1(),it2.index2());
	    if (abs(val) &gt; 1e-20) {
		f&lt;&lt;it2.index1()+1&lt;&lt;&quot;\t&quot;&lt;&lt;it2.index2()+1&lt;&lt;&quot;\t&quot;&lt;&lt;val&lt;&lt;endl;
	    } else {
		number--;
	    }
        }
}
[b]
f&lt;&lt;M.size1()&lt;&lt;&quot;\t&quot;&lt;&lt;M.size2()&lt;&lt;&quot;\t&quot;&lt;&lt;number&lt;&lt;endl;[/b]
[/cpp]
</code></pre>
<p>Der fett markierten Code sollte in der ersten Zeile meiner Datei stehen und danach der Rest folgen. Die integer Zahl number kenne ich aber erst nachdem ich die Matrix durchgelaufen bin. Ich will die Matrix aber nicht zweimal durchlaufen, um einmal number zu bestimmen und danach auszugeben. Wie lässt sich das Problem lösen?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303884/in-die-erste-zeile-einer-existierenden-datei-schreiben-ohne-den-restinhalt-zu-löschen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 02:54:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303884.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 24 May 2012 14:26:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In die erste Zeile einer existierenden Datei schreiben ohne den Restinhalt zu löschen on Thu, 24 May 2012 14:26:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>um mein Programm etwas schneller zu machen, wollte ich wissen wie man in eine existierende Datei am Anfang eine Zeile einfügen kann ohne den Rest der Datei zu überschreiben. Ist sowas möglich oder lohnt sich der durch Aufwand umkopieren nicht?</p>
<p>Aktuell sieht mein Code wie folgt aus ohne das ich versuche an den Anfang der Datei zu schreiben: M ist eine sparse Matrix vom Typ boost::numeric::ublas::compressed_matrix</p>
<pre><code>[cpp]
fstream f;
f.open(file, ios::out);
int number = M.nnz();
double val;
for(compressed_matrix&lt;double&gt;::const_iterator1 it = M.begin1(); it != M.end1(); ++it) {
        for(compressed_matrix&lt;double&gt;::const_iterator2 it2 = it.begin(); it2 != it.end(); ++it2) {
            val = M(it2.index1(),it2.index2());
	    if (abs(val) &gt; 1e-20) {
		f&lt;&lt;it2.index1()+1&lt;&lt;&quot;\t&quot;&lt;&lt;it2.index2()+1&lt;&lt;&quot;\t&quot;&lt;&lt;val&lt;&lt;endl;
	    } else {
		number--;
	    }
        }
}
[b]
f&lt;&lt;M.size1()&lt;&lt;&quot;\t&quot;&lt;&lt;M.size2()&lt;&lt;&quot;\t&quot;&lt;&lt;number&lt;&lt;endl;[/b]
[/cpp]
</code></pre>
<p>Der fett markierten Code sollte in der ersten Zeile meiner Datei stehen und danach der Rest folgen. Die integer Zahl number kenne ich aber erst nachdem ich die Matrix durchgelaufen bin. Ich will die Matrix aber nicht zweimal durchlaufen, um einmal number zu bestimmen und danach auszugeben. Wie lässt sich das Problem lösen?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2214944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2214944</guid><dc:creator><![CDATA[MasterG87]]></dc:creator><pubDate>Thu, 24 May 2012 14:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to In die erste Zeile einer existierenden Datei schreiben ohne den Restinhalt zu löschen on Mon, 28 May 2012 16:00:54 GMT]]></title><description><![CDATA[<p>Du kannst die Datei ja einfach auslesen, in einem string speichern.<br />
Dann ne Zeile hinzufügen &amp; das Ganze zurückspeichern,<br />
aber darauf bist du sicher gekommen <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">#include &quot;stdafx.h&quot;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;

using namespace std;

int main()
{
    string filename = &quot;datei.txt&quot;;
    string neuezeile;
    string zeile;
    string text;
    ifstream read;
    read.open(filename.c_str(), ios::in);
    while (!read.eof()){
        getline(read, neuezeile);
        text += neuezeile + &quot;\n&quot;;
    }
    read.close();
    cout &lt;&lt; &quot;Neue Zeile: &quot;;
    getline(cin, neuezeile);
    getchar();
    ofstream write;
    write.open(filename.c_str(), ios::out);
    write &lt;&lt; neuezeile+&quot;\n&quot;+text;
    write.close();
    cout &lt;&lt; &quot;ok&quot;;
    getchar();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2216380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216380</guid><dc:creator><![CDATA[virusscript24]]></dc:creator><pubDate>Mon, 28 May 2012 16:00:54 GMT</pubDate></item><item><title><![CDATA[Reply to In die erste Zeile einer existierenden Datei schreiben ohne den Restinhalt zu löschen on Mon, 28 May 2012 18:44:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28429">@MasterG87</a><br />
Du kannst an Dateien immer nur hinten was anhängen. Vorne anhängen geht nicht. In der Mitte einfügen geht auch nicht.<br />
D.h. du musst den gesamten Inhalt der Datei umkopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2216461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2216461</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 28 May 2012 18:44:30 GMT</pubDate></item></channel></rss>