Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 6210 Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz
Beitrag
von Mathias » Sa 13. Jan 2024, 19:56
Dank pas2js habe ich etwas ganz kurriges entdeckt.
Bei einem Array-Index sind auch Strings möglich.
Es kommt mir da jetzt keine sinnvolle Anwendung in den Sinn, ausser bei einer externen pas2js-classe.
Vielleicht weis einer von euch etwas ?
Code: Alles auswählen
type
TTestObject = class(TObject)
private
function GetProperties(Name: string): integer;
procedure SetProperties(Name: string; AValue: integer);
public
property Properties[Name: string]: integer read GetProperties write SetProperties; default;
end;
{ TJSObject }
function TTestObject.GetProperties(Name: string): integer;
var
err: integer;
begin
val(Name, Result, err);
end;
procedure TTestObject.SetProperties(Name: string; AValue: integer);
begin
WriteLn(AValue);
// Properties[Name]:=123467;
end;
var
test: TTestObject;
begin
test := TTestObject.Create;
WriteLn(test['1234']);
test['blabla'] := 4567;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
PascalDragon
Beiträge: 834 Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München
Beitrag
von PascalDragon » So 14. Jan 2024, 20:14
Mathias hat geschrieben: ↑ Sa 13. Jan 2024, 19:56
Dank pas2js habe ich etwas ganz kurriges entdeckt.
Bei einem Array-Index sind auch Strings möglich.
Du hast also noch nie wirklich die
Values Eigenschaft einer
TStringList benutzt?
Und nur falls es dich überraschen sollte: es können auch mehrere Indices genutzt werden. Zum Beispiel hat das
TCustomStringGrid die Eigenschaft
Cells :
Code: Alles auswählen
property Cells[Col, Row: Integer]: String read GetCells write SetCells;
(und nein, nicht alle Indices einer Indexeigenschaft müssen vom gleichen Typ sein)
FPC Compiler Entwickler
Mathias
Beiträge: 6210 Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz
Beitrag
von Mathias » Mo 15. Jan 2024, 17:55
Du hast also noch nie wirklich die Values Eigenschaft einer TStringList benutzt?
Nein, habe ich nicht, daher habe ich gerade folgendes probiert, aber es kommt nur ein Leeestring raus.
Code: Alles auswählen
var
sl: TStringList;
s: string;
begin
sl := TStringList.Create;
sl.Add('111');
sl.Add('222');
sl.Add('333');
sl.Add('123456');
s := sl.Values['56'];
WriteLn(Length(s));
WriteLn(s);
s := sl.Values['222'];
WriteLn(Length(s));
WriteLn(s);
sl.Free;
Und nur falls es dich überraschen sollte: es können auch mehrere Indices genutzt werden. Zum Beispiel hat das TCustomStringGrid die Eigenschaft Cells:
Dies ist mir bekannt, das es mehrdimensional auch möglich ist.
Aber eben nur mit Integer-Index.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
theo
Beiträge: 10500 Registriert: Mo 11. Sep 2006, 19:01
Beitrag
von theo » Mo 15. Jan 2024, 19:37
Mathias hat geschrieben: ↑ Mo 15. Jan 2024, 17:55
Nein, habe ich nicht, daher habe ich gerade folgendes probiert, aber es kommt nur ein Leeestring raus.
Vielleicht mal die Doku lesen, welche dir PascalDragon verlinkt hat?
Code: Alles auswählen
var
sl: TStringList;
s: string;
begin
sl := TStringList.Create;
sl.NameValueSeparator:='=';
sl.Add('a=111');
sl.Add('b=222');
sl.Add('c=333');
sl.Add('d=123456');
s := sl.Values['c'];
writeln(s);
sl.Free;
end;
Mathias
Beiträge: 6210 Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz
Beitrag
von Mathias » Di 16. Jan 2024, 14:02
Vielleicht mal die Doku lesen, welche dir PascalDragon verlinkt hat?
Dies habe ich gelesen, aber anscheinend nicht verstanden.
Aber ich sehe trotzdem nicht für was man dies gebrauchen könnte.
Hast du ein Beispiel ?
Einzig in einer List- oder ComboBox.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
theo
Beiträge: 10500 Registriert: Mo 11. Sep 2006, 19:01
Beitrag
von theo » Di 16. Jan 2024, 14:23
Mathias hat geschrieben: ↑ Di 16. Jan 2024, 14:02
Hast du ein Beispiel ?
Einzig in einer List- oder ComboBox.
Das ist eigentlich offensichtlich. Name-Wert Paare sind ja fundamental.
Du hast z.B. eine Datei "test.txt" mit folgenden Name-Wert Paaren:
Code: Alles auswählen
margin: 25px;
background-color: rgb(240,240,240);
font-family: arial, sans-serif;
font-size: 14px;
Mit TStrings.Values kannst du fast "gratis" einen Wert auslesen.
Code: Alles auswählen
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.NameValueSeparator := ':';
sl.LoadFromFile('test.txt');
Writeln(sl.Values['font-family']);
sl.Free;
end;
PascalDragon
Beiträge: 834 Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München
Beitrag
von PascalDragon » Di 16. Jan 2024, 21:01
Mathias hat geschrieben: ↑ Di 16. Jan 2024, 14:02
Aber ich sehe trotzdem nicht für was man dies gebrauchen könnte.
Hast du ein Beispiel ?
Was
theo sagte. Der
TValueListEditor basiert auch darauf.
Im
fcl-web -Framework kannst du mit solchen Eigenschaften auf die Werte der HTTP Header zugreifen.
Und die Typen
fgl.TFPGMap<,> und
Generics.Collections.TDictionary<,> erlauben dir beliebige Schlüssel (*) und Werte zu verbinden und du kannst dann über eine Eigenschaft, welche den Key-Typ als Typ hat auf den Wert zugreifen.
(*) solange die Schlüssel eindeutig sind und einer Ordnung unterliegen
FPC Compiler Entwickler