January 24, 2018

Alıntı (erdem):

>
> import std.stdio;
> import std.conv;
> import std.bitmanip;
>
> struct VuEntity
> {
>     /* ... */
> }
>
> struct Falcon4Entity
> {
>     /* ... */
> }
>
> void main()
> {
>     /* ... */
>
>     Falcon4Entity[3956] entities;
>     /* Burayı değiştirdim */
> }
> ```

>

Burayı bu sefer tek tek bir Falcon4Entity nesnesi okuyacak şekilde değiştirdim.

for (int i = 0; i < numEntities; ++i)
{
kütük.rawRead((&currentEntity)[0..1]);
writeln("Current entity id ", currentEntity.vuClassData.id);
}


Ama şöyle bir durum var. Birbirinin aynı olan id'ler var. Bu durumda bir hata yapıyor olabiliriz.

Senin yazdığın programda da okunan kayıt sayısını 100'e çıkarıp sadece 'num entities' ve 'id' numaralarını yazdırınca id numarasını hep 60395 olarak yazdırıyor. Senin yazdığın programda da bir hata olabilir.

Belki 81 bayt okunup bu bir Falcon4Entity'e de çevrilebilir. Ancak bunun nasıl yapılacağını henüz bulamadım.

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
January 24, 2018

son yazdığım mesajlarda öncekilerden fraklı tanımlamalar yaptım sebebi gerek sitesinde gerekse çıkan sonuçlara baktığımda tutarsızlıkların oluşuydu.. Bende bu programı daha önceleri c# ile yapan birinden source kodun bi bölümünü yine yukarıda paylaştım .. demin dediğim farklı tanımlamalarıda buna göre düzenledim.. sanki tutarsızlıklar gitmiş gibi..
özetlersem en son paylaştığım 3 kod biri C# ile hangi değişkenin kaç byte tanımlandığı ardından benim buna göre kendimce haklı olduğuma inandığım düzeltilmiş D kodu ve en son olarakta bu D kodunun GtkD ile birleşmiş hali var..
bu gtkD bölümünde bu değişkenleri stringe çevirip ağaç yapısına ekelidğimde hata alıyorum .. Vu konu ellerinizden öper Erdem hcam :-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

Ali hocanın gösterdiği şekilde okutunca kod şu şekilde oldu:

import std.stdio;
import std.conv;
import std.bitmanip;

struct VuEntity
{
   ushort id;
   ushort collisionType;
   float collisionRadius;
   byte[8] classInfo;
   uint updateRate;
   uint updateTolerance;
   float fineUpdateRange;
   float fineUpdateForceRange;
   float fineUpdateMultiplier;
   uint damageSeed;
   int hitPoints;
   ushort majorRevisionNumber;
   ushort minorRevisionNumber;
   ushort createPriority;
   byte managementDomain;
   byte transferable;
   byte private1;
   byte tangible;
   byte colidable;
   byte global;
   byte persistent;
   byte[3] padding;
}

struct Falcon4Entity
{
   VuEntity vuClassData;
   short[7] visType;
   short vehicleDataİndex;
   byte dataType;
   uint dataPtr;
}

void main()
{
   byte[] bellek;
   bellek.length = 1024;

   auto kütük = File("FALCON4.ct", "r");

   short numEntities;

   numEntities = kütük.rawRead(new short[1])[0];
   writeln("Number of entities ", numEntities);

   Falcon4Entity[] entities;

   entities.length = numEntities;

   entities = kütük.rawRead(entities);

   foreach (i,entity; entities)
   {
       write("Current id = ", entity.vuClassData.id);
       writeln(" - i : ", i);
   }
}

Ama 3956 kayıt okutacakken 3814 kayıt okuttuk. Ayrıca id numarası 0 olan kayıtlar var.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

hemen üstte sebebini yazdım sanırım yeni okuyacaksın :blush:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

Bu dosyaları açan bir programla bakabilir misin 'VuEntity.id ' numarası birden fazla 0 değeri almış mı. Ya da normalde olması gerektiği gibi benzersiz şekilde mi..

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

Id herzaman 60395 çıkıyor

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

Başkalarının yazdığı programlarda mı?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

evet

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

ayrıca bendekindede hep aynı değer çıkıyor ! yani ID= 60395

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 24, 2018

D'de dinamik dizi konusu karışık. :/ O yüzden ben (ve bazı kişiler) dilim demeyi tercih ediyoruz.

Statik dizide '&dizi' yazdığımızda ilk elemanın adresi oluyor çünkü statik dizi, elemanlarından başka bir şey değildir.

Dilimde ise '&dilim' yazdığımızda dilimi temsil eden küçücük yapının adresini alıyoruz.

Her ikisinde de elemanın adresi aslında şu: 'dizi.ptr'. Ama dinamik dizi kullanacaksak ona bile gerek olmamalı çünkü rawRead zaten diziye okur. Ben Erdem'in gösterdiği kodda şöyle yazmışım:

   auto entries = new Falcon4Entity[](adet);
   auto okunanEntries = dosya.rawRead(entries);

Onun new kullanmayan eşdeğeri şöyle olmalı:

   Falcon4Entity[] entries;
   entries.length = adet;
   auto okunanEntries = dosya.rawRead(entries);

Ek olarak, biz 'adet' adet nesne okuyacağını sanıyoruz ama örneğin dosya daha erken sonlanabilir. O yüzden, doğru olan okuduktan sonra entries'i değil, okunanEntries'i kullanmaktır. Tabii okunanEntries ek değişkenini boşverip rawRead'in dönüşünü olduğu gibi entries'e atamak gerek:

   Falcon4Entity[] entries;
   entries.length = adet;
   entries = dosya.rawRead(entries);
   // Burada entries.length'in değeri adet'ten farklı olabilir.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]