Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 8 von 8
  1. #1
    Neuer Benutzer
    Registriert seit
    22.05.2016
    Beiträge
    2

    Standard 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. #2
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.212

    Standard

    Zitat Zitat von etsch Beitrag anzeigen
    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

  3. #3
    Neuer Benutzer
    Registriert seit
    22.05.2016
    Beiträge
    2

    Standard

    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

  4. #4
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.117

    Standard

    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

  5. #5
    Stammgast
    Registriert seit
    18.07.2008
    Beiträge
    3.025

    Standard

    Es ginge auch mit LINQ relativ einfach

    Code 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();

    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.

  6. #6
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.117

    Standard

    LINQ?? In Delphi??
    Christian

  7. #7
    Stammgast
    Registriert seit
    18.07.2008
    Beiträge
    3.025

    Standard

    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.

  8. #8
    Aufsteiger
    Registriert seit
    16.05.2009
    Ort
    Karlsruhe
    Beiträge
    61

    Standard

    Zitat Zitat von etsch Beitrag anzeigen
    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?
    Geändert von Perlsau (06.08.2016 um 11:11 Uhr)
    Die Tränen, die du nicht weinen willst, müssen andere für dich vergießen. (Frei nach: wer nicht leiden will, muß hassen.)

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •