<?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[mit dem stringgrid zeichen sortieren]]></title><description><![CDATA[<p>hi,</p>
<p>ich schaffe es einfach nich in einem stringgrid zahlen und zeichen zu sortieren,</p>
<p>dank dem FAQ kann ich zahlen sortieren,<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39156.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39156.html</a></p>
<p>aber sobald ich buchsteben eingebe bekomme ich die fehlermeldung das diese zeichen kein integer ist,</p>
<p>wenn ich aber den code (qsort) anschaue sehe ich das dort strings verglichen werden, oder stimmt das nicht?</p>
<p>könnt mir hinweise geben, dann versuche ich auf die lösung zu kommen,<br />
für jede kommentare offen,</p>
<p>mfg</p>
<p>HubiS</p>
<pre><code class="language-cpp">void __fastcall TForm1::QuickSortColumn(TStringGrid *grid, int Column, int links, int rechts, bool Desc)
    {
    Column = 0;
    // rechte und linke grenze festlegen
    int i = links;
    int j = rechts;
    // den mittelwert bestimmen (sortierung aufteilen)
    int m = StrToInt(grid-&gt;Cells[Column][(int) ((links + rechts) / 2)]);
    do
    {
        // sortier-reihenfolge festlegen
        while (Desc ? (StrToInt(grid-&gt;Cells[Column][i]) &lt; m) : (StrToInt(grid-&gt;Cells[Column][i]) &gt; m)) i++;
        while (Desc ? (m &lt; StrToInt(grid-&gt;Cells[Column][j])) : (m &gt; StrToInt(grid-&gt;Cells[Column][j]))) j--;
        if (i &lt;= j)
        {
            // Zeilen tauschen
            AnsiString tmp;
            tmp = grid-&gt;Rows[i]-&gt;CommaText;
            grid-&gt;Rows[i]-&gt;CommaText = grid-&gt;Rows[j]-&gt;CommaText;
            grid-&gt;Rows[j]-&gt;CommaText = tmp;
            i++;
            j--;
        }
    }
    while (i &lt; j);
    // rekursiver aufruf
    if (links &lt; j) QuickSortColumn(grid, Column, links, j, Desc);
    if (i &lt; rechts) QuickSortColumn(grid, Column, i, rechts, Desc);
    // damit ich nicht die CheckBox benutze, geht bestimmt einfacher,
    if (CheckBox1 -&gt; Checked == 0)
          CheckBox1 -&gt; Checked = 1;
    else {CheckBox1 -&gt; Checked = 0;}
}
</code></pre>
<p>aufruf mit -&gt;</p>
<pre><code class="language-cpp">QuickSortColumn(StringGrid1, StringGrid1 -&gt; Row, StringGrid1-&gt;FixedRows, StringGrid1-&gt;RowCount - 1, CheckBox1 -&gt; Checked);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/137809/mit-dem-stringgrid-zeichen-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 17:50:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/137809.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Feb 2006 23:28:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Tue, 21 Feb 2006 06:18:56 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich schaffe es einfach nich in einem stringgrid zahlen und zeichen zu sortieren,</p>
<p>dank dem FAQ kann ich zahlen sortieren,<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39156.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39156.html</a></p>
<p>aber sobald ich buchsteben eingebe bekomme ich die fehlermeldung das diese zeichen kein integer ist,</p>
<p>wenn ich aber den code (qsort) anschaue sehe ich das dort strings verglichen werden, oder stimmt das nicht?</p>
<p>könnt mir hinweise geben, dann versuche ich auf die lösung zu kommen,<br />
für jede kommentare offen,</p>
<p>mfg</p>
<p>HubiS</p>
<pre><code class="language-cpp">void __fastcall TForm1::QuickSortColumn(TStringGrid *grid, int Column, int links, int rechts, bool Desc)
    {
    Column = 0;
    // rechte und linke grenze festlegen
    int i = links;
    int j = rechts;
    // den mittelwert bestimmen (sortierung aufteilen)
    int m = StrToInt(grid-&gt;Cells[Column][(int) ((links + rechts) / 2)]);
    do
    {
        // sortier-reihenfolge festlegen
        while (Desc ? (StrToInt(grid-&gt;Cells[Column][i]) &lt; m) : (StrToInt(grid-&gt;Cells[Column][i]) &gt; m)) i++;
        while (Desc ? (m &lt; StrToInt(grid-&gt;Cells[Column][j])) : (m &gt; StrToInt(grid-&gt;Cells[Column][j]))) j--;
        if (i &lt;= j)
        {
            // Zeilen tauschen
            AnsiString tmp;
            tmp = grid-&gt;Rows[i]-&gt;CommaText;
            grid-&gt;Rows[i]-&gt;CommaText = grid-&gt;Rows[j]-&gt;CommaText;
            grid-&gt;Rows[j]-&gt;CommaText = tmp;
            i++;
            j--;
        }
    }
    while (i &lt; j);
    // rekursiver aufruf
    if (links &lt; j) QuickSortColumn(grid, Column, links, j, Desc);
    if (i &lt; rechts) QuickSortColumn(grid, Column, i, rechts, Desc);
    // damit ich nicht die CheckBox benutze, geht bestimmt einfacher,
    if (CheckBox1 -&gt; Checked == 0)
          CheckBox1 -&gt; Checked = 1;
    else {CheckBox1 -&gt; Checked = 0;}
}
</code></pre>
<p>aufruf mit -&gt;</p>
<pre><code class="language-cpp">QuickSortColumn(StringGrid1, StringGrid1 -&gt; Row, StringGrid1-&gt;FixedRows, StringGrid1-&gt;RowCount - 1, CheckBox1 -&gt; Checked);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/998986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/998986</guid><dc:creator><![CDATA[Huberts]]></dc:creator><pubDate>Tue, 21 Feb 2006 06:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Mon, 20 Feb 2006 23:46:38 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>aber sobald ich buchsteben eingebe bekomme ich die fehlermeldung das diese zeichen kein integer ist,</p>
</blockquote>
<p>Und was wundert dich daran?</p>
<blockquote>
<p>wenn ich aber den code (qsort) anschaue sehe ich das dort strings verglichen werden, oder stimmt das nicht?</p>
</blockquote>
<p>Wenn Strings verglichen werden, heißt das doch nicht, das diese in Zahlen umgewandelt werden müßen. Sondern es werden (ums kurz zumachen) die einzelnen Chars nacheinander von links nach rechts verglichen, und diese sind ja integer.</p>
<p>Du kannst/must also Strings genauso wie Zahlen vergleichen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/998994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/998994</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 20 Feb 2006 23:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Tue, 21 Feb 2006 06:19:32 GMT]]></title><description><![CDATA[<p>wenn ich zB &quot;a&quot; mit &quot;1&quot; (eins) vergleiche bekomme ich in der ausgabe das a größer als 1 ist,</p>
<p>nur mal zum verständnis:</p>
<p>string -&gt; zeichen von null bis Z, auch sonder zeichen,<br />
char -&gt; nur zeichen ohne buchstaben,<br />
int -&gt; nur Zahlen</p>
<p>mein quellcode:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Edit1 -&gt; Text &lt; Edit2 -&gt; Text)
    Panel1 -&gt; Caption = Edit1 -&gt; Text + &quot; &lt; &quot; + Edit2 -&gt; Text;
if (Edit1 -&gt; Text &gt; Edit2 -&gt; Text)
    Panel1 -&gt; Caption = Edit1 -&gt; Text + &quot; &gt; &quot; + Edit2 -&gt; Text;
}
</code></pre>
<p>kann ich ein stringgrid mit ein edit feld vergleichen, meine jetzt die &quot;bauart&quot;,</p>
<p>wenn ich das ändere</p>
<pre><code class="language-cpp">StrToInt(grid-&gt;Cells[Column][i]) &lt; m
</code></pre>
<p>in</p>
<pre><code class="language-cpp">grid-&gt;Cells[Column][i] &lt; m
</code></pre>
<p>tauchen probleme auf,</p>
<p>ist mein ansatz richtig ..??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/999007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/999007</guid><dc:creator><![CDATA[Huberts]]></dc:creator><pubDate>Tue, 21 Feb 2006 06:19:32 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Tue, 21 Feb 2006 08:29:53 GMT]]></title><description><![CDATA[<p>naja du kannst den quicksort entsprechend für dich anpassen und so erweitern, dass du die entsprechenden spalten nach ihrem datentyp sortierst. um es ein weniger portabler für andere bcb-projekte zu machen, kannste auch deinem stringgrid auch über die Object-Eigenschaft nen Wert zuweisen, den du hier beim sortieren ausliest und der die art der daten in der spalte festlegt. dann musst du nicht für jedes stringgrid nen eigenen sortieralgo schreiben.</p>
<pre><code class="language-cpp">// m muss natürlich dann auch je nach spalte und sortiertyp unterschiedlich sein!
switch (Column)
{  
  // Spalte 1 (Strings sortieren)
  // Spalte 3
  case 0 : 
  case 2 :
  {
    while (Desc ? AnsiCompareStr(grid-&gt;Cells[Column][i], m) &lt; 0 : AnsiCompareStr(grid-&gt;Cells[Column][i], m) &gt; 0) i++; 
    while (Desc ? AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &lt; 0 : AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &gt; 0) j--; 
    break;
  }

  // Spalte 2 (Zahlen sortieren)
  case 1 :
  {
    while (Desc ? (StrToInt(grid-&gt;Cells[Column][i]) &lt; m) : (StrToInt(grid-&gt;Cells[Column][i]) &gt; m)) i++; 
    while (Desc ? (m &lt; StrToInt(grid-&gt;Cells[Column][j])) : (m &gt; StrToInt(grid-&gt;Cells[Column][j]))) j--; 
    break;
  }
}
</code></pre>
<p>das sollte zwar funktionieren, ist allerdings nicht wirklich schön.</p>
<p>Wenn es wirklich effizient sein soll (sehr viele Datensätze). Dann schreibst du dir besser einen eigenen Indexsortierer und sortierst jeweils die entsprechende Spalte und passt lediglich die Indizes in einer separaten Liste an. Das ist schnell, denn du sparst die ganzen Zuweisungen und Kopierereien, da du lediglich die Indizes (integer) vertauschst. danach schreibst du die daten gemäß der umsortierten Indexliste wieder in deine Tabelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/999106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/999106</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Tue, 21 Feb 2006 08:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Tue, 21 Feb 2006 23:17:40 GMT]]></title><description><![CDATA[<p>also soweit dankr für die infos,</p>
<p>nur stimmt da was net,<br />
ich habe vergessen zu erwähnen das bei mir<br />
Column = 0 ist,</p>
<p>weil ich nur die erste spalte sortieren will,</p>
<p>zB:<br />
|_____Film______|__Size__|<br />
|.Matrix........|.700.MB.|<br />
|.23............|.600.MB.|<br />
|.30.über.nacht.|.650.MB.|</p>
<p>so will ich meine tabelle benutzen,<br />
wenn jetzt auf film gedrückt wird werden die filme sortiert,</p>
<p>deshalb ja auch zahlen und buchstaben,</p>
<p>der rest ist mir erstmal egal,</p>
<p>hier der nicht funktionsfähige modifizierte code</p>
<pre><code class="language-cpp">void __fastcall TForm1::QuickSortColumn(TStringGrid *grid, int Column, int links, int rechts, bool Desc)
    {
    //Column = 0;
    // rechte und linke grenze festlegen
    int i = links;
    int j = rechts;
    // den mittelwert bestimmen (sortierung aufteilen)
    int m = StrToInt(grid-&gt;Cells[Column][(int) ((links + rechts) / 2)]);
    do
    {
        // sortier-reihenfolge festlegen
    //    while (Desc ? ((grid-&gt;Cells[Column][i]) &lt; m) : (StrToInt(grid-&gt;Cells[Column][i]) &gt; m)) i++;
    //    while (Desc ? (m &lt; StrToInt(grid-&gt;Cells[Column][j])) : (m &gt; StrToInt(grid-&gt;Cells[Column][j]))) j--;
//     while (Desc ? AnsiCompareStr(grid-&gt;Cells[Column][i], m) &lt; 0 : AnsiCompareStr(grid-&gt;Cells[Column][i], m) &gt; 0) i++;
 //    while (Desc ? AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &lt; 0 : AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &gt; 0) j--;
// m muss natürlich dann auch je nach spalte und sortiertyp unterschiedlich sein!
switch (Column)
{
  // Spalte 1 (Strings sortieren)
  // Spalte 3
 // case 0 :
  case 0 :
  {
    while (Desc ? AnsiCompareStr(grid-&gt;Cells[Column][i], m) &lt; 0 : AnsiCompareStr(grid-&gt;Cells[Column][i], m) &gt; 0) i++;
    while (Desc ? AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &lt; 0 : AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &gt; 0) j--;
    break;
  }

  // Spalte 2 (Zahlen sortieren)
  case 1 :
  {
    while (Desc ? (StrToInt(grid-&gt;Cells[Column][i]) &lt; m) : (StrToInt(grid-&gt;Cells[Column][i]) &gt; m)) i++;
    while (Desc ? (m &lt; StrToInt(grid-&gt;Cells[Column][j])) : (m &gt; StrToInt(grid-&gt;Cells[Column][j]))) j--;
    break;
  }
}
        if (i &lt;= j)
        {
            // Zeilen tauschen
            AnsiString tmp;
            tmp = grid-&gt;Rows[i]-&gt;CommaText;
            grid-&gt;Rows[i]-&gt;CommaText = grid-&gt;Rows[j]-&gt;CommaText;
            grid-&gt;Rows[j]-&gt;CommaText = tmp;
            i++;
            j--;
        }
    }
    while (i &lt; j);
    // rekursiver aufruf
    if (links &lt; j) QuickSortColumn(grid, Column, links, j, Desc);
    if (i &lt; rechts) QuickSortColumn(grid, Column, i, rechts, Desc);
    // damit ich nicht die CheckBox benute, geht bestimmt einfacher,
    if (CheckBox1 -&gt; Checked == 0)
          CheckBox1 -&gt; Checked = 1;
    else {CheckBox1 -&gt; Checked = 0;}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/999831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/999831</guid><dc:creator><![CDATA[Huberts]]></dc:creator><pubDate>Tue, 21 Feb 2006 23:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Wed, 22 Feb 2006 07:30:16 GMT]]></title><description><![CDATA[<p>na wenn du nur eine spalte sortieren willst, kannste das ge<strong>switch</strong>e auch weglassen, allerdings muss <strong>m</strong> (wie schon geschrieben) auch vom Typ <strong>AnsiString</strong> sein! Also einfach die Konvertierung weglassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/999891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/999891</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Wed, 22 Feb 2006 07:30:16 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Thu, 23 Feb 2006 08:32:12 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/588">@sunday</a><br />
ich danke dir für die hilfe,</p>
<p>nur habe ich ein problem wenn alles sortiert wird,<br />
weren die zahlen nicht nach der größe 1,3,4,5,... etc</p>
<p>sondern wie zeichen behandelt,<br />
a, aa, aaa, b, bb, bbb,<br />
hier die zahlen -&gt; 1, 11, 111, 2, 22, 222, ... etc</p>
<p>und bei kombinationen von zeichen und zahlen das gleiche problem auftaucht,</p>
<p>ein bsp.1.: test1, test11, test111, test2, test22, test222, ... etc</p>
<p>bsp.2.: test11, test11, tfst1, tfst2,</p>
<p>hilfe bitte,</p>
<p>mfg</p>
<p>HubiS</p>
<pre><code class="language-cpp">void __fastcall TForm1::QuickSortColumn(TStringGrid *grid, int Column, int links, int rechts, bool Desc)
    {
    Column = 0;
    // rechte und linke grenze festlegen
    int i = links;
    int j = rechts;
    // den mittelwert bestimmen (sortierung aufteilen)
    //int m = StrToInt(grid-&gt;Cells[Column][(int) ((links + rechts) / 2)]);
    AnsiString m = (grid-&gt;Cells[Column][((links + rechts) / 2)]);
    do
    {
        // sortier-reihenfolge festlegen
    //    while (Desc ? ((grid-&gt;Cells[Column][i]) &lt; m) : (StrToInt(grid-&gt;Cells[Column][i]) &gt; m)) i++;
    //    while (Desc ? (m &lt; StrToInt(grid-&gt;Cells[Column][j])) : (m &gt; StrToInt(grid-&gt;Cells[Column][j]))) j--;
//        while (Desc ? (StrToInt(grid-&gt;Cells[Column][i]) &lt; m) : (StrToInt(grid-&gt;Cells[Column][i]) &gt; m)) i++;
//        while (Desc ? (m &lt; StrToInt(grid-&gt;Cells[Column][j])) : (m &gt; StrToInt(grid-&gt;Cells[Column][j]))) j--;
     while (Desc ? AnsiCompareStr(grid-&gt;Cells[Column][i], m) &lt; 0 : AnsiCompareStr(grid-&gt;Cells[Column][i], m) &gt; 0) i++;
     while (Desc ? AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &lt; 0 : AnsiCompareStr(m, grid-&gt;Cells[Column][j]) &gt; 0) j--;
 if (i &lt;= j)
        {
            // Zeilen tauschen
            AnsiString tmp;
            tmp = grid-&gt;Rows[i]-&gt;CommaText;
            grid-&gt;Rows[i]-&gt;CommaText = grid-&gt;Rows[j]-&gt;CommaText;
            grid-&gt;Rows[j]-&gt;CommaText = tmp;
            i++;
            j--;
        }
    }
    while (i &lt; j);
    // rekursiver aufruf
    if (links &lt; j) QuickSortColumn(grid, Column, links, j, Desc);
    if (i &lt; rechts) QuickSortColumn(grid, Column, i, rechts, Desc);
    // damit ich nicht die CheckBox benute, geht bestimmt einfacher,
    if (CheckBox1 -&gt; Checked == 0)
          CheckBox1 -&gt; Checked = 1;
    else {CheckBox1 -&gt; Checked = 0;}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1000824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000824</guid><dc:creator><![CDATA[Huberts]]></dc:creator><pubDate>Thu, 23 Feb 2006 08:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Thu, 23 Feb 2006 11:02:25 GMT]]></title><description><![CDATA[<p>Huberts schrieb:</p>
<blockquote>
<p>....<br />
nur habe ich ein problem wenn alles sortiert wird,<br />
weren die zahlen nicht nach der größe 1,3,4,5,... etc</p>
<p>sondern wie zeichen behandelt,<br />
a, aa, aaa, b, bb, bbb,<br />
hier die zahlen -&gt; 1, 11, 111, 2, 22, 222, ... etc</p>
<p>und bei kombinationen von zeichen und zahlen das gleiche problem auftaucht,</p>
<p>ein bsp.1.: test1, test11, test111, test2, test22, test222, ... etc</p>
<p>bsp.2.: test11, test11, tfst1, tfst2,<br />
...</p>
</blockquote>
<p>Das Ergebniss ist genau so, wie man es bei lexikalischer Sortierung erwartet.<br />
Wenn du Spalten hast, in denen ausschließlich Zahlen stehen, könntest du diese numerisch sortieren, aber bei gemischten Ausdrücken geht das nicht.</p>
<pre><code class="language-cpp">void __fastcall TForm1::QuickSortColumn(TStringGrid *grid, int Column, int links, int rechts, bool Desc, bool AlphaSort)
{
   if (AlphaSort)
      ; //deine neue alphanumerische Sortierfunktion
   else
      ; //die alte rein numerische Sortierung
}
</code></pre>
<p>Machmal hilft bei lexikalischer Sortierung folgender Workaround: Einfach die Zahl mit Nullen auffüllen, z.B. 01.Lied_1, 02.Lied_2, 12.Lied_12. Aber bei den von dir genannten Beispielen geht das nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000922</guid><dc:creator><![CDATA[Fincki]]></dc:creator><pubDate>Thu, 23 Feb 2006 11:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to mit dem stringgrid zeichen sortieren on Thu, 23 Feb 2006 11:53:25 GMT]]></title><description><![CDATA[<p>Am besten ist es wohl, wenn du dir hier deine eigene Vergleichsfunktion schreibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000987</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 23 Feb 2006 11:53:25 GMT</pubDate></item></channel></rss>