Entwickler-Ecke

Dateizugriff - Komisches Phänomen beim Auslesen einer Datei


Krumnix - Mo 07.03.05 15:36
Titel: Komisches Phänomen beim Auslesen einer Datei
Hallo.

Irgendwie versteh ich das nicht.
Folgendes:
Wenn ich in meinem Programm ein neues Form aufrufe dann verschwindet seit kurzem Text in FormX.Caption also die Benennung des Fenster.
Folgender Programmcode wurde neu reingestellt in FormActivate:


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:
 j := 0;
 p := 0;
 AnfangText := 1;
 Text := '';
 GetDir(0,F1);
 if FileExists(F1 + '\DATEN\Histo\kk' + inttostr(Kunde[AktuellerKunde].Kundennummer) + '.dfs'then
  begin
   AssignFile(F, F1 + '\DATEN\Histo\kk' + inttostr(Kunde[AktuellerKunde].Kundennummer) + '.dfs');
   Reset(F);
   while not Eof(F) do
    begin
     Readln(F, S);
     if j > 0 then
      begin
       if j <= AnzahlKunden then
        begin
         for r := 1 to length(S) do
          begin
           if S[r] = ';' then
            begin
             case p of
             0begin
                 for t := AnfangText to r - 1 do
                  Text := (Text + s[t]);
                 SchuhNR := Text;
                 p := 1;
                 Text := '';
                 AnfangText := r + 1;
                end;
             1begin
                 p := 2;
                 Text := '';
                 AnfangText := r + 1;
                end;
             2begin
                 p := 3;
                 Text := '';
                 AnfangText := r + 1;
                end;
             3begin
                 for t := AnfangText to r - 1 do
                  Text := (Text + s[t]);
                 if SchuhNR = '1' then Label54.Caption := Text;
                 if SchuhNR = '2' then Label56.Caption := Text;
                 if SchuhNR = '3' then Label58.Caption := Text;
                 p := 4;
                 Text := '';
                 AnfangText := r + 1;
                end;
             end;
            end;
          end;
        end;
       p := 0;
       AnfangText := 1;
       SchuhNR := '0';
      end;
     j := j + 1;
    end;
   CloseFile(F);
  end;


Wenn ich nun auf die Buttons drücke, die auch diesen Code seit neustem drin haben, dann erscheint oben in der Leiste des Fenster immer so kryptische Zeichen und dann sind sie auch wieder weg.
Kann sich das jemand erkläre?

PS: Die Daten liegen vom Kunden als CSV-Datei vor, deswegen diese komplizierte Struktur *g*


retnyg - Mo 07.03.05 15:42

wundert mich nicht dass du dich bei der formatierung in deinem eigenen source nicht mehr auskennst !


Karlson - Mo 07.03.05 15:43

was ist an der Formatierung denn auszusetzen? :?!?:


Krumnix - Mo 07.03.05 18:07

Also die Formatierung ist doch übersichtlich :shock:
Ich will halt nur wissen, warum in der Titel-Leiste immer der Text, denn ich festgelegt habe weg ist, wenn ich dieses Form öffne und warum es manchmal in dieser so komisch flackert..... :(


wdbee - Mo 07.03.05 18:12

Die Titelzeile ist TDeinForm.Caption. Wenn du nun irgendwo in einer TDeinForm-Methode Caption := Aktuelle Zeile stehen hast statt StatusLabel.Caption := Aktuelle Zeile, dann hast du genau diesen Effekt. Ich habe das in dem hier angegebenen Teil deines Codes nicht gesehen, aber kontrollier das mal.


Krumnix - Mo 07.03.05 18:23

Hab ich mal grad geschaut. Ist nix drin. Es war ja auch vorher nicht. Erst als ich diesen Teil, den ich da oben gepostet habe, ist dieser Fehler entstanden. Der ist zwar nicht schlimm und es stört niemanden. Aber ich würde gerne wissen, wieso?


Delete - Mo 07.03.05 18:25


Delphi-Quelltext
1:
2:
GetDir(0,F1);  
 if FileExists(F1 + '\DATEN\Histo\kk' + inttostr(Kunde[AktuellerKunde].Kundennummer) + '.dfs'then

Ein mal einen Öffnen- oder Speichern-Dialog oder ein anderes Arbeitsverzeichnis in der Verknüpfung angegeben und er wird die Dateien nicht mehr finden, denn das aktuelle Verzeichnis muss nicht zwingend das Verzeichnis der Exe sein.


Krumnix - Mo 07.03.05 18:29

Ja, die EXE liegt immer im Hautpverzeichnis. Und die anderen Daten in Unterordner. Die werden vom Benutzer sowieso nicht verändert. Deswegen hab ich das so gemacht. Oder gibs da ne andere Möglichkeit den Dateipfad anzugeben, wenn ich das Ding nachher per Installation auf die verschiedenen Rechner übertrage und er nie weiß in welchen Verzeichnis er dann ist? Aber das ist doch nicht das Problem mit dem ich kämpfe....


Delete - Mo 07.03.05 18:34

user profile iconKrumnix hat folgendes geschrieben:
Ja, die EXE liegt immer im Hautpverzeichnis. Und die anderen Daten in Unterordner. Die werden vom Benutzer sowieso nicht verändert.

Was macht dich da so sicher?

Zitat:

Deswegen hab ich das so gemacht. Oder gibs da ne andere Möglichkeit den Dateipfad anzugeben, wenn ich das Ding nachher per Installation auf die verschiedenen Rechner übertrage und er nie weiß in welchen Verzeichnis er dann ist?

ParamStr(0) liefert dir das Verzeichnis un den Exe-Namen deiner anwendung.

Zitat:

Aber das ist doch nicht das Problem mit dem ich kämpfe....

Stimmt, aber ich wollte es trotzdem mal erwähnen um dir späteren Ärger zu ersparen.


Tino - Mo 07.03.05 18:34

Hallo!

user profile iconKrumnix hat folgendes geschrieben:
Ja, die EXE liegt immer im Hautpverzeichnis. Und die anderen Daten in Unterordner. Die werden vom Benutzer sowieso nicht verändert.

Da hast du was falsch verstanden. Es geht hier um das Arbeitsverzeichnis. Wenn Du mit GetDir das Arbeitsverzeichnis holst und versuchts damit die Dateien zu öffnen kann das, aus den von Luckie genannten Gründen, auch schon mal schief gehen. Was du brauchst ist das Anwendungsverzeichnis und nicht das Arbeitsverzeichnis:


Delphi-Quelltext
1:
f1 := ExtractFilePath(Application.ExeName);                    


Gruß
Tino


Krumnix - Mo 07.03.05 18:40

Axo.... *vomschlauchaufsteh*
Jedoch sollte das mein anderes Problem nicht lösen. Denn es ist immer noch da :(


wdbee - Mo 07.03.05 18:49

Sorry, aber du verwendest wohl eine nicht deklarierte Variable. Lass mich raten: Sie heißt Text?


Krumnix - Mo 07.03.05 19:37

Ne. Wenn ich ja nicht deklariert hätte oder was vergessen, dann würde der Compiler ja was sagen. Aber das Prog. läuft ja. Und es ist nicht schlimm. Es stört halt nur, weil man nicht genau weiß in welchem Fenster man ist, wenn man das Programm nicht kennt.


wdbee - Mo 07.03.05 19:45

Text ist in einer TForm-Methode ein anderer Name für TForm.Caption. :!:
Da kommt nie eine Fehlermeldung.


Krumnix - Mo 07.03.05 20:12

:shock: Ups, das hab ich nicht gewusst. Und es funktioniert.... Wahnsinn.... Ich danke dir :D