Einzelnen Beitrag anzeigen

neroo

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

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