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 eines Array - Aber wie??? (https://www.delphipraxis.net/97737-array-eines-array-aber-wie.html)

TylerDurden 15. Aug 2007 09:54


Array eines Array - Aber wie???
 
Hallo zusammen!

Habe mehrere Arrays mit unterschiedlicher Länge! Diese möchte ich in einem neuen Array zusammenfassen!
Wie soll ich das angehen?

Habs bereits folgendermassen versucht:

arrayVonArray: array[0..2] of array = (blabla1, blabla2, blabla3)

Klappt aber nicht!

Kann mir da jemand bitte weiterhelfen?

Vielen Dank schon mal!

halinchen 15. Aug 2007 10:03

Re: Array eines Array - Aber wie???
 
Delphi-Quellcode:
type
  TDeinType = (blabla1, blabla2, blabla3);
  arrayVonArray: array[0..2] of array of TDeinType;

TylerDurden 15. Aug 2007 10:28

Re: Array eines Array - Aber wie???
 
Danke für die rasche Antwort!
Leider klappts noch nicht so ganz :cry:

Wo bzw. wie kann ich meine Arrays befüllen?

Wenn ich die Daten in die Arrays schreiben möchte kommt folgender Fehler:

Bezeichner redefiniert: 'blabla1'
...

mkinzler 15. Aug 2007 10:33

Re: Array eines Array - Aber wie???
 
Das blabla eins war ja nur ein Platzhalter für das, was du in deiner Aufzählung haben willst.

TylerDurden 15. Aug 2007 10:39

Re: Array eines Array - Aber wie???
 
:gruebel: Jetzt versteh ich gar nichts mehr!

Nochmal kurz die Situation:

- ich habe drei Arrays die mit unterschiedlich vielen Werten gefüllt sind
- jetzt möchte ich einen Array bilden der die drei oben genannten enthält, sodass ich per Index auf die Arrays zugreifen kann

Ziel (Bsp.):

wert := ArrayVonArrays[0][1];
=> gibt mir den 2.Wert des 1.Array

Entweder ich steh total auf dem Schlauch oder ....?

Muetze1 15. Aug 2007 10:42

Re: Array eines Array - Aber wie???
 
Zitat:

Zitat von TylerDurden
- ich habe drei Arrays die mit unterschiedlich vielen Werten gefüllt sind

aber alle 3 Arrays nutzen für ihre Elemente den gleichen Typ, hoffe ich doch mal. Welcher ist das?

TylerDurden 15. Aug 2007 10:44

Re: Array eines Array - Aber wie???
 
Ja, alle nutzen den gleichen Typ = WideChar

Muetze1 15. Aug 2007 10:46

Re: Array eines Array - Aber wie???
 
also dann so:

Delphi-Quellcode:
Type
  TDeinGrossesArray = array[0..1] of array of WideChar;

var
  DeineDickeVariable: TDeinGrossesArray;

TylerDurden 15. Aug 2007 11:12

Re: Array eines Array - Aber wie???
 
jetzt bekomm ich ne Fehlermeldung beim befüllen von 'DeineDickeVariable'!

Inkompatible Typen: 'Array' und 'dynamic Array'

DeddyH 15. Aug 2007 11:12

Re: Array eines Array - Aber wie???
 
Zeig doch mal ein wenig Quellcode.

TylerDurden 15. Aug 2007 11:15

Re: Array eines Array - Aber wie???
 
Delphi-Quellcode:
type
   TSonderzeichen = array[0..2] of array of WideChar;

const
   anzahlSprachen = 3;

   tuerkischesAlphabet: array[0..9] of WideChar = (#226, #199, #231, #286,
      #287, #304, #305, #238, #350, #351);

   kyrillischesAlphabet: array[0..63] of WideChar =(#1040, #1041, #1042,
      #1043, #1044, #1045, #1046, #1047, #1048, #1049, #1050, #1051, #1052,
      #1053, #1054, #1055, #1056, #1057, #1058, #1059, #1060, #1061, #1062,
      #1063, #1064, #1065, #1066, #1067, #1068, #1069, #1070, #1071, #1072,
      #1073, #1074, #1075, #1076, #1077, #1078, #1079, #1080, #1081, #1082,
      #1083, #1084, #1085, #1086, #1087, #1088, #1089, #1090, #1091, #1092,
      #1063, #1094, #1095, #1096, #1097, #1098, #1099, #1100, #1101, #1102,
      #1103);
   albanischesAlphabet: array[0..anzahlSprachen] of WideChar =(#199, #231, #203, #235);

   sonderzeichenArray: TSonderzeichen = (tuerkischesAlphabet,
      kyrillischesAlphabet, albanischesAlphabet);

DeddyH 15. Aug 2007 11:22

Re: Array eines Array - Aber wie???
 
Wäre das über einen Record nicht einfacher zu lösen? Ansonsten fällt mir spontan nur ein Array of Pointer ein, da die Längen unterschiedlich sind.

3_of_8 15. Aug 2007 11:52

Re: Array eines Array - Aber wie???
 
Das ganze geht entweder mit einem Record, wie bereits gesagt, oder aber mit dynamischen Arrays, die du dann aber auch erst zur Laufzeit zuweisen darfst.

TylerDurden 15. Aug 2007 14:00

Re: Array eines Array - Aber wie???
 
Wie würde das ganze dann mit einem Array of Pointer aussehen?

DeddyH 15. Aug 2007 15:26

Re: Array eines Array - Aber wie???
 
Ich hoffe, ich habe keine groben Schnitzer drin:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  PtuerkischesAlphabet = ^TtuerkischesAlphabet;
  TtuerkischesAlphabet = array[0..9] of WideChar;

  PkyrillischesAlphabet = ^TkyrillischesAlphabet;
  TkyrillischesAlphabet = array[0..63] of WideChar;

  PalbanischesAlphabet = ^TalbanischesAlphabet;
  TalbanischesAlphabet = array[0..3] of WideChar;

  TSonderzeichen = array[0..2] of Pointer;

const
  tuerkischesAlphabet: TtuerkischesAlphabet = (#226, #199, #231, #286,
      #287, #304, #305, #238, #350, #351);

  kyrillischesAlphabet: TkyrillischesAlphabet =(#1040, #1041, #1042,
      #1043, #1044, #1045, #1046, #1047, #1048, #1049, #1050, #1051, #1052,
      #1053, #1054, #1055, #1056, #1057, #1058, #1059, #1060, #1061, #1062,
      #1063, #1064, #1065, #1066, #1067, #1068, #1069, #1070, #1071, #1072,
      #1073, #1074, #1075, #1076, #1077, #1078, #1079, #1080, #1081, #1082,
      #1083, #1084, #1085, #1086, #1087, #1088, #1089, #1090, #1091, #1092,
      #1063, #1094, #1095, #1096, #1097, #1098, #1099, #1100, #1101, #1102,
      #1103);

  albanischesAlphabet: TalbanischesAlphabet =(#199, #231, #203, #235);

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    Sonderzeichen: TSonderzeichen;
    p1,p2,p3: Pointer;
    function GetCharAtArrayPos(const MainIndex,ArrIndex: integer): WideChar;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetMem(p1,SizeOf(tuerkischesAlphabet));
  PtuerkischesAlphabet(p1)^ := tuerkischesAlphabet;
  Sonderzeichen[0] := p1;
  GetMem(p2,SizeOf(kyrillischesAlphabet));
  PkyrillischesAlphabet(p2)^ := kyrillischesAlphabet;
  Sonderzeichen[1] := p2;
  GetMem(p3,SizeOf(albanischesAlphabet));
  PalbanischesAlphabet(p3)^ := albanischesAlphabet;
  Sonderzeichen[2] := p3;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeMem(p1,SizeOf(PtuerkischesAlphabet(p1)^));
  FreeMem(p2,SizeOf(PkyrillischesAlphabet(p2)^));
  FreeMem(p3,SizeOf(PalbanischesAlphabet(p3)^));
end;

function TForm1.GetCharAtArrayPos(const MainIndex,ArrIndex: integer): WideChar;

    procedure ShowError(const Msg: string);
    begin
      raise Exception.Create(Msg);
      exit;
    end;

begin
  Result := #0;
  case MainIndex of
    0: if ArrIndex in [0..9] then
         Result := PtuerkischesAlphabet(Sonderzeichen[MainIndex])^[ArrIndex]
       else
         ShowError('ArrIndex out of bounds');
    1: if ArrIndex in [0..63] then
         Result := PkyrillischesAlphabet(Sonderzeichen[MainIndex])^[ArrIndex]
       else
         ShowError('ArrIndex out of bounds');
    2: if ArrIndex in [0..3] then
         Result := PalbanischesAlphabet(Sonderzeichen[MainIndex])^[ArrIndex]
       else
         ShowError('ArrIndex out of bounds');
    else ShowError('MainIndex out of bounds');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(Format('%d',[Ord(GetCharAtArrayPos(2,3))]));
end;

end.

TylerDurden 15. Aug 2007 15:33

Re: Array eines Array - Aber wie???
 
:shock: :shock: :shock:
Vielen Dank für deine Ausführungen!

Werds mal so versuchen!

Khabarakh 15. Aug 2007 16:19

Re: Array eines Array - Aber wie???
 
@DeddyH: Sorry, aber: lol?
Wenn du sowieso ein Case benutzt, kannst du doch direkt auf die drei Ausgangsarrays zugreifen, wozu dann das Pointergefummele?

Die (afaik) kürzeste Lösung dürfte folgende sein:
Delphi-Quellcode:
  type
   TSonderzeichen = array[0..2] of WideString; //!

const
   anzahlSprachen = 3;

   tuerkischesAlphabet: array[0..9] of WideChar = (#226, #199, #231, #286,
      #287, #304, #305, #238, #350, #351);
[...]
  sonderzeichenArray[0] := tuerkischesAlphabet;

TylerDurden 16. Aug 2007 07:31

Re: Array eines Array - Aber wie???
 
Vielen Dank für eure Hilfen!
Habs jetzt hinbekommen!

Werd euch weiterempfehlen :-D


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