![]() |
Delphi-Version: XE7
Festes Array zur Laufzeit füllen
Hallo ich würde gerne ein Array zur Laufzeit erstellen das bereits entsprechende Werte in sich trägt.
Als Veranschaulichung eine kleine Grafik ![]() Also in der ersten Spalte Buchstaben und in der zweiten Nummern aber als String. TestArray: array[1..26, 1..26] of String = (('A','6'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('B','12'), ('C','18')); Das scheint leider nicht zu klappen. Ich möchte die Werte im Array bereits vorab belegen also nicht dynamisch. Wer hilft mir :p? |
AW: Festes Array zur Laufzeit füllen
Du brauchst ein Array[1..26, 1..2] of String.
Du hast ja pro Buchstabe (26) nur 2 (nicht 26) Strings: Buchstabe und Zahl. Du kannst dieses Array im Quelltext als Konstante deklarieren:
Delphi-Quellcode:
Eine Array-Variable kannst du dynamisch (z.B. per Buttonklick o.ä.) nicht über diese Syntax füllen.
const
TestArray: array[1..26,1..2] of String = (('A','1'), ('B', '2'), ('C', '3'), ...); Da muss dann ne Schleife o.ä. her. |
AW: Festes Array zur Laufzeit füllen
Hallo und willkommen in der DP!
Es ist in unseren Forum üblich, den genauen Fehler zu benennen und nicht nur "es geht nicht".
Delphi-Quellcode:
const
TestArray: array [1 .. 27, 1 .. 2] of String = ( ('A', '6'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('B', '12'), ('C', '18') ); |
AW: Festes Array zur Laufzeit füllen
Alternativ ginge auch ein
Delphi-Quellcode:
, wenn man die Zahl gern als Zahl Integer haben möchte.
Array[1..27] of Record
Zählen müsste man können, wobei XE7 in der Fehlermeldung sogar die richtige Anzahl nennen sollte. Sonst wurde noch bissl was erwähnt. "Das scheint leider nicht zu klappen" ist keine Fehlerbeschreibung, aber da kann man gern die Fehlermeldungen kopieren (Strg+C) funktioniert in den Compiler-Meldungen (Log) und auch bei Dialogen (kopiert den Inhalt als Text). Und Bilder bitte an den Post anhängen, denn wenn in 2 Jahren jemand den Thread findet, ist das externe Bild bestimmt nicht mehr da und dem Post somit fehlen Informationen. |
AW: Festes Array zur Laufzeit füllen
Zitat:
Der Fehler lautete "[dcc32 Fehler] uMain.pas(22): E2072 Anzahl der Elemente (2) weicht von der Deklaration (26) ab" @himitsu Ich benutze imgur als Imagehoster sehr unwahrscheinlich, dass die demnächst dicht machen die wirds noch ne Weile geben |
AW: Festes Array zur Laufzeit füllen
Ausgehend von der Grafik würd ich ja ein
Delphi-Quellcode:
vorschlagen.
array[1..26] of Char
|
AW: Festes Array zur Laufzeit füllen
[QUOTE=0x92;1342162]
Zitat:
Delphi-Quellcode:
Aber vielleicht ist ein
const
TestArray: array [1 .. 27, 1 .. 2] of String = ( ('A', 'B','B'.....'C'), ('6', '12','12'....'18') );
Delphi-Quellcode:
doch die bessere Wahl?
Array of record
Gruß K-H |
AW: Festes Array zur Laufzeit füllen
[QUOTE=p80286;1342200]
Zitat:
Delphi-Quellcode:
unit uMain;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TMainForm = class(TForm) Button1: TButton; Edit1: TEdit; ResultMemo: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure InitalizeEnglishGematriaArray; function CalculateValue(Str: String): Integer; function GetGematriaValuefromChar(Chr: Char): Integer; { Private-Deklarationen } public { Public-Deklarationen } end; type TEnglishGematria = record Buchstabe: Char; Wert: Integer; end; var MainForm: TMainForm; EnglishGematriaArray : Array[0..25] of TEnglishGematria; implementation {$R *.dfm} procedure TMainForm.Button1Click(Sender: TObject); begin CalculateValue(Edit1.Text); end; function TMainForm.CalculateValue(Str: String): Integer; var Target: String; TargetLength: Integer; i: Integer; CharValue: Integer; begin ResultMemo.Clear; CharValue := 0; Result := 0; Target := UpperCase(Str); TargetLength := Length(Target); for i := 1 to TargetLength do begin CharValue := GetGematriaValuefromChar(Target[i]); ResultMemo.Lines.Add(' ' + Target[i] + ' ' + IntToStr(CharValue)); Result := Result + CharValue; end; Result := Result; ResultMemo.Lines.Add('+----------+'); ResultMemo.Lines.Add(' ' + IntToStr(Result)); end; procedure TMainForm.FormCreate(Sender: TObject); begin InitalizeEnglishGematriaArray; end; function TMainForm.GetGematriaValuefromChar(Chr: Char): Integer; var i: Integer; begin if (Chr = #0) OR (Chr = '') OR (Chr = ' ') then begin Result := 0; end else begin for i := 0 to 26 do begin if Chr = EnglishGematriaArray[i].Buchstabe then begin Result := EnglishGematriaArray[i].Wert; Exit; end; end; end end; procedure TMainForm.InitalizeEnglishGematriaArray; begin EnglishGematriaArray[0].Buchstabe := 'A'; EnglishGematriaArray[0].Wert := 6; EnglishGematriaArray[1].Buchstabe := 'B'; EnglishGematriaArray[1].Wert := 12; EnglishGematriaArray[2].Buchstabe := 'C'; EnglishGematriaArray[2].Wert := 18; EnglishGematriaArray[3].Buchstabe := 'D'; EnglishGematriaArray[3].Wert := 24; EnglishGematriaArray[4].Buchstabe := 'E'; EnglishGematriaArray[4].Wert := 30; EnglishGematriaArray[5].Buchstabe := 'F'; EnglishGematriaArray[5].Wert := 36; EnglishGematriaArray[6].Buchstabe := 'G'; EnglishGematriaArray[6].Wert := 42; EnglishGematriaArray[7].Buchstabe := 'H'; EnglishGematriaArray[7].Wert := 48; EnglishGematriaArray[8].Buchstabe := 'I'; EnglishGematriaArray[8].Wert := 54; EnglishGematriaArray[9].Buchstabe := 'J'; EnglishGematriaArray[9].Wert := 60; EnglishGematriaArray[10].Buchstabe := 'K'; EnglishGematriaArray[10].Wert := 66; EnglishGematriaArray[11].Buchstabe := 'L'; EnglishGematriaArray[11].Wert := 72; EnglishGematriaArray[12].Buchstabe := 'M'; EnglishGematriaArray[12].Wert := 78; EnglishGematriaArray[13].Buchstabe := 'N'; EnglishGematriaArray[13].Wert := 84; EnglishGematriaArray[14].Buchstabe := 'O'; EnglishGematriaArray[14].Wert := 90; EnglishGematriaArray[15].Buchstabe := 'P'; EnglishGematriaArray[15].Wert := 96; EnglishGematriaArray[16].Buchstabe := 'Q'; EnglishGematriaArray[16].Wert := 102; EnglishGematriaArray[17].Buchstabe := 'R'; EnglishGematriaArray[17].Wert := 108; EnglishGematriaArray[18].Buchstabe := 'S'; EnglishGematriaArray[18].Wert := 114; EnglishGematriaArray[19].Buchstabe := 'T'; EnglishGematriaArray[19].Wert := 120; EnglishGematriaArray[20].Buchstabe := 'U'; EnglishGematriaArray[20].Wert := 126; EnglishGematriaArray[21].Buchstabe := 'V'; EnglishGematriaArray[21].Wert := 134; EnglishGematriaArray[22].Buchstabe := 'W'; EnglishGematriaArray[22].Wert := 138; EnglishGematriaArray[23].Buchstabe := 'X'; EnglishGematriaArray[23].Wert := 144; EnglishGematriaArray[24].Buchstabe := 'Y'; EnglishGematriaArray[24].Wert := 150; EnglishGematriaArray[25].Buchstabe := 'Z'; EnglishGematriaArray[25].Wert := 156; end; |
AW: Festes Array zur Laufzeit füllen
Nee nicht so kompliziert...
Delphi-Quellcode:
type
TEnglishGematria = record Buchstabe: Char; Wert: Integer; end; Const EnglishGematriaArray : Array[0..25] of TEnglishGematria = ((Buchstabe:'A';Wert:6), (Buchstabe:'B';Wert:12), ... (Buchstabe:'Z';Wert:156)); |
AW: Festes Array zur Laufzeit füllen
Zitat:
Die Syntax für eine
Delphi-Quellcode:
ist ja nun nicht soo eingängig.
const Array of record
(aber immer noch besser als die ursprüngliche Version) Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz