AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

strings einer combobox vergleichen

Ein Thema von neroo · begonnen am 6. Apr 2019 · letzter Beitrag vom 7. Apr 2019
Antwort Antwort
neroo

Registriert seit: 5. Okt 2018
7 Beiträge
 
#1

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 13:28
Wo ist da eine while-Schleife in deinem Code?

Code:
StringListe erzeugen
StringListe Eigenschaften setzen
while()
begin
  StringListe.Add();
end;
StringListe Combobox zuweisen
StringListe freigeben
Und lass das with-do bitte weg. Es erschwert das Debuggen und führt schnell zu schwer zufindeden Fehlern.
Code:
unit klausur011; //21.03.2019

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
  Buttons, Grids, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    ListBox1: TListBox;
    M_menge: TLabel;
    Label2: TLabel;
    K_menge: TLabel;
    Label3: TLabel;
    sanzahl: TLabel;
    schliess_knopf: TButton;
    einlesen_knopf: TButton;
    Label1: TLabel;
    oeffnen_knopf: TButton;
    ende_knopf: TBitBtn;
    fuss: TStatusBar;
    OpenDialog: TOpenDialog;
    etabelle: TStringGrid;
    procedure beenden(Sender: TObject);
    procedure einlesen(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure schliessen(Sender: TObject);
  end;

var Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
Type TFeld= array [0..1000] of string;
var k:integer;
    datei_name: string;
    datei: textfile;
    element:TFeld;

procedure TForm1.FormShow(Sender: TObject);
begin
  datei_name:='d:\temp\windenergie01.csv';
  with etabelle do
    begin
      Cells[1,0]:='Standort';
      Cells[2,0]:='Windrad';
      Cells[3,0]:='Nennleistung';
      Cells[4,0]:='Datum';
      Cells[5,0]:='Energiemenge';
    end;

  //
end;

procedure TForm1.schliessen(Sender: TObject);
begin
  //
end;

procedure TForm1.beenden(Sender: TObject);
begin
  close;
end;

procedure TForm1.einlesen(Sender: TObject);
var i,posi,anzahl: integer;
    wert,menge: double;
    buffer,eintrag,s1,s2,s3,s4,s5,s6,d1: string; stringlist:TStringList;
    ok:boolean;
begin
  with opendialog do
    begin
      title:='Windenergie einlesen';
      filename:=datei_name;
      initialdir:=extractfilepath(datei_name);
      filter:='Windenergieergebnisse (*.csv)|*.csv|alle Dateien (*.*)|*.*';
    end;
  //-------------------------------------------------------------------------------
  if opendialog.execute then
    begin

      datei_name:=opendialog.filename;
      assignfile(datei,datei_name);
      {$I-}
      reset(datei);
      readln(datei);
      i:=0; menge:=0.0;  anzahl:=0;

      while not(eof(datei)) do
        begin
          inc(i);
          readln(datei,eintrag);
          //Suedkueste,ElCedro2,3.4MW,01.02.2017,4092kWh
          posi:=pos(',',eintrag);
          s1:=copy(eintrag,1,posi-1);
          delete(eintrag,1,posi);


          //ElCedro2,3.4MW,01.02.2017,4092kWh
          posi:=pos(',',eintrag);
          s2:=copy(eintrag,1,posi-1);
          delete(eintrag,1,posi);
          //3.4MW,01.02.2017,4092kWh
          posi:=pos(',',eintrag);
          s3:=copy(eintrag,1,posi-1);
          delete(eintrag,1,posi);
          //01.02.2017,4092kWh
          posi:=pos(',',eintrag);
          s4:=copy(eintrag,1,posi-1);
          delete(eintrag,1,posi);
          //4092kWh
          s5:=eintrag;
          //Energiemenge berechnen in kWh
          posi:=Pos('k',s5);
          s6:=Copy(s5,1,posi-1);
          menge:=menge+strtofloat(s6);
          K_menge.Caption:=Floattostr(menge);
          //Energie menge in nWh
          wert:=menge/1000;
          M_menge.caption:=Floattostr(wert);
          //Tabellenausgabe
          with etabelle do
            begin
              if i>=rowcount then rowcount:=rowcount+1;
              cells[0,i]:=inttostr(i);
              cells[1,i]:=s1; element[i]:=s1; // in feld speichern
              cells[2,i]:=s2;
              cells[3,i]:=s3;
              cells[4,i]:=s4;
              cells[5,i]:=s5;
            end; //etabelle

            //standortname in combobox schreiben
            stringlist:=TStringList.Create;
            //stringlist.Sorted:=true;
            //stringlist.Duplicates:=dupIgnore;
            with stringlist do
              begin
               for i:=1 to anzahl do
               Add(element[i]);
              end;


            with combobox1 do
              begin
              Assign(stringlist);
              end;

            stringlist.free;

            //zeilenanzahl ermitteln
            inc(anzahl);
            sanzahl.caption:=inttostr(anzahl);


          //-----------------------

          fuss.Panels[0].Text:=datei_name;
          closefile(datei);

      {$I+}

        end; // hier ist die while schleife

      ok:=(ioresult=0);

end; //opendlg
end; // begin block

end.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 13:55
Du erzeugst die StringListe ja jedes mal neu in der Schleife, wenn ich das richtig gesehen habe. Das kann ja nicht funktionieren, wie gewollt. Einmal vor der Schleife erzeugen und dann füllen.

Noch ein Tipp: Zerleg die Ellen lange Prozedur in mehrere kleinere. Das macht den Code übersichtlicher und leichter verständlich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
neroo

Registriert seit: 5. Okt 2018
7 Beiträge
 
#3

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 14:32
Du erzeugst die StringListe ja jedes mal neu in der Schleife, wenn ich das richtig gesehen habe. Das kann ja nicht funktionieren, wie gewollt. Einmal vor der Schleife erzeugen und dann füllen.

Noch ein Tipp: Zerleg die Ellen lange Prozedur in mehrere kleinere. Das macht den Code übersichtlicher und leichter verständlich.
Ich habs gemacht und es funktioniert jetzt. gibt es jetzt eine Eigenschaft, die die Stringgrid Tabelle mit der Combobox verbindet, sodass wenn man auf einen Eintrag in der Combobox klickt, werden nur die entsprechenden Einträge von der Tabelle
angezeigt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 14:34
Das wirst du selber programmieren müssen, indem du nach dem gewählten Eintrag der Combobox im Stringgrid suchst. Alle Zeilen durch gehen und mit pos vergleichen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
neroo

Registriert seit: 5. Okt 2018
7 Beiträge
 
#5

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 14:38
es hört sich schwer an
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: strings einer combobox vergleichen

  Alt 7. Apr 2019, 14:48
Nö. Soll nur in einer Spalte gesucht werden musst du ja nur die Zeilen durchgehen, dir den Inhalt der Spalte holen und mit dem gewählten Eintrag vergleichen. Wenn identisch, hast du die Zeile im StringGrid gefunden.

Soll in jeder Spalte gesucht werden, wird es etwas komplizierter, da du dann zwei verschachtelte Schleifen brauchst: Eine für die Zeilen und darin eine für die Spalten.

Setz erst mal die erste Anforderung um: Der gesuchte Inhalt ist immer in der ersten Spalte.

Code:
SuchString := Combobox ausgewählt
for i := 0 to ZeilenStringGrid - 1 do
begin
  sgString := Zeile[i,0] // oder so ähnlich. Habe jetzt die Syntax nicht im Kopf
  if SuchString = sgString // gefunden
  begin
    Zeile im StringGrid hervorheben
    break;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 7. Apr 2019 um 14:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz