Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Artikelstatistik lädt File nicht korrekt ein? (https://www.delphipraxis.net/127010-artikelstatistik-laedt-file-nicht-korrekt-ein.html)

Hellraizer 6. Jan 2009 14:54


Artikelstatistik lädt File nicht korrekt ein?
 
Liste der Anhänge anzeigen (Anzahl: 4)
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.

mkinzler 6. Jan 2009 14:56

Re: Artikelstatistik lädt File nicht korrekt ein?
 
Wie äussert sich das nicht korrekt?

Hellraizer 6. Jan 2009 14:58

Re: Artikelstatistik lädt File nicht korrekt ein?
 
oh vergessen :D

[edit]wenn man den ausrechnen button,TFStatistik.BLadenClick drückt dann wird/bleibt eartikelnummer(edit1) leer, emenge.text(edit2) wird 0 und eumsatz.text(edit3) wird 0,00
sons passiert nix. das lässt sich dann auch nicht speichern.[/edit]

Hellraizer 6. Jan 2009 16:10

Re: Artikelstatistik lädt File nicht korrekt ein?
 
keiner eine idee? oder fehlen noch genauere angaben?

SirThornberry 6. Jan 2009 16:12

Re: Artikelstatistik lädt File nicht korrekt ein?
 
Könntest du bitte das pushen unterlassen? :) Bist du denn mal Schritt für Schritt das ganze durchgegangen (mit Hilfe des Debuggers und F7 + F8 )?
Ein abschreckender Punkt könnte deine Benennung sein. Wenn jemand Button3 etc. liest ist er nicht so schnell gewillt zu helfen. Denn man erwartet wenn man sich die Arbeit macht dir zu helfen das du dir die Arbeit gemacht hast Variablen etc. zu benennen.

Hellraizer 6. Jan 2009 18:26

Re: Artikelstatistik lädt File nicht korrekt ein?
 
tut mor leid. hab die oben das mit den variablen geändert.

[edit]
habe das problem selbst gefunden und gelöst. danke für eure zeit =)
[/edit]

Chemiker 6. Jan 2009 19:07

Re: Artikelstatistik lädt File nicht korrekt ein?
 
Hallo Hellraizer,

in Deinem Programm werden Funktionen von Textdateien und Typisierte Dateien gemischt.

Tut. für Typisierte Dateien:

Tut. für typisierte Dateien:

Bis bald Chemiker

fkerber 6. Jan 2009 19:51

Re: Artikelstatistik lädt File nicht korrekt ein?
 
Hi!

Zitat:

Zitat von Hellraizer
[edit]
habe das problem selbst gefunden und gelöst. danke für eure zeit =)
[/edit]

Es wäre trotzdem schön, wenn du uns dann an deiner Lösung teilhaben lassen könntest.
Falls mal jemand ein ähnliches Problem hat, ist er vllt. dankbar deine Lösung zu lesen.


Ciao, Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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