Einzelnen Beitrag anzeigen

belinea

Registriert seit: 20. Jan 2009
1 Beiträge
 
#1

Daten einlesen + ausgeben

  Alt 20. Jan 2009, 23:17
Hallo!
Ich habe ein ziemlich großes Problem. Habe die Aufgabe aus verschiedenen Dateien die Daten auszulesen und diese dann auszugeben. Ich habe bereits ein vorgefertigtes Hauptprogramm, welches ich nicht verändern darf und soll dazu die Unit "DateioperationenSolar" erstellen.

Hier ist der Code aus der vorgegebenen Unit:
Delphi-Quellcode:
unit Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, Grids, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    MittelwerteStringGrid: TStringGrid;
    MaxWertLabeledEdit: TLabeledEdit;
    MaxZeitLabeledEdit: TLabeledEdit;
    ErgebnisseSpeichernButton: TButton;
    BeendenButton: TButton;
    EinlesenButton: TButton;
    MonatComboBox: TComboBox;
    TagComboBox: TComboBox;
    MonatLabel: TLabel;
    TagLabel: TLabel;
    procedure BeendenButtonClick(Sender: TObject);
    procedure EinlesenButtonClick(Sender: TObject);
    procedure ErgebnisseSpeichernButtonClick(Sender: TObject);
  private
    procedure DatumErfassen(Var Datum: String);
  end;

var Form1: TForm1;

implementation {$R *.dfm}
Uses DateioperationenSolar;

Var DateiDatum : String;
    StundenMittel : TStundenMittel;
    Maximum : TDatensatz;

procedure TForm1.BeendenButtonClick(Sender: TObject);
begin
  Application.Terminate
end;

procedure TForm1.EinlesenButtonClick(Sender: TObject);
Var Stunde : Integer;
begin
  DatumErfassen (DateiDatum);
  DatenEinlesen (DateiDatum, StundenMittel, Maximum);
  MaxWertLabeledEdit.Text := FloatToStr(Maximum.Wert);
  MaxZeitLabeledEdit.Text := IntToStr(Maximum.Stunde) + ' : ' +
                             IntToStr(Maximum.Minute);
  For Stunde := ersteStunde To letzteStunde Do
  Begin
    MittelwerteStringGrid.Cells [0,Stunde - ersteStunde + 1] := IntToStr(Stunde);
    MittelwerteStringGrid.Cells [1,Stunde - ersteStunde + 1] :=
                         FloatToStrF(StundenMittel [Stunde], ffNumber, 4, 0);
  End;
end;

procedure TForm1.ErgebnisseSpeichernButtonClick(Sender: TObject);
Var ErgebnisDatei: TextFile;
    ErgebnisdateiName: String;
begin
  DatenSpeichern (StundenMittel, Maximum, DateiDatum);
end;

procedure TForm1.DatumErfassen(Var Datum: String);
begin
  Datum := IntToStr (1 + TagComboBox.ItemIndex) + '_' +
           IntToStr (1 + MonatComboBox.ItemIndex);
end;

end.
So, das ganze soll aus Dateien ausgelesen werden, die in dem Format "1_6.DAT" oder "17_6.DAT" vorliegen.
In den Dateien gibt es Werte, die in dem Format vorliegen:
Code:
283   0    7  0
Der erste Wert, gibt den Volt-Wert an, die 0 gibt nichts an (ist in jeder Zeile 0) und der letzte Wert die Uhrzeit. Das ganze ist mit Tabs getrennt.

Das Programm soll jetzt den Mittelwert von den einzelnen Stunden berechnen und man soll den Tag auswählen können. Das Problem ist, unser Lehrer hat uns quasi nichts dazu erklärt und ehrlich gesagt kann keiner die Aufgabe lösen. Ich denke mal, die Aufgabe ist nicht wirklich schwer, aber wenn man nicht erklärt bekommt wie es geht, kann man es ja auch nicht lösen :/

Ich habe bereits einen Teil von DateioperationenSolar programmiert, allerdings funktioniert da noch nicht wirklich etwas und ich glaube auch mein Ansatz ist falsch.

Hier mal kurz mein Ansatz, allerdings kann man wahrscheinlich alles verwerfen :/
Delphi-Quellcode:
unit DateioperationenSolar;

interface

const
   ersteStunde = 7;
   letzteStunde = 19;

type
  TStundenMittel = array[7..19] of real;
  TDatenSatz = Record
               wert: real;
               Stunde: integer;
               Minute: integer;
               end;

procedure DatenEinlesen (D:string;s: TStundenMittel; M:TDatenSatz);
procedure DatenSpeichern (s: TStundenMittel; M: TDatenSatz; D: String);

implementation

procedure DatenEinlesen (D:string; s: TStundenMittel; M:TDatenSatz);
type TFeldtyp = array of string;
var solarfile: Textfile;
puffer: string;
i: integer;
n: integer;
zweipuffer: TFeldtyp;
laenge: integer;
drittpuffer: TFeldtyp;
wert: TFeldtyp;
ersteabschneidstelle: integer;
abschneidstelle: integer;
begin
  AssignFile(solarfile, D + '.dat');
  reset(solarfile);
    repeat
      Read (solarfile,puffer);
      Inc(n);
      zweipuffer[n]:= puffer;
      laenge := length(zweipuffer[n]);
      for i:= 1 to laenge do
        begin
          if zweipuffer[n] = '#9then
            begin
              ersteabschneidstelle := abschneidstelle;
              abschneidstelle := i;
              drittpuffer[i] := copy(zweipuffer, ersteabschneidstelle, abschneidstelle);
            end;
        end;
    //drittpuffer := copy(zweipuffer);
    until EoF (solarfile);
    closefile(solarfile);
    for i:=1 to n do
end;

procedure DatenSpeichern (s: TStundenMittel; M: TDatenSatz; D: String);
begin
end;

end.
Ich hoffe ihr könnt mir helfen! Vielen Dank im Vorraus!

belinea
  Mit Zitat antworten Zitat