Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi array-typ erforderlich (https://www.delphipraxis.net/147625-array-typ-erforderlich.html)

daNiii 12. Feb 2010 15:34


array-typ erforderlich
 
Obwohl ich ein array benütze kommt an gekenntzeichneter Stelle meines Programmcodes der Fehler: Array-typ erforderlich


Delphi-Quellcode:
var
  Form1: TForm1;
   Position: array [1..5,1..28] of string;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Zeile_eingabe, Spalte_eingabe: integer;
gesucht: string;
begin
Zeile_eingabe:= strtoint(ed_zeile.text);
Spalte_eingabe:= strtoint(ed_spalte.text);
gesucht:= Position[Spalte_eingabe,Zeile_eingabe]; //Fehler

Memo1.lines.clear;
Memo1.lines.add(gesucht);

end;

procedure TForm1.FormShow(Sender: TObject);
var

  Zeile, Spalte, stringlaenge: integer;
  Spalteninhalt, Zelleninhalt: string;
Daten: tstrings;
ZeAnzahl, wo: integer;
begin
Memo1.lines.clear;


Daten := TStringList.Create;
Daten.LoadFromFile(extractfilepath(application.exename) +'daten.txt');
ZeAnzahl:= 0;

for Zeile := 1 to 28 do      begin
 ZeAnzahl:= ZeAnzahl +1;
 Spalteninhalt:= Daten.strings[ZeAnzahl];

              for Spalte := 1 to 5 do begin

              Zelleninhalt:= Spalteninhalt;
                 wo:= pos(';', Zelleninhalt);
                 Zelleninhalt:= Copy(Spalteninhalt,1,wo-1);
                 Position[Spalte, Zeile]:= Zelleninhalt;
                 stringlaenge:= Length(Spalteninhalt);
                 Spalteninhalt:= Copy(Spalteninhalt,wo+1,stringlaenge-wo+1);


              end;
    end;

Daten.free;


end;

s-off 12. Feb 2010 15:38

Re: array-typ erforderlich
 
'Position' ist eine Property von TForm...

Edit: um so etwas zu vermeiden, solltest Du Präfixe verwenden.

daNiii 12. Feb 2010 15:43

Re: array-typ erforderlich
 
Ja, aber dass kann doch nicht der Fehler sein, wenn Button1 auch in TForm1 liegt.

himitsu 12. Feb 2010 15:50

Re: array-typ erforderlich
 
Sowas kommt von den bösen globalen Variablen und davon, das TCustomForm ein Property Namens "Position" besitzt.

OK, erstmal ist es blöd, wenn es zwei "Werte" mit dem selben Namen gibt,
aber hätte man dieses "Position" als private Variable der Form deklariert, dann würde sie noch vor dem "Position" der Form stehen und es wäre dieses Problem nicht aufgetreten.

p80286 12. Feb 2010 15:55

Re: array-typ erforderlich
 
Was hier als "Position" bezeichnet wird ist doch wohl eine "Positionssammlung" oder "Positionsarray" oder "aPositionen" oder was auch immer!

Man kann es nicht oft genug sagen, Leute nehmt vernünftige, sprechende Variablennamen.

Gruß
K-H
Zitat:

Zitat von himitsu
Sowas kommt von den bösen globalen Variablen und davon, das TCustomForm ein Property Namens "Position" besitzt.

OK, erstmal ist es blöd, wenn es zwei "Werte" mit dem selben Namen gibt,
aber hätte man dieses "Position" als private Variable der Form deklariert, dann würde sie noch vor dem "Position" der Form stehen und es wäre dieses Problem nicht aufgetreten.

und wie kommt man dann an die Form.Position?
K-H

sirius 12. Feb 2010 15:57

Re: array-typ erforderlich
 
Zitat:

Zitat von himitsu
aber hätte man dieses "Position" als private Variable der Form deklariert, dann würde sie noch vor dem "Position" der Form stehen und es wäre dieses Problem nicht aufgetreten.

Und dann wäre sogar ein Hinweis erschienen.

himitsu 12. Feb 2010 16:34

Re: array-typ erforderlich
 
Zitat:

Zitat von p80286
und wie kommt man dann an die Form.Position?

Wenn der Compiler dieses überschreiben läßt, dann
Delphi-Quellcode:
x := inherited Position;
und nochmal alles in Kurz:
- "ordentliche" Namen verwenden
- so nach wie möglich an der Ebene deklarieren, wo es gebraucht wird
(global ist am Weitesten weg)

gloable Variablen liegen sozusagen in der aller untersten Deklarations-Ebene


PS: TDE zeigt sogar an wo und wie das "Position" deklariert wurde.
Dort hätte man mal zuerst nachsehen sollen, als dieses Problem auftrat.

Hawkeye219 12. Feb 2010 17:01

Re: array-typ erforderlich
 
Hallo,
Zitat:

Zitat von sirius
Und dann wäre sogar ein Hinweis erschienen.

Es gibt keine Warnung, die neue Variable überdeckt einfach die vorhandene Eigenschaft.

Da es sich um ein String-Array handelt, enthält es vermutlich keine Positionen. Ein sprechender Name würde hier tatsächlich sehr zum Verständnis beitragen, weil der Dateiname ("daten.txt") leider auch keinen Aufschluss über den Inhalt gibt. Wir wissen nur, dass die Datei mindestens 29 Zeilen enthalten sollte, sonst kommt es in der FOR-Schleife zu einer Index-Überschreitung. Die erste Zeile der Datei wird offenbar nicht gebraucht.

Gruß Hawkeye


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