Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Probleme mit laden einer Textdatei


MH1987 - Fr 02.02.07 19:38
Titel: Probleme mit laden einer Textdatei
hi,

ich habe vor bei meiner datenbank im menu unter Datei, jeweils die letzten 4 geöffneten dateien anzugeben!

jedoch kommt ein fehler in der procedure lade(filename: string)!
wenn ich auf importieren drücke, benuzt der die selbe procedure aber es funktioniert!
woran liegt das?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
unit Film_Datenbank;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, NeuerFilm, Grids, ImgList, ExtCtrls;

type
  TFilm = record
            Name: string;
            Nummer: integer;
            Beschreibung: string;
            Bemerkung: string;
          end;
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei: TMenuItem;
    Exportieren: TMenuItem;
    Importieren: TMenuItem;
    Drucken: TMenuItem;
    Filme: TMenuItem;
    NeuerFilm: TMenuItem;
    FilmLoeschen: TMenuItem;
    FilmAendern: TMenuItem;
    Hilfe: TMenuItem;
    Ansicht: TMenuItem;
    FilmUebersicht: TMenuItem;
    FilmDetails: TMenuItem;
    FilmNummern: TMenuItem;
    OpenDialog1: TOpenDialog;
    SgDatenAusgabe: TStringGrid;
    Panel1: TPanel;
    Shape1: TShape;
    LF1: TMenuItem;
    LF2: TMenuItem;
    LF3: TMenuItem;
    LF4: TMenuItem;
    procedure ImportierenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure LF1Click(Sender: TObject);
  private
    procedure LastFilesAusgeben;
    procedure Lade(filename: string);
  public
    { Public-Deklarationen }
  end;

var
  Main: TForm1;
  filmliste: array [1..400of TFilm;
  lastFile: array [1..4of string;

implementation

{$R *.dfm}

procedure TForm1.Lade(filename: string);
var
  f: textfile;
  Name, Beschreibung, Bemerkung: string;
  Nummer, i: integer;
begin
  assignFile(f,filename);
  reset(f);
  i:= 1;
  while not eof(f) do
    begin
      readln(f, Name);
      filmListe[i].Name:= Name;
      readln(f, Nummer);
      filmListe[i].Nummer:= Nummer;
      readln(f, Beschreibung);
      filmListe[i].Beschreibung:= Beschreibung;
      readln(f, Bemerkung);
      filmListe[i].Bemerkung:= Bemerkung;
      inc(i);
    end;

  closeFile(f);
end;

procedure TForm1.ImportierenClick(Sender: TObject);
var
  i: integer;
begin
  if self.OpenDialog1.Execute
    then
      begin
        self.Lade(self.OpenDialog1.FileName);
        for i:= 4 downto 1 do
          if (i <> 1)
            then
              lastfile[i]:= lastfile[i-1];
        lastfile[1]:= self.OpenDialog1.FileName;
        self.LastFilesAusgeben;

        // hier kommt noch das speichern in die textdatei: 'lastfile.lf'

      end;
end;

procedure TForm1.LastFilesAusgeben;
begin
  self.LF1.Caption:= lastfile[1];
  self.LF2.Caption:= lastfile[2];
  self.LF3.Caption:= lastfile[3];
  self.LF4.Caption:= lastfile[4];
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lf: textfile;
  i: integer;
begin

  [..]

  for i:= 1 to 4 do lastFile[i]:= '';

  assignFile(lf,'lastfile.lf');
  reset(lf);
  i:= 1;
  while not eof(lf) do
    begin
      readln(lf, lastfile[i]);
      inc(i);
    end;
  closefile(lf);

  self.LastFilesAusgeben;

end;

procedure TForm1.LF1Click(Sender: TObject);
begin
  self.Lade(self.LF1.Caption);
end;

end.


achja, es kommt ein 'ungültiger Dateiname' fehler


gruß,
Matthias


Narses - Fr 02.02.07 20:20

Moin!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
...
procedure TForm1.Lade(filename: string);  
var  
  f: textfile;  
  Name, Beschreibung, Bemerkung: string;  
  Nummer, i: integer;  
begin  
  ShowMessage(Filename);
  assignFile(f,filename);  
  reset(f);
...

Was wird ausgegeben? ;)

cu
Narses


MH1987 - Fr 02.02.07 20:32

hmm. er gibt den richtigen pfad an.
kann es an dem ö liegen?
D:\Zubehör\Programmieren\Delphi\Filme_Final\Filme.fdb


MH1987 - Fr 02.02.07 20:40

her mal der ganze projekt ordner


MH1987 - Sa 03.02.07 14:29

ok, ich habe den fehler selber gefunden!

dadurch, dass ich die datei mit dem pfad aus dem Caption vom menu geladen habe, war in dem string ein unterstrich, so wie im menu bei datei unterm D.

also habe ich den aufruf abgeändert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.LF1Click(Sender: TObject);  
begin  
  self.Lade(self.LF1.Caption);  //alt

  self.Lade(lastfile[1]); //neu
end;


gruß
Matthias