AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Festes Array zur Laufzeit füllen

Ein Thema von 0x92 · begonnen am 6. Jul 2016 · letzter Beitrag vom 9. Jul 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von 0x92
0x92

Registriert seit: 14. Feb 2014
6 Beiträge
 
#1

Festes Array zur Laufzeit füllen

  Alt 6. Jul 2016, 16:45
Delphi-Version: XE7
Hallo ich würde gerne ein Array zur Laufzeit erstellen das bereits entsprechende Werte in sich trägt.

Als Veranschaulichung eine kleine Grafik

http://i.imgur.com/tiuR9Ws.png


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?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Festes Array zur Laufzeit füllen

  Alt 6. Jul 2016, 16:58
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:
const
  TestArray: array[1..26,1..2] of String = (('A','1'), ('B', '2'), ('C', '3'), ...);
Eine Array-Variable kannst du dynamisch (z.B. per Buttonklick o.ä.) nicht über diese Syntax füllen.
Da muss dann ne Schleife o.ä. her.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Festes Array zur Laufzeit füllen

  Alt 6. Jul 2016, 16:58
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')
    );
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Festes Array zur Laufzeit füllen

  Alt 6. Jul 2016, 18:37
Alternativ ginge auch ein Array[1..27] of Record , wenn man die Zahl gern als Zahl Integer haben möchte.
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von 0x92
0x92

Registriert seit: 14. Feb 2014
6 Beiträge
 
#5

AW: Festes Array zur Laufzeit füllen

  Alt 7. Jul 2016, 15:01
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')
    );
Vielen Dank auch an die anderen 2 Benutzer der DP

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
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Festes Array zur Laufzeit füllen

  Alt 7. Jul 2016, 16:42
Ausgehend von der Grafik würd ich ja ein array[1..26] of Char vorschlagen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Festes Array zur Laufzeit füllen

  Alt 7. Jul 2016, 21:56
[QUOTE=0x92;1342162]
Der Fehler lautete "[dcc32 Fehler] uMain.pas(22): E2072 Anzahl der Elemente (2) weicht von der Deklaration (26) ab"
Wenn ich die Fehlermeldung richtig interpretiere sollte es so eigentlich funktionieren:
Delphi-Quellcode:
const
  TestArray: array [1 .. 27, 1 .. 2] of String =
    (
    ('A', 'B','B'.....'C'),
    ('6', '12','12'....'18')
     );
Aber vielleicht ist ein Array of record doch die bessere Wahl?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von 0x92
0x92

Registriert seit: 14. Feb 2014
6 Beiträge
 
#8

AW: Festes Array zur Laufzeit füllen

  Alt 8. Jul 2016, 10:17
[QUOTE=p80286;1342200]
Der Fehler lautete "[dcc32 Fehler] uMain.pas(22): E2072 Anzahl der Elemente (2) weicht von der Deklaration (26) ab"
Wenn ich die Fehlermeldung richtig interpretiere sollte es so eigentlich funktionieren:
Delphi-Quellcode:
const
  TestArray: array [1 .. 27, 1 .. 2] of String =
    (
    ('A', 'B','B'.....'C'),
    ('6', '12','12'....'18')
     );
Aber vielleicht ist ein Array of record doch die bessere Wahl?

Gruß
K-H
Fand die Lösung mit dem Array of Record am schönsten vom Zugriff her

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;
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Festes Array zur Laufzeit füllen

  Alt 8. Jul 2016, 11:14
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));
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Festes Array zur Laufzeit füllen

  Alt 8. Jul 2016, 13:09
Nee nicht so kompliziert...
das halte ich aber für einen Euphemismus.
Die Syntax für eine const Array of record ist ja nun nicht soo eingängig.
(aber immer noch besser als die ursprüngliche Version)


Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 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