<?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[Chars zusammenfügen und sortieren]]></title><description><![CDATA[<p>Hallo und ein Frohes Neues!</p>
<p>Ich habe mal eine Frage:</p>
<p>Ich hab mir ein programm geschrieben, dass aus 2 verschiedenen Dateien zeilen einliest, splittet vergleicht und zusammenfügt.<br />
Das klappt wunderbar. Allerdings habe ich festgestellt, dass die Anwendung, für die die fertige Datei ist, alle zeilen Alphabetisch und Numerisch sortiert haben will -.-</p>
<p>Die Zeilen (~200.000) sehen ungefähr so aus:</p>
<p>5340N;53.000000;40.000000;3<br />
CAMRN;48.515145;-137.638273;5<br />
MUN;34.5826752;123.692649;4</p>
<p>Sortiert werden muss nach dem ersten Kürzel.</p>
<p>Intern habe ich 4 chars erstellt, indem die Werte zwischen den &quot;;&quot; schleifenweise für jede Zeile eingelesen werden.<br />
Am Ende der Schleife werden sie momentan direkt in eine Datei geschrieben.</p>
<p>Wie geh ich jetzt da am schlausten ran um die Zeilen zu sortieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231487/chars-zusammenfügen-und-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 08:45:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231487.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Jan 2009 17:53:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 17:53:05 GMT]]></title><description><![CDATA[<p>Hallo und ein Frohes Neues!</p>
<p>Ich habe mal eine Frage:</p>
<p>Ich hab mir ein programm geschrieben, dass aus 2 verschiedenen Dateien zeilen einliest, splittet vergleicht und zusammenfügt.<br />
Das klappt wunderbar. Allerdings habe ich festgestellt, dass die Anwendung, für die die fertige Datei ist, alle zeilen Alphabetisch und Numerisch sortiert haben will -.-</p>
<p>Die Zeilen (~200.000) sehen ungefähr so aus:</p>
<p>5340N;53.000000;40.000000;3<br />
CAMRN;48.515145;-137.638273;5<br />
MUN;34.5826752;123.692649;4</p>
<p>Sortiert werden muss nach dem ersten Kürzel.</p>
<p>Intern habe ich 4 chars erstellt, indem die Werte zwischen den &quot;;&quot; schleifenweise für jede Zeile eingelesen werden.<br />
Am Ende der Schleife werden sie momentan direkt in eine Datei geschrieben.</p>
<p>Wie geh ich jetzt da am schlausten ran um die Zeilen zu sortieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643498</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Sun, 11 Jan 2009 17:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 18:13:46 GMT]]></title><description><![CDATA[<p>Wieso nimmst du nicht <code>std::string</code> ? Da werden dir auch gleich die Operatoren für lexikalische Vergleiche bereitgestellt, die für die Sortierung benutzt werden können.</p>
<p>Dann kannst du einen Container mit Elementen vom Typ <code>std::string</code> erstellen. Jede Zeile erhält nun so einen Eintrag. Dann machst du <code>std::sort()</code> darüber, speicherst wieder in die Datei und fertig.</p>
<p>Du musst die Trennung des ersten Kürzels nicht mehr beachten, da bei <code>std::string</code> zuerst nach dem ersten, dann nach dem zweiten Zeichen, etc. sortiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643511</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Jan 2009 18:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 19:41:03 GMT]]></title><description><![CDATA[<p>HI!</p>
<p>Danke für den Tipp schonmal!</p>
<p>Leider habe ich nicht wirklich viel erfahrung mit der Standardbibliothek.<br />
Die Elemente befinden sich momentan in chars, damit ich sie einfach vergleichen kann.</p>
<p>Wie muss ich denn dann vorgehen um meine 4 chars inklusive trennzeichen in den string zu bekommen?<br />
und wie erstelle ich dann einen großen string, den ich dann auch sortieren kann?</p>
<p>Ist es da nicht einfacher die chars in ein Array zu packen?</p>
<p>*EDIT*<br />
Ich hab's mal manuell probiert:<br />
`</p>
<p>strcpy(chDataString, chFix);</p>
<p>ctrcat(chDataString, &quot;;&quot;);</p>
<p>strcat(chDataString, chLatitude);</p>
<p>strcat(chDataString, &quot;;&quot;);</p>
<p>cout &lt;&lt; chDataString &lt;&lt; endl;</p>
<p>`</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643536</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Sun, 11 Jan 2009 19:41:03 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 19:42:37 GMT]]></title><description><![CDATA[<p>Wie ist es genau mit den 4 Chars?</p>
<p>Ich hab es so verstanden, dass du in der Datei (den Dateien) die einzelnen Einträge hast:</p>
<pre><code>5340N;53.000000;40.000000;3 
CAMRN;48.515145;-137.638273;5 
MUN;34.5826752;123.692649;4
</code></pre>
<p>Dann willst du sie in den Arbeitsspeicher einlesen und sortieren. Nach dem Sortieren willst du die Werte zwischen den ; auslesen. Hab ich das richtig verstanden?</p>
<p>Zum Sortieren:</p>
<pre><code class="language-cpp">std::deque&lt;std::string&gt; Entries;    // Container mit allen Einträgen(Zeilen), z.B. deque oder vector

std::string Line;                   // String anlegen, in dem eine Zeile gespeichert wird
std::ifstream File(&quot;filename.txt&quot;); // Stream anlegen

while (std::getline(File, Line))    // Zeilen in einer Schleife einlesen und im String speichern
{
    Entries.push_back(Line);        // Zeile in den Container einfügen
}

std::sort(Entries.begin(), Entries.end());  // Container sortieren
</code></pre>
<p>Was das Zusammenfügen von Strings angeht, hast du es viel einfacher als mit <code>char</code> -Arrays:</p>
<pre><code class="language-cpp">std::string Str1 = &quot;A5634C&quot;;
std::string Str2 = &quot;XT522S&quot;;
std::string Text = Str1 + &quot;;&quot; + Str2;  // zusammenhängen
</code></pre>
<p>Du kannst auch <code>operator+=</code> oder <code>append()</code> benutzen. Schau vielleicht mal unter <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> nach, das ist eine gute Referenz zur Standardbibliothek.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643556</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Jan 2009 19:42:37 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 20:48:45 GMT]]></title><description><![CDATA[<p>Ok, also:</p>
<p>die Datei sieht in etwa so aus:</p>
<p>`ENTRE                   ENTRE-31.534170 130.949200</p>
<p>PEA83                   PEA83-31.533961 115.952714</p>
<p>89W80                   89W80-89.000000-180.000000</p>
<p>CUNNC                   CUNNC-31.532590 117.457100</p>
<p>PEA09                   PEA09-31.531264 115.961353</p>
<p>NYNWH                   NYNWH-31.531130 147.241300</p>
<p>CBAEM                   CBAEM-31.531110 145.804600`</p>
<p>Hierbei handelt es sich um eine Navigationsdatenbank. Das geht so ungefähr 200.000 eintäge weiter. Daraus lese ich jede Zeile aus und zerschnipsel sie in 3 chars:</p>
<p>chFix[5] = &quot;ENTRE&quot;<br />
chLatitude[10] = &quot;-31.534170&quot;<br />
chLonglitude[11] = &quot;130.949200&quot;</p>
<p>und</p>
<p>chNumber[1] = &quot;0&quot;</p>
<p>chNumber kommt aus einer anderen Datei, dort wird abgeglichen, ob derselbe eintrag vorhanden ist, wie in dem char chFix. Wenn nicht, gibt's ne null.</p>
<p>dann wird alles in eine neue Datei geschrieben, die ein anderes Format vorraussetzt:</p>
<p>`ENTRE;-31.534170;130.949200;3</p>
<p>PEA83;-31.533961;115.952714;5</p>
<p>89W80;-89.000000;-180.000000;0</p>
<p>CUNNC;-31.532590;117.457100;0</p>
<p>PEA09;-31.531264;115.961353;3</p>
<p>NYNWH;-31.531130;147.241300;5</p>
<p>CBAEM;-31.531110;145.804600;5`</p>
<p>Allerdings muss die Ausgabe vorher alphabetisch sortiert werden, also:</p>
<p>`89W80;-89.000000;-180.000000;0</p>
<p>CBAEM;-31.531110;145.804600;5</p>
<p>CUNNC;-31.532590;117.457100;0</p>
<p>ENTRE;-31.534170;130.949200;3</p>
<p>PEA09;-31.531264;115.961353;3</p>
<p>PEA83;-31.533961;115.952714;5</p>
<p>NYNWH;-31.531130;147.241300;5`</p>
<p>und da haperts...</p>
<p>Hoffe das reicht ums verständlicher zu machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643576</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Sun, 11 Jan 2009 20:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 20:58:28 GMT]]></title><description><![CDATA[<p>Okay. Das Zerschnipseln kannst du mit <code>std::string</code> einfach lösen, indem du die Memberfunktion <code>substr()</code> benutzt (siehe mein geposteter Link zur C++-Referenz). Oder du benutzt gleich <code>std::replace()</code> , um die Leerschläge durch Strichpunkte zu ersetzen.</p>
<p>Also würde ich zuerst zeilenweise von der ersten Datei einlesen, die Formatänderung und Vergleiche mit der anderen Datei vornehmen und dann die aktuelle Zeile jeweils in einem Container speichern. Wenn du diesen Container gefüllt hast, kannst du ihn mit <code>std::sort()</code> alphabetisch sortieren und wieder zeilenweise in die neue Datei schreiben.</p>
<p>Was mir allerdings etwas problematisch erscheint, sind die Prüfungen, ob der Eintrag in der anderen Datei vorhanden ist. Gehst du da für jeden Eintrag der ersten Datei alle Einträge der anderen Datei durch? Eventuell lohnt es sich, die Einträge der anderen Datei auch in einem Container zu speichern, vielleicht einem assoziativen wie <code>std::set</code> , damit du schneller suchen kannst.</p>
<p>Ich hoffe, das war jetzt einigermassen verständlich, ansonsten einfach nachfragen. <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/1643581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643581</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Jan 2009 20:58:28 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 21:14:50 GMT]]></title><description><![CDATA[<p>supi, das ging schnell.</p>
<p>An genau das hab ich auch gerade gedacht und habs mal drauf losprobiert:<br />
error C2039 'deque' is not a member of 'std' ...</p>
<p>was das abgleichen angeht: ja, für jeden eintrag der ersten list muss ich die komplette 2. Liste durchlaufen, bis ich meine variable gefunden habe - oder eben nicht. Der Erste Testlauf hat gleub ich fast 4 Stunden gedauert...</p>
<p>also, nur um zu gucken ob ich's richtig verstanden habe:</p>
<p>Ich erstelle mir 2 container.<br />
In den ersten kopiere ich die komplette 2. Liste<br />
aus der ersten liste hole und verarbeite ich die variablen zeilenweise<br />
(btw: leider hat er's hier nicht richtig angezeigt. in der ersten Liste habe ich zwischen dem ersten kürzel und dem wiederholten kürzel ca. 13 leerstellen, std_replace scheint hier schlecht zu sein...)<br />
dann pushe ich alles in den 2. container.<br />
nach durchlauf der schleife wird der sortiert und in die Datei geschrieben.</p>
<p>richtig?</p>
<p>--btw2: ist es möglich einen string in den container zu pushen?<br />
den hätte ich nämlich schon parat... <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=";D"
      alt="😉"
    /></p>
<p>*EDIT* Fehlermeldung schon begraben und die Strings scheine ich auch pushen zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643587</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Sun, 11 Jan 2009 21:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 21:14:29 GMT]]></title><description><![CDATA[<blockquote>
<p>error C2039 'deque' is not a member of 'std' ...</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;deque&gt;
...
</code></pre>
<blockquote>
<p>ist es möglich einen string in den container zu pushen?</p>
</blockquote>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; v;
v.push_back (&quot;hmm&quot;);
std::string str = &quot;ak&quot;;
v.push_back (str);
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1643594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643594</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 11 Jan 2009 21:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 21:23:56 GMT]]></title><description><![CDATA[<p>super, hat wunderbar geklappt. die chars kann ich alle pushen. morgen bau ich das dann nochmal komplett um.</p>
<p>allerdings hab ich noch 3 Fragen:</p>
<p>1. woher kommt std::sort. ist mal wieder &quot;no member of 'std'&quot;<br />
2. wie speichere ich den container: nur std::ofstream FILE &quot;filename.txt&quot;); ?<br />
3. wie vergleiche ich mein chFix mit dem containerinhalt der 2. Liste und hole mir die Variable?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643595</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Sun, 11 Jan 2009 21:23:56 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 21:35:52 GMT]]></title><description><![CDATA[<p>So, ich hatte gerade ein wenig Zeit... <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 />
Da du auch viel Eigeninitiative zeigst, hier mal ein ungefährer Ansatz. <code>std::set</code> ist ein assoziativer Container, bei dem man in logarithmischer Zeit suchen kann.</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;	  // std::ifstream, std::ofstream
#include &lt;string&gt;       // std::string
#include &lt;deque&gt;		// std::deque
#include &lt;set&gt;		  // std::set
#include &lt;algorithm&gt;	// std::sort()

void Format(const std::string&amp; Line, bool EntryFound)
{
	// hier formatierst du den String um. Abhängig davon,
	// ob der Eintrag in der zweiten Datei gefunden wurde.
}

int main()
{
	std::ifstream InFile1;      // Stream für erste Datei
	std::string Line;	          // String für jeweilige Zeile

	// Einträge der zweiten Datei in List2 speichern
	std::set&lt;std::string&gt; List2;
	while (std::getline(File1, Line))
	{
		List2.insert(Line);	// Zeile in List2 einfügen
	}

	// Einträge der ersten Datei in List1 speichern und
	// prüfen, ob Eintrag jeweils in List2 vorhanden ist
	std::deque&lt;std::string&gt; List1;	
	while (std::getline(File1, Line))
	{
		bool EntryFound = false
		if (List2.find(Line) != List2.end())	// wenn Eintrag in List2 vorhanden ist
		{
			EntryFound = true;	// kann man auch gleich mit ?: machen, aber hier übersichtlicher
		}

		Format(Line, EntryFound);      // String formatieren
		List1.push_back(Line);         // formatierten String in List1 einfügen
	}

	// Einträge aus List1 sortieren
	std::sort(List1.begin(), List1.end());

	// Stream für Ausgabedatei erstellen
	std::ofstream OutFile(&quot;OutFile.txt&quot;);

	// Alle Elemente aus List1 durchgehen
	for (std::deque&lt;std::string&gt;::iterator i = List1.begin(); i != List1.end(); ++i)
	{
		OutFile &lt;&lt; (*i) &lt;&lt; std::endl;	// Einträge wieder in Datei schreiben
	}
}
</code></pre>
<p>Vielleicht klären sich einige Fragen, wahrscheinlich entstehen aber wieder viele neue... Frag einfach. <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>
<p>Falls du dich mit der STL noch nicht so auskennst, kannst du dir ja mal diese Artikel anschauen (vor allem 1 und 2 sind hierbei wichtig):<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html" rel="nofollow"><strong>1)</strong> Container</a><br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-146604.html" rel="nofollow"><strong>2)</strong> Iteratoren und Algorithmen</a><br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-150106.html" rel="nofollow"><strong>3)</strong> Hilfsklassen und Erweiterungen</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643602</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Jan 2009 21:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 21:40:57 GMT]]></title><description><![CDATA[<p>wow, vielen dank!!!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>dann studier ich das mal fleißig.<br />
Vielen, vielen Dank nochmal für die Mühe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643606</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Sun, 11 Jan 2009 21:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 22:36:13 GMT]]></title><description><![CDATA[<p>ok, genial.<br />
Ich habe es geschafft alles zu pushen, zu sortieren und zu schreiben.</p>
<p>Jetzt habe ich nurnoch eine Frage:</p>
<pre><code class="language-cpp">if (List2.find(Line) != List2.end())    // wenn Eintrag in List2 vorhanden ist
</code></pre>
<p>vergleicht doch die kompletten Zeilen miteinander, korrekt?<br />
Da ich ja aus jeder Zeile nur das Erste Wort vergleichen kann (die sehen nämlich genau so aus wie das Endergebnis) muss ich die dann erst zerschneiden.<br />
Wie schneide ich denn von einem String das erste Wort ab?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643636</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Sun, 11 Jan 2009 22:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Sun, 11 Jan 2009 22:55:25 GMT]]></title><description><![CDATA[<p>campinge schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if (List2.find(Line) != List2.end())    // wenn Eintrag in List2 vorhanden ist
</code></pre>
<p>vergleicht doch die kompletten Zeilen miteinander, korrekt?</p>
</blockquote>
<p>Ja.</p>
<p>campinge schrieb:</p>
<blockquote>
<p>Da ich ja aus jeder Zeile nur das Erste Wort vergleichen kann (die sehen nämlich genau so aus wie das Endergebnis) muss ich die dann erst zerschneiden.<br />
Wie schneide ich denn von einem String das erste Wort ab?</p>
</blockquote>
<p>Mit der Memberfunktion <code>std::string::substr()</code> . Wenn das Wort immer gleich lang ist, kannst du <code>substr()</code> einen fixen Parameter übergeben. Ansonsten kannst du mit <code>std::string::find()</code> die Position des Trennzeichens (Abstand, Strichpunkt oder was auch immer) herausfinden und dann den Teilstring entsprechend lange machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643653</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Jan 2009 22:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Mon, 12 Jan 2009 06:44:45 GMT]]></title><description><![CDATA[<p>So, vielen lieben Dank nochmal!</p>
<p>Ich habs doch tatsächlich noch gestern abend geschafft alles zum laufen zu bekommen. Die Idee mit den containern war wirklöich klasse, jetzt ist die Ablaufzeit von ~4 Stunden auf ca 2 Minuten verkürzt worden. Anscheinend war mein code doch etwas zu umständlich <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=";D"
      alt="😉"
    /><br />
Und mit der Kompatibilität klappst auch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643708</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Mon, 12 Jan 2009 06:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Mon, 12 Jan 2009 10:03:38 GMT]]></title><description><![CDATA[<p>campinge schrieb:</p>
<blockquote>
<p>jetzt ist die Ablaufzeit von ~4 Stunden auf ca 2 Minuten verkürzt worden.</p>
</blockquote>
<p>Wow, damit hätte ich jetzt nicht gerechnet. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Teuer sind hierbei vor allem die Zugriffe auf die Festplatte, also per Streams. Die STL-Container sind extrem praktisch und auch weitgehend auf Performance optimiert. Ich habe jetzt einmal <code>std::deque</code> empfohlen, da da die Speicherverwaltung günstig ist (Array von Arrays). Du könntest auch <code>std::vector</code> nehmen, allerdings könnte es sein, dass es dann länger dauert, weil jeweils die ganze Sequenz reallokiert werden muss, wenn die Kapazität erschöpft ist. Oder <code>std::list</code> , wobei das sehrwahrscheinlich noch langsamer ist, weil jedes Element einzeln allokiert wird. Achte darauf, dass du bei der Liste nicht die globale Funktion <code>std::sort()</code> , sondern die Memberfunktion <code>std::list::sort()</code> aufrufst. Du kannst ja ein wenig experimentieren, aber ich denke, mit <code>std::deque</code> bist du gut beraten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1643773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643773</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 12 Jan 2009 10:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Mon, 12 Jan 2009 10:54:54 GMT]]></title><description><![CDATA[<p>campinge schrieb:</p>
<blockquote>
<p>So, vielen lieben Dank nochmal!</p>
<p>Ich habs doch tatsächlich noch gestern abend geschafft alles zum laufen zu bekommen. Die Idee mit den containern war wirklöich klasse, jetzt ist die Ablaufzeit von ~4 Stunden auf ca 2 Minuten verkürzt worden. Anscheinend war mein code doch etwas zu umständlich <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=";D"
      alt="😉"
    /><br />
Und mit der Kompatibilität klappst auch!</p>
</blockquote>
<p>Schalt mal noch auf Release. Das sollte dir auch noch <strong>sehr</strong> viel bringen. Dann bist du wahrscheinlich im Sekunden - Bereich. <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/1643797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643797</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 12 Jan 2009 10:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Mon, 12 Jan 2009 14:36:32 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Schalt mal noch auf Release. Das sollte dir auch noch <strong>sehr</strong> viel bringen. Dann bist du wahrscheinlich im Sekunden - Bereich. <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>Er sprach ja von 200'000 Einträgen und zwei Dateien. Allein das Streamen dürfte einige Zeit brauchen, und dann noch das Füllen zweier Container und Sortieren...</p>
<p>Aber genau weiss ich es auch nicht, da ich praktisch nie in dieser Grössenordnung arbeite. Von daher ist es schon möglich... <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/1643950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1643950</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 12 Jan 2009 14:36:32 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Mon, 12 Jan 2009 19:40:43 GMT]]></title><description><![CDATA[<p>ok, danke für den Tipp!</p>
<p>Ich habe gerade festgestellt warum der durchlauf so schnell geht.</p>
<p>die Schleife für die 2. Datei läuft nur einmal durch, danach wird die einfach ignoriert. Somit wird halt nur für den 1. Navigationspunkt überprüft, ob dieser vorhanden ist. Der rest wird übersprungen.</p>
<p>gibt's so ne art fgetpos / fsetpos auch für die stl-container?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644129</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Mon, 12 Jan 2009 19:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Mon, 12 Jan 2009 21:50:39 GMT]]></title><description><![CDATA[<p>campinge schrieb:</p>
<blockquote>
<p>gibt's so ne art fgetpos / fsetpos auch für die stl-container?</p>
</blockquote>
<p>Hm, die Funktionen kenne ich nicht gut, da die eher C sind. Meinst du etwas wie <code>tellp()</code> bzw. <code>seekp()</code> für Streams? Auf den Containern ( <code>std::deque</code> und <code>std::vector</code> ) kann man einfach per <code>at()</code> oder <code>operator[]</code> die einzelnen Elemente manipulieren.</p>
<p>Ich kann dir nur nochmals raten, <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> anzuschauen. Dort sind sowohl die Streams als auch die STL mit ihren Containern und Algorithmen sehr ausführlich erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644188</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:50:39 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Mon, 12 Jan 2009 22:11:27 GMT]]></title><description><![CDATA[<p>Die generische Variante für für set wäre std::advance. Das abfragen müsstest du selbst mitzählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644205</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Tue, 13 Jan 2009 08:06:32 GMT]]></title><description><![CDATA[<p>ok, danke Jungs!</p>
<p>Den Fehler habe ich gestern gefunden. Ich hatte die Definition + Deklaration global gealten. Dadurch gings ned.<br />
Jetzt hab ich das kurz über die Schleife gehängt und siehe da, es klappt.<br />
Allerdings wieder mit gewohnter langsamkeit. Habe gestern für 5881 Zeilen 5-10 Minuten gebraucht, da freue ich mich ja schon auf die 200000 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644311</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Tue, 13 Jan 2009 08:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Tue, 13 Jan 2009 08:14:06 GMT]]></title><description><![CDATA[<p>Ich würde unbedingt noch ein wenig mit den Containern experimentieren. An den Datenstrukturen kannst du momentan wohl am meisten optimieren (bei den Streams machst du ja nichts Unnötiges wie zwei Mal dasselbe lesen oder so?). Und deine Algorithmen wie die Umformatierung können auch nicht mehr wirklich schneller gemacht werden?</p>
<p>Vielleicht kannst du auch mal die <em>Boost.Pointer Container</em> ausprobieren, die verwalten Zeiger auf Objekte, womit vor allem beim Sortieren Zeit durch die wegfallenden Kopien gespart werden könnte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644312</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 08:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Tue, 13 Jan 2009 11:52:35 GMT]]></title><description><![CDATA[<p>campinge schrieb:</p>
<blockquote>
<p>ok, danke Jungs!</p>
<p>Den Fehler habe ich gestern gefunden. Ich hatte die Definition + Deklaration global gealten. Dadurch gings ned.<br />
Jetzt hab ich das kurz über die Schleife gehängt und siehe da, es klappt.<br />
Allerdings wieder mit gewohnter langsamkeit. Habe gestern für 5881 Zeilen 5-10 Minuten gebraucht, da freue ich mich ja schon auf die 200000 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>noch ist mir unklar, was du machen willst.<br />
mir fällt kaum was ein, was für 5000 datansätze 5min brauchen könnte.</p>
<p>wie werden die drei dateien zusammengemischt? soll er von den dre dateien, wenn ein schlüssel mehrfach kommt, einfach nur die erste zeile nehmen, die diesen schlüssel hatte?<br />
falls ja, biste mit std::sort/std::unique oder std::map wieder im rennen bei den deutlich unterminutern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644387</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 13 Jan 2009 11:52:35 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Tue, 13 Jan 2009 17:39:06 GMT]]></title><description><![CDATA[<p>Also, seekg habe ich schon ausprobiert. Allerdings scheint das nichts zu bringen, bzw. ist das Ergebnis trotzdem dasselbe.<br />
Die Dauer der Anwendung kann ich mir nur dadurch erklären, dass die Datei jedes mal neu eingelesen wird, und komplett durchgegengen werden muss.<br />
Den großen Block habe ich heute mal getestet, Pro Sekunde eine Linie x 200000 ist viiel zu viel -.-</p>
<p>Hier einfach mal der komplette quellcode:<br />
Ich hoffe das macht das optimieren etwas einfacher...</p>
<pre><code>// Export the fixes for the FMC
//
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;deque&gt;
#include &lt;set&gt;
#include &lt;algorithm&gt;
#include &quot;windows.h&quot;

using namespace std;

//variables
//
int fx_err, fx_i, fx_x, fx_y, fx_zerocounter, fx_checksum;		// some counters int's
int fx_linecounter = 1;											// a linecounter to print how much lines were edited

char fx_chNumber[1], fx_chFix[5], fx_chLatitude[10];			// String for Number, Fix, Latitude
char fx_chString2[100], fx_chLonglitude[11], fx_chTemp[5];		// temp string, Longlitude String, temp string
char fx_chString[100], fx_chDataString[100];					// 2 strings for the Data

bool fx_Result;													// bool for the Result or the function

FILE *fx_fwpNavFIX;												// FILE where the fixes are taken from
FILE *fx_fFixes;												// FILE where the numbers are taken from
FILE *fx_fNewFixes;												// FILE where evereything will be saved in

fpos_t fx_pos, fx_pos2;											// Storage for the Position counters in the files
std::deque&lt;std::string&gt; fx_Entries;								// List where the data will be sorted in
std::string fx_Line, fx_Line2;									// 2 strings for pre-saving the lines

// Prototypes
//
int fx_checkline(char fx_chLine[100], char fx_chCheckFix[5], int *fx_checksum);

//
// Functions
//
int ExportFixes ()
{
	// open the Level-D wpNavFIX file
	//
	if(fx_err = fopen_s( &amp;fx_fwpNavFIX, &quot;navdata/wpNavFix.txt&quot;, &quot;r&quot;) != 0)
	{	MessageBox(NULL, &quot;Error opening navdata/wpNavFix.txt \nPlease make sure it exists!&quot;, &quot;Error!&quot;, 0); return false;	}

	// open the old Fixes.db since there are a few things needed
	//
	if(fx_err = fopen_s( &amp;fx_fFixes, &quot;navigation/Fixes.db&quot;, &quot;r&quot;) != 0)
	{	MessageBox(NULL, &quot;Error opening navigation/Fixes.db \nPlease make sure it exists&quot;, &quot;Error!&quot;, 0); return false;	}

	// create the CD Fixes.db file. If existing, delete content
	//
	if(fx_err = fopen_s( &amp;fx_fNewFixes, &quot;navigation_new/Fixes.db&quot;, &quot;w&quot;) != 0)
	{	MessageBox(NULL, &quot;Error creating navigation_new/Fixes.db \nAre you logged on as Administrator?&quot;, &quot;Error!&quot;, 0); return false;	}

	// write the header in the file
	//
	fputs (&quot;//Aeronautical Data Exported from official AIRAC by www.navigraph.com.\n&quot;, fx_fNewFixes);
	fputs (&quot;//All rights reserved. Exporting is only legal if you bought the navdata there.\n&quot;, fx_fNewFixes);
	fputs (&quot;//Sharing is Illegal! Files Exported with LVD2CS.exe, freeware, copyright by me.\n&quot;, fx_fNewFixes);
	fputs (&quot;//---------------------------------------------------------------------------\n&quot;, fx_fNewFixes);
	fputs (&quot;//Aeronautical data for Captain Sim flight simulation products.\n&quot;, fx_fNewFixes);
	fputs (&quot;//DO NOT USE FOR FLIGHT PLANNING OR IN-FLIGHT NAVIGATION!\n&quot;, fx_fNewFixes);
	fputs (&quot;//(c)1999-2007 Captain Sim www.captainsim.com\n&quot;, fx_fNewFixes);
	fputs (&quot;//Effective dates: 14 FEB 2008 - 12 MAR 2008\n&quot;, fx_fNewFixes);
	fputs (&quot;//---------------------------------------------------------------------------\n&quot;, fx_fNewFixes);
	fclose (fx_fNewFixes);

	cout &lt;&lt; endl &lt;&lt; &quot;Converting Fixes...&quot; &lt;&lt; endl; 
	do
	{
		// copy a line from the Level-D navdata
		fgets (fx_chString, 99, fx_fwpNavFIX);

		// Set Start conditions
		//
		fx_Result = false;
		fx_checksum = false;

		// now, cut the line in different parts and safe them in their strings
		//
		if (fx_chString[0] != ';')
		{
			// cut for the Fix
			//
			fx_y = 0;
			fx_zerocounter = 1;
			for (fx_x=0; fx_x&lt;5; fx_x++)
			{
				if (fx_chString[fx_x] != ' ')
				{
					fx_chFix[fx_y] = fx_chString[fx_x];
					fx_y++;
				}
				else // if there was found a space, set the last part of the char to false
				{
					fx_chFix[sizeof(fx_chFix)-fx_zerocounter] = false;
					fx_zerocounter++;
				}

			}
			// cut for the Latitude
			//
			fx_y = 0;
			fx_zerocounter = 1;
			for (fx_x=29; fx_x&lt;39; fx_x++)
			{
				if (fx_chString[fx_x] != ' ')
				{
					fx_chLatitude[fx_y] = fx_chString[fx_x];
					fx_y++;
				}
				else // if there was found a space, set the last part of the char to false
				{
					fx_chLatitude[sizeof(fx_chLatitude)-fx_zerocounter] = false;
					fx_zerocounter++;
				}
			}
			// cut for the longlitude
			//
			fx_y = 0;
			fx_zerocounter = 1;
			for (fx_x=39; fx_x&lt;50; fx_x++)
			{
				if (fx_chString[fx_x] != ' ')	
				{
					fx_chLonglitude[fx_y] = fx_chString[fx_x];
					fx_y++;
				}
				else // if there was found a space, set the last part of the char to false
				{
					fx_chLonglitude[sizeof(fx_chLonglitude)-fx_zerocounter] = '\0';
					fx_zerocounter++;
				}
			}

			// copy the old Fixes.db to a container and create a list. then copy the string to
			// the char chString2 to send it to the function fx_checkline(). this returns true or false
			//

			std::ifstream fx_InFile1 (&quot;navigation/Fixes.db&quot;);

				//******************************
				//achtung:
				// hier oben ist der Grund dafür, warum alles so langsam geht. Bei jedem Durchlauf der Hauptschleife
				// wird das ~2mb-File neu eingeladen. Wenn ich das allerdings global mache, bekomme ich nach dem 
				// ersten Durchlauf der Hauptschleife in der unteren nurnoch müll raus...
				//******************************

			//fx_InFile1.seekg (0, ios::beg);	// this is not working?
			std::set&lt;std::string&gt; fx_List1;

			while (std::getline(fx_InFile1, fx_Line2) &amp;&amp; fx_checksum != true &amp;&amp; fx_Result != true)
			{

				strcpy_s(fx_chString2, fx_Line2.c_str());
				strcpy(fx_chTemp, fx_chFix);
				fx_Result = fx_checkline(fx_chString2, fx_chTemp, &amp;fx_checksum);
			}

			// if checksum is true, the end of the searchfile was reached and the fix is not
			// in the old Airports.dat. Set the Number to '5', or print for manual addition
			//
			if (fx_checksum == true)
			{
				cout &lt;&lt; fx_chFix &lt;&lt; endl;
				fx_chNumber[0] = '5';
				cout &lt;&lt; fx_chFix &lt;&lt; endl;

				//********************************
				// achtung:
				// Die Zeile hier oben soll, wenn kein passender eintrag in der Funktion checkfix
				// gefunden wurde, chNumber auf '5' setzen. Allerdings, setzt das auch gleichzeitig 
				// fx_chFix[5] auf '5'. Warum ist mir nicht klar. Wenn ich dann chNumber[5] auf 
				// false setze, wird chNumber auch zu false....
				//*************************************
				fx_chFix[5] = false;	
			}

			// if the fix was found, copy the last letter from the chString2
			// and paste it in chNumber
			//
			else
			{
				fx_chNumber[0] = fx_chString2[strlen(fx_chString2)-1];
			}

			//Print some Information on the screen to make visible that the progress is still working
			//
			if (fx_linecounter == 1000)
				cout &lt;&lt; &quot;  &quot; &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 5000)
				cout &lt;&lt; &quot;  &quot; &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 10000)
				cout &lt;&lt; &quot; &quot; &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 25000)
				cout &lt;&lt; &quot; &quot; &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 50000)
				cout &lt;&lt; &quot; &quot; &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 100000)
				cout &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 150000)
				cout &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 200000)
				cout &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 250000)
				cout &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;
			if (fx_linecounter == 300000)
				cout &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes exported...still working&quot; &lt;&lt; endl;

			//copy all informations in one single string
			//
			strcpy_s(fx_chDataString, fx_chFix);
			strcat_s(fx_chDataString, &quot;;&quot;);
			strcat_s(fx_chDataString, fx_chLatitude);
			strcat_s(fx_chDataString, &quot;;&quot;);
			strcat_s(fx_chDataString, fx_chLonglitude);
			strcat_s(fx_chDataString, &quot;;&quot;);
			strcat_s(fx_chDataString, fx_chNumber);
			strcat_s(fx_chDataString, &quot;\n&quot;);
			cout &lt;&lt; fx_chDataString;

			//And push that one into a container 
			//
			fx_Entries.push_back(fx_chDataString);

			//count the fixes exported
			fx_linecounter++; 
		} 
	} while ((fx_chFix[0] != '0' || fx_chFix[1] != '0' || fx_chFix[2] != '0' || fx_chFix[3] != '0' || fx_chFix[4] != '0') &amp;&amp; (fx_chFix[0] != 'N' || fx_chFix[1] != 'P' || fx_chFix[2] != 'O' || fx_chFix[3] != 'L' || fx_chFix[4] != 'E') );
	// quit the circle when the last waypoint &quot;NPOLE&quot; is reached...
	cout &lt;&lt; &quot;Successfully edited &quot; &lt;&lt; fx_linecounter &lt;&lt; &quot; fixes!&quot; &lt;&lt; endl;

	// Sort the container
	//
	cout &lt;&lt; &quot;Sorting container...&quot; &lt;&lt; endl;
	std::sort(fx_Entries.begin(), fx_Entries.end());

	// and write the container in the file
	//
	cout &lt;&lt; &quot;Writing...&quot; &lt;&lt; endl;
	std::ofstream fx_OutFile (&quot;navigation_new/Fixes.db&quot;, std::ios_base::out | std::ios_base::app);

	for (std::deque&lt;std::string&gt;::iterator fx_a = fx_Entries.begin(); fx_a != fx_Entries.end(); ++fx_a)
	{
		fx_OutFile &lt;&lt; (*fx_a);		// write line in file
	}

	fx_OutFile.close();
	cout &lt;&lt; &quot;Successfully finished exporting Fixes&quot; &lt;&lt; endl;

	return (true);
}

// function checkline
//
// this function checks, if the Fix halded over is inside the String
// if it is, the function returns true.
//

//********************
// achtung:
// diese Funktion funktioniert zwa, ist aber glaub ich nicht wirklich effektiv. 
// mir sind hier leider dieIdeeen ausgegangen, gibt's da ne möglichkeit das 
// kleiner und effektiver zu bekommen?
//***********************

int fx_checkline(char fx_chLine[100], char fx_chCheckFix[5], int *fx_checksum)
{
	if (fx_chLine[0] == '/')
	{
		return (false);
	}
	else if (fx_chLine[0] == 'Z' &amp;&amp; fx_chLine[1] == 'Z' &amp;&amp; fx_chLine[2] == 'V' &amp;&amp; fx_chLine[3] == '6' &amp;&amp; fx_chLine[4] == '5')
	{
		*fx_checksum = true;
		return (false);
	}
	else if (fx_chLine[0] == fx_chCheckFix[0] &amp;&amp; fx_chLine[1] == fx_chCheckFix[1])
	{
		if(fx_chCheckFix[2] == false &amp;&amp; fx_chCheckFix[3] == false &amp;&amp; fx_chCheckFix[4] == false &amp;&amp; fx_chLine[2] == ';')
		{
			return (true);
		}
		else if (fx_chLine[2] == fx_chCheckFix[2])
		{
			if (fx_chCheckFix[3] == false &amp;&amp; fx_chCheckFix[4] == false &amp;&amp; fx_chLine[3] == ';')
			{
				return (true);
			}
			else if (fx_chCheckFix[3] == fx_chLine[3])
			{
				if (fx_chCheckFix[4] == false &amp;&amp; fx_chLine[4] == ';')
				{
					return (true);
				}
				else if (fx_chCheckFix[4] == fx_chLine[4])
				{
					return (true);
				}
				else
				{
					*fx_checksum = false;
					return (false);
				}
			}
			else
			{
				*fx_checksum = false;
				return (false);
			}
		}
		else
		{
			*fx_checksum = false;
			return (false);
		}		 
	}
	else
	{
		*fx_checksum = false;
		return (false);
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1644753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644753</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Tue, 13 Jan 2009 17:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Tue, 13 Jan 2009 20:31:45 GMT]]></title><description><![CDATA[<p>campinge schrieb:</p>
<blockquote>
<p>Die Dauer der Anwendung kann ich mir nur dadurch erklären, dass die Datei jedes mal neu eingelesen wird, und komplett durchgegengen werden muss.</p>
</blockquote>
<p>Warum liest du sie dann mehrfach ein? Streams und vor allem Festplattenzugriffe sind langsam. Also nimm die Werte einmal in den Arbeitsspeicher und arbeite dort weiter...</p>
<p>Ich hab deinen Code nicht genau angeschaut, aber mir fällt auf, dass du sehr viele C-Mittel verwendest. Sind dir die C++-Alternativen noch zu wenig bekannt (vor allem <code>std::fstream</code> und <code>std::string</code> )? Denn diese können dir das Leben erleichtern. Und sie sind bestimmt nicht der Grund für die Langsamkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644892</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 20:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to Chars zusammenfügen und sortieren on Tue, 13 Jan 2009 21:57:57 GMT]]></title><description><![CDATA[<p>jap. wie gesagt, ich hab damals inner uni c gelernt und hab mir das Buch von Heiko kalista zu c++ geholt. gesehen hab ichs schon mal, aber leider noch nicht wirklich mit gearbeitet.</p>
<p>Was das einlesen angeht: genau da liegt ja das proglem. Wenn ich die Datei vor beginn der ersten Schleife einlese, dann kann ich die innere Schleife ein mal bis zum ende durchlaufen lassen.<br />
Danach scheint es einen Fehler in dem container zu geben und ich bekomme nurnoch Herzchen und so nen quatsch ausgegeben...</p>
<p>Meine Vermutung ist einfach, dass die Datei bis zum Ende durchlaufen wird und der Zeiger dann auf dem letzten Zeichen steht, daher wird Die Schleife direkt abgebrochen, da ja Das Dateiende erreicht ist. Der Versuche mit der ausge-// Zeile mit file.seekg(0, ios::beg()); hat leider keinen Unterschied gebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644942</guid><dc:creator><![CDATA[campinge]]></dc:creator><pubDate>Tue, 13 Jan 2009 21:57:57 GMT</pubDate></item></channel></rss>