Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   LoadFileFrom - Problem (https://www.delphipraxis.net/176965-loadfilefrom-problem.html)

darky95 7. Okt 2013 20:50

Delphi-Version: 5

LoadFileFrom - Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Leute, hab mich extra mal schnell angemeldet.. habe folgendes Problem:

Ich (totaler Anfänger) schreibe gerade mit Lazarus an einem Programm zur Mitgliederverwaltung für unseren Verein.
Wenn ich die geforderten Daten eingebe und speichere, erstellt er die Datei so:

Vorname: Hans
Nachname: Schuster
Mitglied seit: 1.9.2013
...usw

wenn ich die eingaben laden will, kommen die daten inklusive dem "vorname: " in das Eingabefeld zurück.
ausserdem bekomme ich die Fehlermeldung: "List index(13) out of bounds" .. damit kann ich garnix anfangen..

Hier der Quellcode für das Vereinssystem:

Code:

unit P_vereinssystem;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs,
  ComCtrls, StdCtrls, Buttons, ExtDlgs, Calendar, FileCtrl, EditBtn, CheckLst,
  ColorBox, Menus, ExtCtrls, ValEdit, MaskEdit, ActnList;

type

  { TForm1 }

  TForm1 = class(TForm)
    btnClose: TBitBtn;
    btnSave: TButton;
    btnMonE: TButton;
    btnQuartE: TButton;
    btnJE: TButton;
    btnMonK: TButton;
    btnQuartK: TButton;
    btnHJK: TButton;
    btnJK: TButton;
    btnLoad: TButton;
    edtHJE: TButton;
    edtoffVon: TEdit;
    edtoffBetr: TEdit;
    edtBeitragPro: TEdit;
    edtEmail: TEdit;
    edtTel: TEdit;
    edtOrt: TEdit;
    edtPLZ: TEdit;
    edtAdr: TEdit;
    edtMBTG: TEdit;
    edtMitglS: TEdit;
    edtAlterst: TEdit;
    edtNachn: TEdit;
    edtVorn: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    edtoffB: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    lblTurn: TLabel;
    lblEmail: TLabel;
    lblTel: TLabel;
    lblOrt: TLabel;
    lblPLZ: TLabel;
    lblAdr: TLabel;
    lblMBTG: TLabel;
    lblMitglS: TLabel;
    lblAltersst: TLabel;
    lblNNname: TLabel;
    lblVName: TLabel;
    mem12: TMemo;
    MemTurn: TMemo;
    StatusBar1: TStatusBar;
    procedure Action1Execute(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
    procedure btnJEClick(Sender: TObject);
    procedure btnJKClick(Sender: TObject);
    procedure btnLoadClick(Sender: TObject);
    procedure btnMonEClick(Sender: TObject);
    procedure btnMonKClick(Sender: TObject);
    procedure btnQuartEClick(Sender: TObject);
    procedure btnQuartKClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure btnHJKClick(Sender: TObject);
    procedure CheckGroup1Click(Sender: TObject);
    procedure chk1Change(Sender: TObject);
    procedure edtHJEClick(Sender: TObject);
    procedure edtoffBetrChange(Sender: TObject);
    procedure edtVornChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure mem12Change(Sender: TObject);
    procedure MemTurnChange(Sender: TObject);
    procedure MenuItem1Click(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure ValueListEditor1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.MemTurnChange(Sender: TObject);
begin

end;

procedure TForm1.MenuItem1Click(Sender: TObject);
begin

end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin

end;

procedure TForm1.ValueListEditor1Click(Sender: TObject);
begin

end;

procedure TForm1.edtVornChange(Sender: TObject);
begin

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.Image1Click(Sender: TObject);
begin

end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin

end;

procedure TForm1.mem12Change(Sender: TObject);
begin

end;

 procedure TForm1.Action1Execute(Sender: TObject);
 begin

 end;

procedure TForm1.btnCloseClick(Sender: TObject);
begin

end;

procedure TForm1.btnJEClick(Sender: TObject);

  var a,b,c : Single;
begin
  a := StrToFloat (edtoffBetr.Text) ;
  b := a+72;
  edtoffBetr.Text := FloatToStr(b);
end;

procedure TForm1.btnJKClick(Sender: TObject);

    var a,b : Single;
begin
  a := StrToFloat (edtoffBetr.Text) ;
  b := a+54;
  edtoffBetr.Text := FloatToStr(b);

end;

procedure TForm1.btnLoadClick(Sender: TObject);
    var
      List: TStrings;


    begin
          List:=TStringList.Create;
       try
        List.LoadfromFile('C:/Mitgliederverwaltung/Mitglieder/'+ edtVorn.Text + edtNachn.Text +'.MG');
         if List.Count>0 then
          edtVorn.Text:=List[0] ;
          edtNachn.Text:=List[1] ;
          edtAlterst.Text:=List[2];
          edtMitglS.Text:=List[3];
          edtMBTG.Text:=List[4];
          edtBeitragPro.Text:=List[13];
          edtoffBetr.Text:=List[14];
          edtoffVon.Text:=List[15];
          edtAdr.Text:=List[5];
          edtPLZ.Text:=List[6];
          edtOrt.Text:=List[7];
          edtTel.Text:=List[8];
          edtEmail.Text:=List[9];
          MemTurn.Text:=List[10];



       finally
          List.Free;
       end;
    end;

procedure TForm1.btnMonEClick(Sender: TObject);
 var a,b,c : Single;
begin
  a := StrToFloat (edtoffBetr.Text) ;
  b := a+6;
  edtoffBetr.Text := floatToStr(b);



end;

procedure TForm1.btnMonKClick(Sender: TObject);

  var a,b,c : Single;
begin
  a := StrToFloat (edtoffBetr.Text) ;

  b := a+4.50;
  edtoffBetr.Text := FloatToStr(b);
end;

procedure TForm1.btnQuartEClick(Sender: TObject);

  var a,b,c : Single;
begin
  a := StrToFloat (edtoffBetr.Text) ;
  b := a+18;
  edtoffBetr.Text := FloatToStr(b);
end;

procedure TForm1.btnQuartKClick(Sender: TObject);

  var a,b,c : Single;
begin
  a := StrToFloat (edtoffBetr.Text) ;
  b := a+13.50;
  edtoffBetr.Text := FloatToStr(b);
end;

 procedure TForm1.btnSaveClick(Sender: TObject);

  var
 List:TStrings;

begin
  List := TStringList.Create;

  try


    List.Add('Vorname:              '+edtVorn.Text);
    List.Add('Nachname:             '+edtNachn.Text);
    List.Add('Altersstufe:          '+edtAlterst.Text);
    List.Add('Mitglied seit:        '+edtMitglS.Text);
    List.Add('Mitgliedbeitrag:      '+edtMBTG.Text + '€' + '/' + edtBeitragPro.Text);
    List.Add('Adresse:              '+edtAdr.Text);
    List.Add('Postleihzahl:         '+edtPLZ.Text);
    List.Add('Ort:                  '+edtOrt.Text);
    List.Add('Telefon:              '+edtTel.Text);
    List.Add('EMail:                '+edtEmail.Text);
    List.Add('Turniere:             '+MemTurn.Text);
    List.Add('offene Beträge:       '+edtoffBetr.Text + '/' + edtoffVon.Text +'€');

    if not DirectoryExists('C:/Mitgliederverwaltung/Mitglieder/') then
  ForceDirectories('C:/Mitgliederverwaltung/Mitglieder/');

    List.SaveToFile('C:/Mitgliederverwaltung/Mitglieder/'+edtVorn.Text + edtNachn.Text +'.MG');
  finally
    List.Free;
  end;
end;



procedure TForm1.btnHJKClick(Sender: TObject);

     var a,b,c : Single;
begin
  a := StrToFloat (edtoffBetr.Text) ;
  b := a+27;
  edtoffBetr.Text := FloatToStr(b);


  end;









procedure TForm1.edtoffBetrChange(Sender: TObject);
begin

end;





procedure TForm1.CheckGroup1Click(Sender: TObject);
begin

end;

procedure TForm1.chk1Change(Sender: TObject);

begin

end;

procedure TForm1.edtHJEClick(Sender: TObject);

  var a,b,c : Single;
 begin
  a := StrToFloat (edtoffBetr.Text) ;
  b := a+36;
  edtoffBetr.Text := FloatToStr(b);
end;




end.
Ein Bild vom Formblatt ist im Anhang!



wäre echt dankbar für Hilfe,

MFG Darky

Volker Z. 7. Okt 2013 23:03

AW: LoadFileFrom - Problem
 
Hallo,

und herzlich Willkommen in der DP

Zitat:

Ich (totaler Anfänger)
Macht nix, wird sich ändern :wink:

Zitat:

wenn ich die eingaben laden will, kommen die daten inklusive dem "vorname: " in das Eingabefeld zurück.
Wenn es stört, dann lass die Labels beim Speichern eben weg; oder: Du kopierst nur den relevanten Teil der Information in das entsprechende Edit (Stichwort Copy).

Zitat:

ausserdem bekomme ich die Fehlermeldung: "List index(13) out of bounds"
Es können nur so viele Einträge in Deiner StringList vorhanden sein, wie Zeilen in der entsprechenden Datei. Wenn Du beim Speichern Informationen zusammenziehst und diese in einer Zeile abspeicherst, dann können die Einzelinformationen natürlich beim späteren Einlesen nicht plötzlich an einer anderen Stelle (Zeile) vorliegen. Dein
Delphi-Quellcode:
edtBeitragPro.Text:=List[13];
muss daher zwangsläufig fehlschlagen (diese Zeile und die nachfolgenden hast Du nie gespeichert).
Also: Wenn Du schon für jedes Mitglied eine eigene Textdatei anlegst, dann schreib die entsprechenden Daten jeweils in eine (definierte) Zeile, so kannst Du die Daten später auch wieder auslesen. Besser: Nutze für Dein Vorhaben eine Datenbank.

Gruß

CarlAshnikov 8. Okt 2013 06:48

AW: LoadFileFrom - Problem
 
Im Prinzip muss du vor dem Laden jeder Zeile prüfen ob sie existiert. Bei Zeile "0" wird das ja schon gemacht. Dein Programm schreibt ja auch nur 12 Zeilen im Save wie soll es dann 16 Zeilen laden? Wieso lädst du Index 11 und 12 nicht?

Das Laden wird so sowieso nicht funktionieren wie erhofft. Um an die reinen Daten zu kommen musst du noch alles vor dem Doppelpunkt abschneiden und die Leerzeichen entfernen. Nimm dafür lieber eine Ini-Datei.

Diesmal war es recht offensichtlich, aber beim nächsten Problem bitte die Zeile des Fehlers mit angeben. Damit erhöht sich meist die Anzahl der Helfer und die Glaskugelsprüche werden weniger. :-D

DeddyH 8. Okt 2013 07:16

AW: LoadFileFrom - Problem
 
Und noch etwas ganz anderes: für Delphi-Codes bitte auch die Delphi-Tags benutzen (die Schaltfläche mit dem Helm im Beitragseditor), dann wird der Code auch passend hervorgehoben, was die Lesbarkeit erhöht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz