<?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[Datensatz aus Datei ab bestimmter Stelle einlesen]]></title><description><![CDATA[<p>Hallo - das hier ist mein erster Post und ich bin nicht nur in dem Forum sondern auch im Geschäft des Programmierens neu und bitte deshalb um Nachsicht, sollte ich die Antwort auf meine Frage an anderer Stelle überlesen haben</p>
<p>Ich habe folgendes Problem:</p>
<pre><code>ofstream Output (&quot;Startvektoren.svr&quot;, ios::binary);				                   //Richtungsvektoren in Datei speichern:
for (unsigned int i=0; i&lt;m_unTeilchenzahl; i++)
	{
	Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i].x, sizeof (m_A_EmissionsRichtungsvektoren[i].x));
	Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i].y, sizeof (m_A_EmissionsRichtungsvektoren[i].y));
	Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i].z, sizeof (m_A_EmissionsRichtungsvektoren[i].z));
	};
Output.close();
</code></pre>
<p>speichert Richtungsvektoren in eine Datei. Das können ziemlich viele werden. Beim Auslesen behelfe ich mir zur Zeit noch mit</p>
<pre><code>ifstream Input (&quot;Startvektoren.svr&quot;, ios::binary);                              //Richtungsvektoren aus Datei laden
for (unsigned int i=1; i&lt;=unTeilchenNr; i++)										//bis zu aktuellem Vektor lesen
{
	Input.read ((char*) &amp;Vektor_current0, sizeof (Vektor_current0));
}
Input.close();
</code></pre>
<p>, denn ich brauche immer nur einen davon, um damit weitere Rechenschritte zu vollführen.<br />
Nur: wenn es 5.000.000 Stück werden, dann dauert das ne Zeit, es muss ja jeder Wert (eine Struktur aus .x, .y, .z) eingelesen werden, bis man irgendwann bei dem gewünschten ist. Dafür ist die Schleife. Und elegant ist das natürlich nicht.</p>
<p>Wie kann ich nun angeben, die ersten 3*8*x Bytes sollen übersprungen werden, damit ich direkt bei Byte x+1 lesen kann? (3*8, weil jede Struktur aus drei Doubles besteht)?</p>
<p>Grüße<br />
yofu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160442/datensatz-aus-datei-ab-bestimmter-stelle-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 06:22:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160442.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Sep 2006 20:48:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datensatz aus Datei ab bestimmter Stelle einlesen on Mon, 25 Sep 2006 21:31:58 GMT]]></title><description><![CDATA[<p>Hallo - das hier ist mein erster Post und ich bin nicht nur in dem Forum sondern auch im Geschäft des Programmierens neu und bitte deshalb um Nachsicht, sollte ich die Antwort auf meine Frage an anderer Stelle überlesen haben</p>
<p>Ich habe folgendes Problem:</p>
<pre><code>ofstream Output (&quot;Startvektoren.svr&quot;, ios::binary);				                   //Richtungsvektoren in Datei speichern:
for (unsigned int i=0; i&lt;m_unTeilchenzahl; i++)
	{
	Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i].x, sizeof (m_A_EmissionsRichtungsvektoren[i].x));
	Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i].y, sizeof (m_A_EmissionsRichtungsvektoren[i].y));
	Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i].z, sizeof (m_A_EmissionsRichtungsvektoren[i].z));
	};
Output.close();
</code></pre>
<p>speichert Richtungsvektoren in eine Datei. Das können ziemlich viele werden. Beim Auslesen behelfe ich mir zur Zeit noch mit</p>
<pre><code>ifstream Input (&quot;Startvektoren.svr&quot;, ios::binary);                              //Richtungsvektoren aus Datei laden
for (unsigned int i=1; i&lt;=unTeilchenNr; i++)										//bis zu aktuellem Vektor lesen
{
	Input.read ((char*) &amp;Vektor_current0, sizeof (Vektor_current0));
}
Input.close();
</code></pre>
<p>, denn ich brauche immer nur einen davon, um damit weitere Rechenschritte zu vollführen.<br />
Nur: wenn es 5.000.000 Stück werden, dann dauert das ne Zeit, es muss ja jeder Wert (eine Struktur aus .x, .y, .z) eingelesen werden, bis man irgendwann bei dem gewünschten ist. Dafür ist die Schleife. Und elegant ist das natürlich nicht.</p>
<p>Wie kann ich nun angeben, die ersten 3*8*x Bytes sollen übersprungen werden, damit ich direkt bei Byte x+1 lesen kann? (3*8, weil jede Struktur aus drei Doubles besteht)?</p>
<p>Grüße<br />
yofu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144334</guid><dc:creator><![CDATA[yofu]]></dc:creator><pubDate>Mon, 25 Sep 2006 21:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to Datensatz aus Datei ab bestimmter Stelle einlesen on Tue, 26 Sep 2006 07:10:23 GMT]]></title><description><![CDATA[<p>Erstmal ist es vermutlich besser, die gesamte Struktur auch mit einem einzigen write()-Aufruf zu schreiben (der Compiler könnte noch Leerbytes zwischen die Elemente setzen, um sie an den Speichergrenzen auszurichten).</p>
<p>Nun zu deinem Problem: Du kannst die Leseposition im Stream mit seekg() verschieben, um an deine Zielposition zu gelangen und den richtigen Datensatz rauszugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144442</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 26 Sep 2006 07:10:23 GMT</pubDate></item><item><title><![CDATA[Reply to Datensatz aus Datei ab bestimmter Stelle einlesen on Tue, 26 Sep 2006 09:41:22 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Erstmal ist es vermutlich besser, die gesamte Struktur auch mit einem einzigen write()-Aufruf zu schreiben (der Compiler könnte noch Leerbytes zwischen die Elemente setzen, um sie an den Speichergrenzen auszurichten).</p>
<p>Nun zu deinem Problem: Du kannst die Leseposition im Stream mit seekg() verschieben, um an deine Zielposition zu gelangen und den richtigen Datensatz rauszugreifen.</p>
</blockquote>
<p>Danke für die Antwort, CStoll!<br />
Die write-Schleife speichert ja nach und nach ein Array von Strukturen. Ich hatte damit bislang keine Probleme, werde es jedoch umstellen, um den Algorithmus in weniger Schritten zu realisieren - es könnte ja Auswirkungen auf die Geschwindigkeit haben.<br />
seekg() schaue ich mir mal an, ein Erfahrungsbericht folgt an dieser Stelle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144553</guid><dc:creator><![CDATA[yofu]]></dc:creator><pubDate>Tue, 26 Sep 2006 09:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to Datensatz aus Datei ab bestimmter Stelle einlesen on Tue, 26 Sep 2006 09:44:15 GMT]]></title><description><![CDATA[<p>yofu schrieb:</p>
<blockquote>
<p>Die write-Schleife speichert ja nach und nach ein Array von Strukturen. Ich hatte damit bislang keine Probleme, werde es jedoch umstellen, um den Algorithmus in weniger Schritten zu realisieren - es könnte ja Auswirkungen auf die Geschwindigkeit haben.</p>
</blockquote>
<p>Gegen die Schleife an sich habe ich auch nichts einzuwenden - nur solltest du die drei write()-Aufrufe IN der Schleife zu einem zusammenfassen:</p>
<pre><code class="language-cpp">for (unsigned int i=0; i&lt;m_unTeilchenzahl; i++)
    {
    Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i], sizeof (m_A_EmissionsRichtungsvektoren[i]));
    };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1144555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144555</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 26 Sep 2006 09:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Datensatz aus Datei ab bestimmter Stelle einlesen on Tue, 26 Sep 2006 10:10:36 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>yofu schrieb:</p>
<blockquote>
<p>Die write-Schleife speichert ja nach und nach ein Array von Strukturen. Ich hatte damit bislang keine Probleme, werde es jedoch umstellen, um den Algorithmus in weniger Schritten zu realisieren - es könnte ja Auswirkungen auf die Geschwindigkeit haben.</p>
</blockquote>
<p>Gegen die Schleife an sich habe ich auch nichts einzuwenden - nur solltest du die drei write()-Aufrufe IN der Schleife zu einem zusammenfassen:</p>
<pre><code class="language-cpp">for (unsigned int i=0; i&lt;m_unTeilchenzahl; i++)
    {
    Output.write ((const char*) &amp;m_A_EmissionsRichtungsvektoren[i], sizeof (m_A_EmissionsRichtungsvektoren[i]));
    };
</code></pre>
</blockquote>
<p>Ja - da hat sich ne unsinnige Verkomplizierung eingeschlichen 8).<br />
Das funktioniert blendend, genau wie sie es geschrieben haben. Und das gilt auch für seekg(). Ich verneige mein Haupt! <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>
<pre><code class="language-cpp">ifstream StartVektorInput;													//Richtungsvektoren aus Datei laden
StartVektorInput.open(&quot;Startvektoren.svr&quot;, ios::binary);                     

StartVektorInput.seekg (3*8*(unTeilchenNr-1));                              // vorskippen auf Position des derzeitigen Vektors (Struktur aus 3 doubles)
StartVektorInput.read ((char*) &amp;Vektor_current0, sizeof (Vektor_current0));

StartVektorInput.close();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1144578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144578</guid><dc:creator><![CDATA[yofu]]></dc:creator><pubDate>Tue, 26 Sep 2006 10:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to Datensatz aus Datei ab bestimmter Stelle einlesen on Tue, 26 Sep 2006 10:29:33 GMT]]></title><description><![CDATA[<p>Jetzt solltest du noch das &quot;3*8&quot; ersetzen durch sizeof(vector_t), dann ist es schon fast perfekt <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/1144594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144594</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 26 Sep 2006 10:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Datensatz aus Datei ab bestimmter Stelle einlesen on Tue, 26 Sep 2006 11:20:37 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Jetzt solltest du noch das &quot;3*8&quot; ersetzen durch sizeof(vector_t), dann ist es schon fast perfekt <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>
</blockquote>
<p>Zu Befehl! Dann habe ich wenigsten 5 perfekte Zeilen in dem Programm <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="😃"
    /> (...und noch was gelernt).</p>
<p>hier nochmal die ganze Herrlichkeit:</p>
<pre><code class="language-cpp">ifstream StartVektorInput;													//bestimmten Vektor(Struktur) aus Datei laden
StartVektorInput.open(&quot;Startvektoren.svr&quot;, ios::binary);                     

StartVektorInput.seekg (sizeof(Vektor_current0)*(unTeilchenNr-1));           // vorskippen auf Position des gesuchten Vektors
StartVektorInput.read ((char*) &amp;Vektor_current0, sizeof (Vektor_current0));

StartVektorInput.close();
</code></pre>
<p>und vielen Dank! Klasse Forum hier!<br />
Nun hoffe ich dass ich auch mal Fragen finde, die anfängerhaft genug sind, dass ICH sie beantworten kann, aber das gestaltet sich gar nicht einfach (und wenn doch, bin ich nicht schnell genug).</p>
<p>Grüße<br />
yofu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1144607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1144607</guid><dc:creator><![CDATA[yofu]]></dc:creator><pubDate>Tue, 26 Sep 2006 11:20:37 GMT</pubDate></item></channel></rss>