<?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[Schnelles Einlesen großer Datenmengen: Welches Dateiformat?]]></title><description><![CDATA[<p>Tag,</p>
<p>ich habe Punktkoordinaten (x y z), die wie folgt angeordnet in einer Datei abgelegt werden sollen:<br />
x1 y1 z1<br />
x2 y2 z3<br />
...<br />
xn yn zn</p>
<p>Dabei ist n bis zu 1.000.000 oder mehr. Welches Dateiformat ist für solche Datenmengen geeignet? Sollte ein schnelles Einlesen der Daten zeilenweise erfolgen?</p>
<p>DANKE!<br />
V.K.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186024/schnelles-einlesen-großer-datenmengen-welches-dateiformat</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 06:57:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186024.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jul 2007 08:24:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 08:24:46 GMT]]></title><description><![CDATA[<p>Tag,</p>
<p>ich habe Punktkoordinaten (x y z), die wie folgt angeordnet in einer Datei abgelegt werden sollen:<br />
x1 y1 z1<br />
x2 y2 z3<br />
...<br />
xn yn zn</p>
<p>Dabei ist n bis zu 1.000.000 oder mehr. Welches Dateiformat ist für solche Datenmengen geeignet? Sollte ein schnelles Einlesen der Daten zeilenweise erfolgen?</p>
<p>DANKE!<br />
V.K.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317981</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Wed, 04 Jul 2007 08:24:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 08:29:39 GMT]]></title><description><![CDATA[<p>Ich würde einen STL-Container (vector&lt;&gt; oder list&lt;&gt; - je nachdem, wie schnell/oft du das i-te Element der Sammlung benötigst bzw. die Sammlung zur Laufzeit umbauen willst) zur Speicherung der Punktesammlung verwenden (die drei Werte xi, yi und zi werden dabei zu einer Klasse Punkt zusammengefasst).</p>
<p>Und vermutlich würde ich die Daten komplett einlesen und anschließend im Speicher verwalten. (aber das kommt ganz darauf an, was du mit den Daten vorhast)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317985</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 Jul 2007 08:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 08:31:00 GMT]]></title><description><![CDATA[<p>Wenn es maximale Performance sein soll, dann ist &quot;nur&quot; ein binäres Format angebracht. Sobald es textuell wird, wird es langsamer. Richtig langsam dürfte wohl sowas wie XML sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317986</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 04 Jul 2007 08:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 08:33:57 GMT]]></title><description><![CDATA[<p>Hallo CStolll,</p>
<p>würdest du das ganze dann mit einer Textdatei machen? Oder ist das Dateiformat eigentlich egal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317987</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Wed, 04 Jul 2007 08:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 08:42:18 GMT]]></title><description><![CDATA[<p>CStoll sprach von der verwaltung der Daten im Speicher.. nach dem lesen aus der datei!</p>
<p>Die frage ist nun ob du die daten erst komplett einliest in den speicher, und dann damit arbeitste was sehr schnell ist..</p>
<p>Wenn du aber mit den daten direkt aus der datei arbeiten willst, dann &quot;binär&quot; datei verwenden..</p>
<p>und die nächste frage ist, wie oft du diese &quot;großen&quot; dateimengen in dateien schreiben bzw. lesen willst.. wenn du sie einmal liest, damit im speicehr arbeitest, ist es evtl. irrelevant..vom dateiforamt her</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317988</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 04 Jul 2007 08:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 08:44:07 GMT]]></title><description><![CDATA[<p>VerbalKint schrieb:</p>
<blockquote>
<p>würdest du das ganze dann mit einer Textdatei machen? Oder ist das Dateiformat eigentlich egal?</p>
</blockquote>
<p>Das kommt darauf an <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="😉"
    /><br />
Wenn du mit den Daten auch außerhalb deines Programms etwas anfangen willst (z.B. dir mit dem Wordpad eine Punktesammlung zusammenschreiben), bleibt nur Textformat.<br />
Wenn du die Daten <em>nur</em> im Programm verarbeiten willst, dürfte eine Binärdatei geeigneter sein (ein Punkt besteht aus drei int's oder double's und braucht damit binär genau 3*sizeof(koord_type) Byte (in Textform schwankt die Größe zwischen 6 und ca. 30 Byte je nach Inhalt).</p>
<p>PS: Mein Name hat übrigens nur zwei L <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/1317990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317990</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 Jul 2007 08:44:07 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 11:59:49 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich habe eure Hinweise mal verarbeitet und das ist dabei herausgekommen. Ich würde mich sehr freuen, wenn Ihr mir Verbesserungsvorschläge unterbreitet, wie man es effizienter / schneller machen kann, damit ich was dazu lernen kann <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>1.Daten in Datei schreiben:</p>
<pre><code class="language-cpp">std::fstream filename;
    filename.open(&quot;data.dat&quot;,std::ios::out|std::ios::binary);
    if (filename.is_open())
    {
        for (i=0;i&lt;itsAnz;i++)
        {
            itsPkt[i].x = Umkehr(rand()%2)*rand()%grenze;
            itsPkt[i].y = Umkehr(rand()%2)*rand()%grenze/1000.0;

            itsPkt[i].z =  itsParam[0] +
                           itsParam[1]*itsPkt[i].x +
                           itsParam[2]*itsPkt[i].y;

            filename &lt;&lt; itsPkt[i].x &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].y &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].z &lt;&lt; &quot;\n&quot;; // '\n' ist hier wahrscheinlich falsch  :confused: 
        }
        filename.close();
    }
</code></pre>
<p>2.Daten aus Datei lesen:</p>
<pre><code class="language-cpp">OpenDialog1-&gt;FileName = &quot;&quot;;
    if (OpenDialog1-&gt;Execute())
    {
        filename.open(OpenDialog1-&gt;FileName.c_str(),std::ios::in|std::ios::binary);
        if (filename.is_open())
        {
            nr1 = 0;
                 while (getline(filename,zeile))
                 {
                     str.str(zeile);
                     nr2 = 0;
	          	     while (str &gt;&gt; zahl)
	          	     {
                         if (!nr2) itsPkt[nr1].x = zahl;
                         if (1 == nr2) itsPkt[nr1].y = zahl;
                         if (2 == nr2) itsPkt[nr1].z = zahl;
                         nr2++;
                     }
                     nr1++;
            }
            filename.close();
        }
        else
            Application-&gt;MessageBoxA(&quot;Datei konnte nicht geöffnet werden!&quot;,&quot;Fehler&quot;,MB_ICONERROR);
    }
</code></pre>
<p>Ich danke für Eure Hilfe.<br />
V.K.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318167</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Wed, 04 Jul 2007 11:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 12:08:13 GMT]]></title><description><![CDATA[<p>Erstmal: Was genau steckt hinter den ganzen itsIrgendwas-Variablen?</p>
<p>Zweitens: Die Einlesen-Schleife ist zumindest gefährlich, weil du vorher nicht weißt, wieviele Daten tatsächlich kommen können - das ergibt im Ernstfall einen Speicher-Überlauf (ich hätte mit einem leeren vector&lt;&gt; begonnen und jeweils einen Punkt per push_back() dort reingeschoben).</p>
<p>Drittens: Das Auseinandernehmen der Eingabezeile ist aber reichlich kompliziert - zumal du immer genau drei Werte hast. Da reicht eigentlich:</p>
<pre><code class="language-cpp">str.str(zeile);
str&gt;&gt;itsPkt[nr1].x&gt;&gt;itsPkt[nr1].y&gt;&gt;itsPkt[nr1].z;//aber achte auf den verfügbaren Platz
if(!str) break;
</code></pre>
<p>PS: Und auch wenn du die Datei im Binärmodus geöffnet hast - op&lt;&lt; und op&gt;&gt; schreiben in Textform. Zum binären Lesen/Schreiben gibt es read() und write().</p>
<p>PPS: Hat dir schonmal jemand gesagt, daß man Variablen auch lokal definieren kann <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/1318172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318172</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 Jul 2007 12:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 12:09:15 GMT]]></title><description><![CDATA[<p>VerbalKint schrieb:</p>
<blockquote>
<p>filename &lt;&lt; itsPkt[i].x &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].y &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].z &lt;&lt; &quot;\n&quot;; // '\n' ist hier wahrscheinlich falsch</p>
</blockquote>
<p>Nein, nicht wahrscheinlich.<br />
Totsicher.<br />
MfG<br />
k.d.d.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318174</guid><dc:creator><![CDATA[kenner der dummköpfe]]></dc:creator><pubDate>Wed, 04 Jul 2007 12:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 12:12:04 GMT]]></title><description><![CDATA[<p>kenner der dummköpfe schrieb:</p>
<blockquote>
<p>VerbalKint schrieb:</p>
<blockquote>
<p>filename &lt;&lt; itsPkt[i].x &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].y &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].z &lt;&lt; &quot;\n&quot;; // '\n' ist hier wahrscheinlich falsch</p>
</blockquote>
<p>Nein, nicht wahrscheinlich.<br />
Totsicher.</p>
</blockquote>
<p>Hör nicht auf ihn, er hat zwar Ahnung von Dummköpfen (vermutlich aus praktischer Erfahrung :D), aber nicht von C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318177</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 Jul 2007 12:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 12:22:05 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Hör nicht auf ihn, er hat zwar Ahnung von Dummköpfen (vermutlich aus praktischer Erfahrung :D), aber nicht von C++.</p>
</blockquote>
<p><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>Warum schreibst du denn den Tinnef da mit rein:</p>
<p>filename &lt;&lt; itsPkt[i].x &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].y &lt;&lt; &quot; &quot; &lt;&lt; itsPkt[i].z &lt;&lt; &quot;\n&quot;;</p>
<p>Ich meine die Leerzeichen und das \n <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Nur mal so ne Anmerkung bezüglich Verbesserungsvorschläge, schneller machen und so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318189</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Wed, 04 Jul 2007 12:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 12:33:01 GMT]]></title><description><![CDATA[<p>Wenn du die Daten in Textform in die Datei schreibst, brauchst du Trennzeichen, um zu wissen, wo eine Zahl aufhört und wo die nächste beginnt (und auch wenn die Datei als ios::binary geöffnet wurde, schreibt op&lt;&lt; trotzdem in Textform).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318197</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 Jul 2007 12:33:01 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 12:53:24 GMT]]></title><description><![CDATA[<p>HI.</p>
<p>Ich habe das Ganze jetzt modifiziert. Weis aber nicht, ob jetzt alles richtig ist. Könnte es sich bitte jemand anschauen?</p>
<p>1. Schreiben:</p>
<pre><code class="language-cpp">void __fastcall THauptfenster::Zuflligerzeugen1Click(TObject *Sender)
{
    //...
    std::stringstream data;
    std::fstream filename;

    filename.open(&quot;data.bin&quot;,std::ios::out|std::ios::binary);
    if (filename.is_open())
    {
        for (i=0;i&lt;itsAnz;i++)
        {
            itsPkt[i].x = Umkehr(rand()%2)*rand()%grenze;
            itsPkt[i].y = Umkehr(rand()%2)*rand()%grenze/1000.0;

            itsPkt[i].z =  itsParam[0] +
                           itsParam[1]*itsPkt[i].x +
                           itsParam[2]*itsPkt[i].y;                         

            data &lt;&lt; itsPkt[i].x &lt;&lt; itsPkt[i].y &lt;&lt; itsPkt[i].z;
        }
        filename.write(data.str().c_str(),data.str().size());
        filename.close();
    }
}
</code></pre>
<p>2. Lesen:</p>
<pre><code class="language-cpp">void __fastcall THauptfenster::VonDateieinlesen1Click(TObject *Sender)
{
    int                 i,size;
    char                *data;
    std::fstream        filename;
    std::string	        zeile;
    std::stringstream	str;

    OpenDialog1-&gt;FileName = &quot;&quot;;
    if (OpenDialog1-&gt;Execute())
    {
        filename.open(OpenDialog1-&gt;FileName.c_str(),std::ios::in|std::ios::binary);
        if (filename.is_open())
        {
            size = filename.tellg();
            data = new char [size];
            filename.read (data,size);
            filename.close();
            itsPkt = new Vektor [size/3];

            // Kopiere von data nach itsPkt

            delete[] data;
        }
        else
            Application-&gt;MessageBoxA(&quot;Datei konnte nicht geöffnet werden!&quot;,&quot;Fehler&quot;,MB_ICONERROR);
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1318218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318218</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Wed, 04 Jul 2007 12:53:24 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 13:02:02 GMT]]></title><description><![CDATA[<p>Nein, so wird's nichts - mit dem Stringstream schreibst du immer noch Textdaten.</p>
<p>Bessere Lösung:</p>
<pre><code class="language-cpp">vector&lt;point&gt; mydata;

//schreiben:
fstream datei(name,ios::out|ios::binary);
for(i=0;i&lt;mydata.size();++i)
{
  datei.write(reinterpret_cast&lt;const char*&gt;(&amp;mydata[i]),sizeof(point));
}

//lesen
fstream datei(name,ios::in|ios::binary);
point pt;
while(datei.read(reinterpret_cast&lt;char*&gt;(&amp;pt),sizeof(point)))
  mydata.push_back(pt);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1318226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318226</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 Jul 2007 13:02:02 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Einlesen großer Datenmengen: Welches Dateiformat? on Wed, 04 Jul 2007 13:14:47 GMT]]></title><description><![CDATA[<p>VIELEN DANK! So funktionierts jetzt endlich! <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/1318237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318237</guid><dc:creator><![CDATA[VerbalKint]]></dc:creator><pubDate>Wed, 04 Jul 2007 13:14:47 GMT</pubDate></item></channel></rss>