Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Farklı alanları olan array
#1
Arkadaşlar merhaba. 
Array konusunda bir bilgiye ihtiyacım var. Daha önce bu şekilde bir array ihtiyacım olmamıştı.
Bi array oluşturduğumuzu düşünün bunun içerisi tıpkı bir tablo gibi olması gerekiyor yani
Birinci sütunda string alan ikinci sütunda integer alan üçüncü sütunda double alan.

array of array of string şeklinde değilde yukarıdaki gibi bir array yapısını nasıl sağlarım.
Cevapla
#2
Şöyle temel bir örnek işini görecektir. 
Type
  tBilgiler = Record
    strAlan : string;
    intAlan : integer;
    dblAlan : double;
  end;
  tBilgiArray = Array of tBilgiler;


function RastgeleVeriOlursur(BilgiSay: Integer): tBilgiArray;
var
  i : Integer;
begin
  Randomize;

  SetLength( Result, BilgiSay );
  for i := 0 to BilgiSay-1 do begin
    Result[i].dblAlan := Random( 100 ) + 1;
    Result[i].intAlan := Trunc( Result[i].dblAlan );
    Result[i].strAlan := IntToStr( Result[i].intAlan );
  end;
end;


Kullanımı :
procedure TForm1.Button1Click(Sender: TObject);
var
  Sonuclar  : tBilgiArray;
  i         : Integer;
begin
  Sonuclar := RastgeleVeriOlursur( 10 );
  for i := Low(Sonuclar) to High(Sonuclar) do
    ShowmessageFmt(' %s - %d - %f ' ,[ Sonuclar[i].strAlan, Sonuclar[i].intAlan, Sonuclar[i].dblAlan ]);
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#3
(09-01-2021, Saat: 16:23)mrmarman Adlı Kullanıcıdan Alıntı: Şöyle temel bir örnek işini görecektir. 
Type
  tBilgiler = Record
    strAlan : string;
    intAlan : integer;
    dblAlan : double;
  end;
  tBilgiArray = Array of tBilgiler;


function RastgeleVeriOlursur(BilgiSay: Integer): tBilgiArray;
var
  i : Integer;
begin
  Randomize;

  SetLength( Result, BilgiSay );
  for i := 0 to BilgiSay-1 do begin
    Result[i].dblAlan := Random( 100 ) + 1;
    Result[i].intAlan := Trunc( Result[i].dblAlan );
    Result[i].strAlan := IntToStr( Result[i].intAlan );
  end;
end;


Kullanımı :
procedure TForm1.Button1Click(Sender: TObject);
var
  Sonuclar  : tBilgiArray;
  i         : Integer;
begin
  Sonuclar := RastgeleVeriOlursur( 10 );
  for i := Low(Sonuclar) to High(Sonuclar) do
    ShowmessageFmt(' %s - %d - %f ' ,[ Sonuclar[i].strAlan, Sonuclar[i].intAlan, Sonuclar[i].dblAlan ]);
end;

Çok teşekkür ederim hocam. Aynen de aradığım buydu.
Cevapla
#4
(09-01-2021, Saat: 17:47)tuna Adlı Kullanıcıdan Alıntı:
(09-01-2021, Saat: 16:23)mrmarman Adlı Kullanıcıdan Alıntı: Şöyle temel bir örnek işini görecektir. 
Type
  tBilgiler = Record
    strAlan : string;
    intAlan : integer;
    dblAlan : double;
  end;
  tBilgiArray = Array of tBilgiler;


function RastgeleVeriOlursur(BilgiSay: Integer): tBilgiArray;
var
  i : Integer;
begin
  Randomize;

  SetLength( Result, BilgiSay );
  for i := 0 to BilgiSay-1 do begin
    Result[i].dblAlan := Random( 100 ) + 1;
    Result[i].intAlan := Trunc( Result[i].dblAlan );
    Result[i].strAlan := IntToStr( Result[i].intAlan );
  end;
end;


Kullanımı :
procedure TForm1.Button1Click(Sender: TObject);
var
  Sonuclar  : tBilgiArray;
  i         : Integer;
begin
  Sonuclar := RastgeleVeriOlursur( 10 );
  for i := Low(Sonuclar) to High(Sonuclar) do
    ShowmessageFmt(' %s - %d - %f ' ,[ Sonuclar[i].strAlan, Sonuclar[i].intAlan, Sonuclar[i].dblAlan ]);
end;

Çok teşekkür ederim hocam. Aynen de aradığım buydu.

Bunu dosyaya kayıt da edebilirsin. 

Var f: file of TBilgiler;
Bilgi: TBilgiler;

Procedure ..
begin
  assignFile(f, 'veriler.dat');  reWrite(f);
  Bilgi.strAlan := 'Delphi';
  Bİlgi.intalan := 123;
  write(f, Bilgi);
end;
Cevapla
#5
@mrmarman Hocam tekrar merhaba. Bu tanımladığım yeni array'i datasnap üzerinden nasıl veri alış verişi yaptırabilirim.
Yani client tarafından datasnap'e ve tam tersi olarak ta datasnap tarafından client e nasıl gönderebilirim.
Yada datasnap ile veri alışverişi yapmak için başka bir yöntem mi kullanmalıyım.
Not: yazılım windows desktop uygulamasıdır.
Cevapla
#6
@tuna 

Size kuvvetle önerim JSON paket olarak alış verişi yapmaktır. 

* JSON içerik transferi, olası üçüncü parti yazılımlar ile dahi konuşturmak için faydalıdır. Bu yapıyı bir constructor ve destructor ekleyip Add ile bir araya getirdikten sonra JSON formatına dönüştüren bir sınıf hazırlamış olursunuz. Bu sınıfın TOJSon gibi bir property ile elde edilecek JSON ürünü sunucu/client arasında transfer edersiniz. Böylece uyumlu bir yapı kurmuş olursunuz.

EK :

Bir örnek hazırladım


unit BilgilerU;

interface

Uses System.JSON, System.SysUtils;

Type
  tBilgiler = Record
    strAlan : string;
    intAlan : integer;
    dblAlan : double;
  end;
  tBilgiArray = Array of tBilgiler;

Type
  tBilgiClass = class( TObject )
  private
    FBilgiArray : TBilgiArray;

  public
    constructor Create;
    destructor  Destroy; override;
    procedure   Clear;
    procedure   Add( aBilgi: tBilgiler );
    function    ToJSon : String;
  end;
implementation

{ tBilgiClass }

procedure tBilgiClass.Add(aBilgi: tBilgiler);
begin
  if High(FBilgiArray) = -1 then SetLength( FBilgiArray, 1)
                            else SetLength( FBilgiArray, High(FBilgiArray)+1+1); // 0 based
  FBilgiArray[ High(FBilgiArray) ] := aBilgi;
end;

procedure tBilgiClass.Clear;
begin
  SetLength ( FBilgiArray, 0 );
  Finalize  ( FBilgiArray );
  FBilgiArray := nil;
end;

constructor tBilgiClass.Create;
begin
  inherited;

end;

destructor tBilgiClass.Destroy;
begin
  Clear();
  inherited;
end;

function tBilgiClass.ToJSon: String;
var
  i           : Integer;
  aJSONObject : System.JSON.TJSONObject;
  aJSONArray  : System.JSON.TJSONArray;
begin
  aJSONArray := TJSONArray.Create;
  try
    for i := Low(FBilgiArray) to High(FBilgiArray) do
    begin
      aJSONObject := System.JSON.TJSONObject.Create;
      aJSONObject.AddPair( 'strAlan', FBilgiarray[i].strAlan );
      aJSONObject.AddPair( 'intAlan', Format( '%d', [  FBilgiarray[i].intAlan ] ) );
      aJSONObject.AddPair( 'dblAlan', Format( '%f', [  FBilgiarray[i].dblAlan ] ) );
      aJSONArray.Add( aJSONObject );
    end;
    Result := aJSONArray.Format;
  finally
    aJSONArray.Free;
  end;
end;

end.


Kullanımı :

uses BilgilerU;

var
  aBilgiler : BilgilerU.tBilgiClass;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutdown := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bilgi : TBilgiler;
begin
  Randomize;

  Bilgi.dblAlan := Random( 100 ) + 1;
  Bilgi.intAlan := Trunc( Bilgi.dblAlan );
  Bilgi.strAlan := IntToStr( Bilgi.intAlan );

  Memo1.Lines.Add(
      Format('Eklenen: %s - %d - %f ' ,[ Bilgi.strAlan, Bilgi.intAlan, Bilgi.dblAlan ])
  );

  if NOT Assigned(aBilgiler)
    then aBilgiler := tBilgiClass.Create;
  aBilgiler.Add( Bilgi );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Text := aBilgiler.ToJSON;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned( aBilgiler ) then aBilgiler.Free;
end;



elfedq7yunrdwvq0mvqs.gif
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#7
@mrmarman Hocam tekrar tekrar teşekkür ederim. Sayenizde çok şey öğreniyoruz.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Aynı anda 10.000 farklı cihazdan veri alışverişi yapma. pro_imaj 23 1.342 27-12-2020, Saat: 11:22
Son Yorum: pro_imaj
  Aynı Tabloda Farklı Sütunlarda Çoklu Filtreleme bünyamin68 18 855 19-12-2020, Saat: 22:10
Son Yorum: ozcanm
  Firebird - İçinde veri olan bir alanın tipini değiştirme habikus 3 993 07-06-2020, Saat: 23:32
Son Yorum: habikus
  array of record Sıralama yhackup 2 1.007 27-12-2019, Saat: 16:43
Son Yorum: yhackup
  Harf ve sayıları içinde farklı karakterleri ayıklama BGNew 7 2.100 23-12-2019, Saat: 23:48
Son Yorum: enigma



Konuyu Okuyanlar: 1 Ziyaretçi