Einzelnen Beitrag anzeigen

Hellraizer

Registriert seit: 18. Dez 2008
Ort: NRW
28 Beiträge
 
Delphi 2007 Professional
 
#1

Artikelstatistik lädt File nicht korrekt ein?

  Alt 6. Jan 2009, 15:54
Hallo.
Ich habe hier ein Programm, das aus einer .txt Datei, die mit bestimmten Format erstellt wird, Daten auslesen
und etwas errechnen und dann in einer anderen .txt datei abspeichern soll.
Allerdings lädt er die .txt Datei scheinbar nciht korrekt ein. Vielfaches herumbasteln führte zu keiner Lösung..

hier der Code: im Anhang alles was dazu gehört.

Delphi-Quellcode:
unit artikel1;

interface

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

type
  TFStatistik = class(TForm)
    LArtikelnummer: TLabel;
    LMenge: TLabel;
    LUmsatz: TLabel;
    EArtikelnummer: TEdit;
    EMenge: TEdit;
    EUmsatz: TEdit;
    BLaden: TButton;
    BAuswerten: TButton;
    BBeenden: TButton;
    ODLaden: TOpenDialog;
    SDSpeichern: TSaveDialog;
    BSpeichern: TButton;
    procedure FormCreate(Sender: TObject);
    procedure BLadenClick(Sender: TObject);
    procedure BAuswertenClick(Sender: TObject);
    procedure BSpeichernClick(Sender: TObject);
    procedure BBeendenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FStatistik: TFStatistik;

implementation

{$R *.DFM}

const max = 100;

type tbuchungssatz = record
                      datum: string [12];
                      artikelnr, menge: integer;
                      preis: real;
                     end;

var buchungssatz: array [1..max] of tbuchungssatz; //"Array of Record"
    anzahl, gesucht: integer; //Variablen für die Anzahl der eingelesenen Datensätze und die gesuchte Artikelnummer

//Prozedur zum Einlesen der Buchungssätze aus der Textdatei
procedure einlesen (dateiname: string);
var datei: textfile; //Dateivariable
begin
 anzahl:=0; //Initilaisierung von anzahl
 assignfile (datei, dateiname); //Verbindung von logischem und physischem Dateinamen
 {$I-}                                                                           //Ausschalten der Ein-/Ausgabeprüfung
 reset (datei); //Datei öffnen
 {$I+}                                                                           //Einschalten der Ein-/Ausgabeprüfung
 if ioresult = 0 //Hat alles geklappt?
    then //Wenn ja:
     begin
      if not eof (datei) then readln (datei); //1. Zeile überlesen
      if not eof (datei) then readln (datei); //2. Zeile überlesen
      while not eof (datei) do //Solange Dateiende nicht erreicht...
       begin
        anzahl:=anzahl+1; //Erhöhung der Anzahl der Datensätze
        with buchungssatz [anzahl] do
         readln (datei, datum, artikelnr, menge, preis); //Dateizeile in die Recordkomponenten des anzahl-ten Datensatzes einlesen
       end;
      closefile (datei); //Datei schließen
     end
    else showmessage ('Fehler beim Öffnen der Datei!'); //Wenn nein: Meldung ausgeben
end;

//Prozedur zum Speichern der Auswertung in einer Textdatei
procedure speichern (dateiname: string);
var datei: textfile; //Dateivariable
    i: integer;
begin
 assignfile (datei, dateiname); //Verbindung von logischem und physischem Dateinamen
 {$I-}                                                                           //Ausschalten der Ein-/Ausgabeprüfung
 rewrite (datei); //Datei öffnen
 {$I+}                                                                           //Einschalten der Ein-/Ausgabeprüfung
 if ioresult = 0 //Hat alles geklappt?
    then //Wenn ja:
     begin
      writeln (datei, 'Artikelnummer: ', gesucht); //Titelzeilen schreiben
      writeln (datei);
      writeln (datei, 'Datum Menge Preis Umsatz');
      writeln (datei, '-------------------------------------------------');
      for i:=1 to anzahl do //Buchungssätze durchlaufen
       with buchungssatz[i] do
        if artikelnr=gesucht then //Wenn Artikelnummer des i-ten Buchungssatzes der gesuchten Artikelnummer entspricht
         writeln (datei, datum, formatfloat ('#,##0', menge):10, //i-ten Buchungssatz in Datei ausgeben
                  formatfloat ('#,##0.00', preis):12,
                  formatfloat ('#,##0.00', menge*preis):15);
      closefile (datei); //Datei schließen
     end
    else showmessage ('Statistik kann nicht gespeichert werden!'); //Datei konnte nicht erstellt werden: Meldung ausgeben
end;

//Wenn das Formular erzeugt wird...
procedure TFStatistik.FormCreate(Sender: TObject);
begin
 anzahl:=0; //anzahl initialisieren
 gesucht:=0; //gesucht initialisieren
end;

//Wenn man auf Laden klickt...
procedure TFStatistik.BLadenClick(Sender: TObject);
begin
 if odladen.execute then einlesen (odladen.filename); //Wenn im Öffnen-Dialog Öffnen angeklickt wurde: Daten einlesen
 eartikelnummer.setfocus; //Cursor ins Edit EArtikelnummer setzen
end;

//Wenn man auf Auswerten klickt...
procedure TFStatistik.BAuswertenClick(Sender: TObject);
var gesamtmenge, i: integer;
    gesamtumsatz: real;
begin
 gesucht:=strtointdef (eartikelnummer.text, 0); //Auslesen des Edits EArtikelnummer
 gesamtmenge:=0; //gesamtmenge initialisieren
 gesamtumsatz:=0; //gesamtumsatz initialisieren
 for i:=1 to anzahl do //Eingelesene Buchungssätze durchlaufen
  with buchungssatz[i] do
   if artikelnr = gesucht then //Wenn Artikelnummer des Buchungssatzes mit eingegebener Artikelnummer übereinstimmt...
      begin
       gesamtmenge:=gesamtmenge+menge; //Menge aggregieren
       gesamtumsatz:=gesamtumsatz+menge*preis; //Umsatz aggregieren
      end;
 emenge.text:=formatfloat ('#,##0', gesamtmenge); //Umgesetzte Menge ausgeben
 eumsatz.text:=formatfloat ('#,##0.00', gesamtumsatz); //Umsatz ausgeben
 eartikelnummer.setfocus; //Cursor ins Edit EArtikelnummer setzen
end;

//Wenn man auf Speichern klickt...
procedure TFStatistik.BSpeichernClick(Sender: TObject);
begin
 if gesucht > 0 //Wenn Auswertung mit gültiger Artikelnummer durchgeführt wurde...
    then
     begin
      if sdspeichern.execute then speichern (sdspeichern.filename); //Wenn im Speichern-Dialog Speichern angeklickt wurde: Statistik speichern
     end
    else //Wenn keine Auswertung mit gültiger Artikelnummer durchgeführt wurde...
     begin
      showmessage ('Keine Auswertung vorgenommen!'); //Fehlermeldung ausgeben
      eartikelnummer.setfocus; //Cursor ind Edit EArtikelnummer setzen
     end;
end;

//Wenn man auf Beenden klickt...
procedure TFStatistik.BBeendenClick(Sender: TObject);
begin
 application.terminate; //Anwendung beenden
end;

end.
Angehängte Dateien
Dateityp: dfm artikel1_133.dfm (1,3 KB, 1x aufgerufen)
Dateityp: dpr artikel_455.dpr (252 Bytes, 1x aufgerufen)
Dateityp: exe artikel_139.exe (402,5 KB, 3x aufgerufen)
Dateityp: pas artikel1_165.pas (8,2 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat