Announcement

Collapse
No announcement yet.

StringGrid Doppelte werte Zählen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • StringGrid Doppelte werte Zählen

    Hallo,

    ich brauche mal eure Hilfe.

    ich habe 2 StringGrids

    im ersten stehen werte im Folgenden Format
    'BL',Punktbezeichnung, Tiefe,'m'

    im zweiten soll dann stehen wie viele Punkte die Selbe tiefe haben



    ein Beispiel:

    StringGrid1

    BL 1 7 m
    BL 2 5 m
    BL 3 2 m
    BL 4 5 m
    BL 5 6 m
    BL 6 7 m
    BL 7 2 m
    BL 8 7 m
    BL 9 7 m
    BL 10 1 m

    und daraus soll dann im StringGrid2 nur noch folgendes Stehen
    4 a 7 m
    2 a 5 m
    2 a 2 m
    1 a 6 m
    1 a 1 m
    ich wollte das mittels 2 for schleifen lösen hab aber irgendwie nen denk fehler.

    kann mir bitte jemand helfen?

  • #2
    Originally posted by etsch View Post
    ich habe 2 StringGrids

    im ersten stehen werte im Folgenden Format
    'BL',Punktbezeichnung, Tiefe,'m'

    im zweiten soll dann stehen wie viele Punkte die Selbe tiefe haben

    ich wollte das mittels 2 for schleifen lösen hab aber irgendwie nen denk fehler.
    Du kannst das sicher mit For Schleifen machen. Es ist aber klassischer Fall für Datenbanken und/oder Reporting. Mit anderen Worten, es gibt dafür Tools und Verfahren, die das ohne For Schleife lösen. Per SQL würdest Du mit einer gruppierenden Abfrage arbeiten, in einem Report Tool gibt es dafür analoge Verfahren, je nach Produkt.
    Falls Du Dein String Grid nicht sowieso schon mit Daten aus einer DB befüllst, lese mal etwas zu dem Thema und überdenke Deinen Ansatz.
    Falls Du bei Deinem Ansatz bleibst, wo siehst Du Deinen Denkfehler?
    Gruß, defo

    Comment


    • #3
      Die Daten für das StringGrid stammen aus einer Datei.
      Und das Problem ist das ich es mit geschachtelten for schleifen bis her nicht hinbekommen habe. Hab irgendwo einen denk Fehler drin

      Comment


      • #4
        Wozu 2 Schleifen?
        Mittels eines TDictionary besser zu lösen.
        Die Schleife läuft über das Grid und nimmt für jeden Punkt die Tiefe auf. In das TDictionary wird je Punkt die Tiefe um eins hochgezählt. Es enthält also als Key den Punkt und als Wert die Tiefe.
        Dann wird aus dem TDictionary das zweite Grid gebaut.
        Grundsätzlich also:
        - eine Schleife über das Grid
        - Ergebnisse erfassen
        - zweites Grid erstellen

        Wüsste jetzt nicht wie man in einem Durchlauf von 2 Scheifen das lösen könnte.....
        Christian

        Comment


        • #5
          Es ginge auch mit LINQ relativ einfach

          [highlight=c#]
          var input = new[] {
          new { id = 1, value = 7},
          new { id = 2, value = 5},
          new { id = 3, value = 3},
          new { id = 4, value = 7},
          new { id = 5, value = 5},
          new { id = 6, value = 7},
          new { id = 7, value = 1}
          };

          input.GroupBy(x => x.value, x => x).Select(x => new { x.Key, count = x.Count() }).Dump();
          [/highlight]

          Die Dump Funktion am Ende ist eine Funktion von LinqPad. Diese gibt es in Standard .Net nicht. LinqPad ist aber fuer mal schnell was ausprobieren ganz gut

          Ein Reporting Tool oder eine DB wuerde ich nur bemuehen, wenn ich a, extrem viele Daten habe oder b, die Daten sowieso von dort gelesen werden und auch synchron mit den Daten in der Applikation sind.

          Comment


          • #6
            LINQ?? In Delphi??
            Christian

            Comment


            • #7
              ah *lach* dache das war im C# Forum. Na dann vielleicht doch lieber Schleifen. Im Prinzip ist das ja aber auch nix anders

              Mein Fehler. Sorry.

              Comment


              • #8
                Originally posted by etsch View Post
                ich habe 2 StringGrids
                im ersten stehen werte im Folgenden Format
                'BL',Punktbezeichnung, Tiefe,'m'
                im zweiten soll dann stehen wie viele Punkte die Selbe tiefe haben
                ich wollte das mittels 2 for schleifen lösen hab aber irgendwie nen denk fehler.
                kann mir bitte jemand helfen?
                Was hast du denn bereits versucht, das wegen deinem Denkfehler nicht funktioniert hat? Du mußt doch einfach nur jeden Wert mit jedem weiteren Wert vergleichen. Findest du zwei gleiche Werte, trägst du die in das zweite Stringgrid ein. Dabei läßt du eine For-Schleife vom ersten bis zum vorletzten Datensatz laufen und darin nochmals eine For-Schleife vom zweiten bis zum letzten Datensatz. Dabei erhöhst du nach jedem Durchlauf der ersten Schleife den Anfangswert der zweiten Schleife:

                Erster Durchgang: Anfangswert der ersten Schleife ist 1, Anfangswert der zweiten Schleife ist Anfangswert der ersten plus 1, also 2.
                Zweiter Durchgang: Anfangswert der ersten Schleife ist 2, Anfangswert der zweiten Schleife ist daher 3 usw.

                Code:
                For i := 1 To AnzahlZeilen-1 Do
                  For k := i+1 To AnzahlZeilen Do
                  Begin
                    ...
                  End;
                Wie man einzelne Zellen eines StringGrid ausliest, ist dir ja bestimmt geläufig, oder?
                Zuletzt editiert von Perlsau; 06.08.2016, 11:11.
                Die Tränen, die du nicht weinen willst, müssen andere für dich vergießen. (Frei nach: wer nicht leiden will, muß hassen.)

                Comment

                Working...
                X