Forum: D Programlama Dili RSS
dosyadan okuma dosyaya yazma ile ilgili bir soru/sorun
Sayfa:  önceki  1  2  3  4  sonraki 
cos00kun #16
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 13371
Bu arada Bir sorum daha olacak çünkü ben bu dosyaları okurken çıkan sonuçlar tam örtüşmüyor.. o yüzden ben orjinalde dosyanın nasıl okunduğunu gösteren kodun kısmını C# ile aşağıdaki gibi veriyorum;
 using (BinaryReader reader = new BinaryReader(File.Open(_filename, FileMode.Open))) {
     
     // Get the total number of entries
     int nEntries = reader.ReadInt16();
 
    // Set the start position
    reader.BaseStream.Position += nIndex* 81;
 
    // If we started at the beginning print the number of entries
    if (reader.BaseStream.Position == 2)  {       
        Text1.AppendText("(0) Entry Count: " + nEntries + "\n");
    }
 
     // Process the entries
     // nEntries-nIndex = remaining before EOF
     for (int i = 0; i<Math.Min(nEntries - nIndex, nOutputEntries); i++) {
Text1.AppendText("    **** Entry " + (i + nIndex) + " ****\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") ID: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Collision Type: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Collision Radius" + reader.ReadSingle().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[0]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[1]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[2]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[3]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[4]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[5]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[6]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Class Info[7]: " + (uint) reader.ReadByte() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Update Rate: " + reader.ReadUInt32().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Update Tolerance: " + reader.ReadUInt32().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Fine Update (Bubble): " + reader.ReadSingle().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Fine Update Force: " + reader.ReadSingle().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Fine Update Multiplier: " + reader.ReadSingle().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Damage Seed: " + reader.ReadUInt32().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Hitpoints: " + reader.ReadInt32().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Major Revision: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Minor Revision: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Create Priority: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Management Domain: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Transferrable: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Private: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Tangible: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Collidable: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Global: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Persistent: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Unknown - Buffer 2 Bytes: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Unknown - Buffer 1 Byte: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") visType[0]: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") visType[1]: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") visType[2]: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") visType[3]: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") visType[4]: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") visType[5]: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") visType[6]: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Vehicle Data Index: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") DataType: " + reader.ReadByte().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") RecordID: " + reader.ReadUInt16().ToString() + "\n");
Text1.AppendText("(" + reader.BaseStream.Position + ") Unknown  - Buffer 2 Bytes: " + reader.ReadInt16().ToString() + "\n\n");
}

Şimdi benim tanımladığım struct yada değişkenlerin türleride şu şekilde;
struct  FALCON4_ct {
    short numEntities;
    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 private_;
    byte tangible;
    byte collidable;
    byte global;
    byte persistent;
    byte[3] padding;
    short[7] visType;
    short vehicleDataIndex;
    byte dataType;
    uint dataPtr;
    byte unknow1;
    byte unknow2;
}

Değişken isimleri farklı olabilir ona takılmadan dosyadan her iki kodunda aynı miktarda verileri okuduğundan emin olabiliyormuyuz bu durumda ?
E=mc^2
erdem (Moderatör) #17
Üye Tem 2009 tarihinden beri · 1076 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Coşkun anladığım kadarıyla ilkönce kaç tane kayıt olduğunu okuyoruz.
    auto kütük = File("FALCON4.ct", "r");
 
    short numEntities;
 
    // numEntities = kütük.rawRead((&numEntities)[0..1]);
 
    /+
       Bu şekilde şu hatayı veriyor:
 
       Error: cannot implicitly convert expression `kütük.rawRead(&
       numEntities[0..1])` of type `short[]` to `short`
     +/
 
 
    numEntities = kütük.rawRead(new short[1])[0];
    writeln("Number of entities ", numEntities);
    Falcon4Entity[numEntities] entities;
Sonra Ali hoca'nın burada gösterdiği gibi iki tane yapı olması lazım.

http://ddili.org/forum/post/12949

Boşlukları tamamlarken buraya bakabilrsin.

https://dlang.org/spec/type.html

Sağlamasını da şu şekilde yapabiliriz. Bu programı çalıştırdığımda bu sayıyı 3956 olarak verdi. 

https://pmc.editing.wiki/doku.php?id=falcon4:file_formats:ct_file

Bu belgede entities[] dizisinin 81 * 3956 bayt olduğu belirtilmiş. Çarparsak 320436 bayt buluruz. Falcon4.ct dosyasının boyutuna baktığımda

320,4 kB (320.438 bayt)

olduğunu gördüm.  numEntitites de 2 bayt tutuyordu. Toplamda 320438 bayt yapar.
Bu mesaj erdem tarafından değiştirildi; zaman: 2018-01-24, 04:25.
cos00kun #18
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Erdem hocam teşekkürler.. söylediğin yoldan gideceğim ancak başka bir yapıya geçmeden şu şekilde şimdilik çalıştı .. ilerleyen bölümlerde iyileştirme yaparken o konuya tekrar döneceğim
import std.stdio;
import std.string;
import std.file;
import std.format;
 
struct  FALCON4_ct {
    short numEntities;
    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 private_;
    byte tangible;
    byte collidable;
    byte global;
    byte persistent;
    ushort padding1_2;
    byte padding3;
    short[7] visType;
    short vehicleDataIndex;
    byte dataType;
    ushort dataPtr;
    short unknow1;
    //byte unknow2;
}
 
void dosyadanOku() {
    FALCON4_ct falcon4_ct;
    File dosya = File ("FALCON4.ct", "rb" );
    
    dosya.rawRead((&falcon4_ct.numEntities)[0..1]);
 
    for(int i=0;i<3; i++)  {   // kaç tane kayıt varsa okadar dönecek şimdilik bu..... for(int i=0;i<falcon4_ct.numEntities; i++)
        dosya.rawRead((&falcon4_ct.id)[0..1]);
        dosya.rawRead((&falcon4_ct.collisionType)[0..1]);
        dosya.rawRead((&falcon4_ct.collisionRadius)[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[0])[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[1])[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[2])[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[3])[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[4])[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[5])[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[6])[0..1]);
        dosya.rawRead((&falcon4_ct.classInfo[7])[0..1]);
        dosya.rawRead((&falcon4_ct.updateRate)[0..1]);
        dosya.rawRead((&falcon4_ct.updateTolerance)[0..1]);
        dosya.rawRead((&falcon4_ct.fineUpdateRange)[0..1]);
        dosya.rawRead((&falcon4_ct.fineUpdateForceRange)[0..1]);
        dosya.rawRead((&falcon4_ct.fineUpdateMultiplier)[0..1]);
        dosya.rawRead((&falcon4_ct.damageSeed)[0..1]);
        dosya.rawRead((&falcon4_ct.hitpoints)[0..1]);
        dosya.rawRead((&falcon4_ct.majorRevisionNumber)[0..1]);
        dosya.rawRead((&falcon4_ct.minorRevisionNumber)[0..1]);
        dosya.rawRead((&falcon4_ct.createPriority)[0..1]);
        dosya.rawRead((&falcon4_ct.managementDomain)[0..1]);
        dosya.rawRead((&falcon4_ct.transferable)[0..1]);
        dosya.rawRead((&falcon4_ct.private_)[0..1]);
        dosya.rawRead((&falcon4_ct.tangible)[0..1]);
        dosya.rawRead((&falcon4_ct.collidable)[0..1]);
        dosya.rawRead((&falcon4_ct.global)[0..1]);
        dosya.rawRead((&falcon4_ct.persistent)[0..1]);
        dosya.rawRead((&falcon4_ct.padding1_2)[0..1]);
        dosya.rawRead((&falcon4_ct.padding3)[0..1]);
        dosya.rawRead((&falcon4_ct.visType[0])[0..1]);
        dosya.rawRead((&falcon4_ct.visType[1])[0..1]);
        dosya.rawRead((&falcon4_ct.visType[2])[0..1]);
        dosya.rawRead((&falcon4_ct.visType[3])[0..1]);
        dosya.rawRead((&falcon4_ct.visType[4])[0..1]);
        dosya.rawRead((&falcon4_ct.visType[5])[0..1]);
        dosya.rawRead((&falcon4_ct.visType[6])[0..1]);
        dosya.rawRead((&falcon4_ct.vehicleDataIndex)[0..1]);
        dosya.rawRead((&falcon4_ct.dataType)[0..1]);
        dosya.rawRead((&falcon4_ct.dataPtr)[0..1]);
        dosya.rawRead((&falcon4_ct.unknow1)[0..1]);
        //dosya.rawRead((&falcon4_ct.unknow2)[0..1]);
    
        writeln("Num Entities= ",falcon4_ct.numEntities);
        writeln("Id= ",falcon4_ct.id);
        writeln("Collision Type= ",falcon4_ct.collisionType);
        writeln("collision Radius= ",falcon4_ct.collisionRadius);
        writeln("Class Info [1]= ",falcon4_ct.classInfo[0]);
        writeln("Class Info [2]= ",falcon4_ct.classInfo[1]);
        writeln("Class Info [3]= ",falcon4_ct.classInfo[2]);
        writeln("Class Info [4]= ",falcon4_ct.classInfo[3]);
        writeln("Class Info [5]= ",falcon4_ct.classInfo[4]);
        writeln("Class Info [6]= ",falcon4_ct.classInfo[5]);
        writeln("Class Info [7]= ",falcon4_ct.classInfo[6]);
        writeln("Update Rate= ",falcon4_ct.updateRate);
        writeln("Update Tolerance= ",falcon4_ct.updateTolerance);
        writeln("Fine Update Range= ",falcon4_ct.fineUpdateRange);
        writeln("FineUpdateForce Range= ",falcon4_ct.fineUpdateForceRange);
        writeln("Fine Update Multiplier= ",falcon4_ct.fineUpdateMultiplier);
        writeln("Damage Seed= ",falcon4_ct.damageSeed);
        writeln("Hitpoints= ",falcon4_ct.hitpoints);
        writeln("Major Revision Number= ",falcon4_ct.majorRevisionNumber);
        writeln("Minor Revision Number= ",falcon4_ct.minorRevisionNumber);
        writeln("Create Priority= ",falcon4_ct.createPriority);
        writeln("Management Domain= ",falcon4_ct.managementDomain);
        writeln("Transferable= ",falcon4_ct.transferable);
        writeln("Private= ",falcon4_ct.private_);
        writeln("Tangible= ",falcon4_ct.tangible);
        writeln("Collidable= ",falcon4_ct.collidable);
        writeln("Global= ",falcon4_ct.global);
        writeln("Persistent= ",falcon4_ct.persistent);
        writeln("Padding1_2= ",falcon4_ct.padding1_2);
        writeln("Padding3= ",falcon4_ct.padding3);        
        writeln("Vis Type[1]= ",falcon4_ct.visType[0]);
        writeln("Vis Type[2]= ",falcon4_ct.visType[1]);
        writeln("Vis Type[3]= ",falcon4_ct.visType[2]);
        writeln("Vis Type[4]= ",falcon4_ct.visType[3]);
        writeln("Vis Type[5]= ",falcon4_ct.visType[4]);
        writeln("Vis Type[6]= ",falcon4_ct.visType[5]);
        writeln("Vis Type[7]= ",falcon4_ct.visType[6]);
        writeln("Vehicle Data Index= ",falcon4_ct.vehicleDataIndex);
        writeln("Data Type= ",falcon4_ct.dataType);
        writeln("Data Ptr _ RecordID= ",falcon4_ct.dataPtr);
        writeln("Unknow 1= ",falcon4_ct.unknow1);
        //writeln("Unknow 2= ",falcon4_ct.unknow2);
        writeln();
        writeln();
    }
 
    dosya.close();
}

şimdi bu şekilde yani program natamam şekilde bir yandanda GtkD ile uğraşmaya başladım şimdi oda şu şekilde.. ancak çıkışlarda string e dönüşümde sıkıntı yaşıyorum galiba  :rolleyes:
import gtk.Main;
import gtk.MainWindow;
import gtk.ListStore;
import gtk.TreeView;
import gtk.TreeViewColumn;
import gtk.TreeIter;
import gtk.CellRendererText;
import gtk.Box;
 
import std.stdio;
import std.string;
import std.file;
import std.format;
 
struct  FALCON4_ct {
    short numEntities;
    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 private_;
    byte tangible;
    byte collidable;
    byte global;
    byte persistent;
    ushort padding1_2;
    byte padding3;
    short[7] visType;
    short vehicleDataIndex;
    byte dataType;
    ushort dataPtr;
    short unknow1;
    //byte unknow2;
}
 
 
 
class Pencere: MainWindow
{
    Box anaKutu;
 
    this()
    {
        super("Ağaç gösterimi örneği 1");
        setSizeRequest(250, 200);
        anaKutu = new Box(Orientation.VERTICAL0);
 
        auto model = new VeriModeli();
 
        //.............................
 
        FALCON4_ct falcon4_ct;
        File dosya = File ("FALCON4.ct", "rb" );
        dosya.rawRead((&falcon4_ct.numEntities)[0..1]);
        
        for(int i=0;i<1; i++)  {   // kaç tane kayıt varsa okadar dönecek şimdilik bu..... for(int i=0;i<falcon4_ct.numEntities; i++)
            
            model.ekle("Id= ",cast(string)dosya.rawRead((&falcon4_ct.id)[0..1]));
            model.ekle("Collision Type= ",cast(string)dosya.rawRead((&falcon4_ct.collisionType)[0..1]));
            model.ekle("collision Radius= ",cast(string)dosya.rawRead((&falcon4_ct.collisionRadius)[0..1]));
            model.ekle("Class Info [1]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[0])[0..1]));
            model.ekle("Class Info [2]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[1])[0..1]));
            model.ekle("Class Info [3]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[2])[0..1]));
            model.ekle("Class Info [4]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[3])[0..1]));
            model.ekle("Class Info [5]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[4])[0..1]));
            model.ekle("Class Info [6]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[5])[0..1]));
            model.ekle("Class Info [7]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[6])[0..1]));
            model.ekle("Class Info [8]= ",cast(string)dosya.rawRead((&falcon4_ct.classInfo[7])[0..1]));
            model.ekle("Update Rate= ",cast(string)dosya.rawRead((&falcon4_ct.updateRate)[0..1]));
            model.ekle("Update Tolerance= ",cast(string)dosya.rawRead((&falcon4_ct.updateTolerance)[0..1]));
            model.ekle("Fine Update Range= ",cast(string)dosya.rawRead((&falcon4_ct.fineUpdateRange)[0..1]));
            model.ekle("FineUpdateForce Range= ",cast(string)dosya.rawRead((&falcon4_ct.fineUpdateForceRange)[0..1]));
            model.ekle("Fine Update Multiplier= ",cast(string)dosya.rawRead((&falcon4_ct.fineUpdateMultiplier)[0..1]));
            model.ekle("Damage Seed= ",cast(string)dosya.rawRead((&falcon4_ct.damageSeed)[0..1]));
            model.ekle("Hitpoints= ",cast(string)dosya.rawRead((&falcon4_ct.hitpoints)[0..1]));
            model.ekle("Major Revision Number= ",cast(string)dosya.rawRead((&falcon4_ct.majorRevisionNumber)[0..1]));
            model.ekle("Minor Revision Number= ",cast(string)dosya.rawRead((&falcon4_ct.minorRevisionNumber)[0..1]));
            model.ekle("Create Priority= ",cast(string)dosya.rawRead((&falcon4_ct.createPriority)[0..1]));
            model.ekle("Management Domain= ",cast(string)dosya.rawRead((&falcon4_ct.managementDomain)[0..1]));
            model.ekle("Transferable= ",cast(string)dosya.rawRead((&falcon4_ct.transferable)[0..1]));
            model.ekle("Private= ",cast(string)dosya.rawRead((&falcon4_ct.private_)[0..1]));
            model.ekle("Tangible= ",cast(string)dosya.rawRead((&falcon4_ct.tangible)[0..1]));
            model.ekle("Collidable= ",cast(string)dosya.rawRead((&falcon4_ct.collidable)[0..1]));
            model.ekle("Global= ",cast(string)dosya.rawRead((&falcon4_ct.global)[0..1]));
            model.ekle("Persistent= ",cast(string)dosya.rawRead((&falcon4_ct.persistent)[0..1]));
            model.ekle("Padding1_2= ",cast(string)dosya.rawRead((&falcon4_ct.padding1_2)[0..1]));
            model.ekle("Padding3= ",cast(string)dosya.rawRead((&falcon4_ct.padding3)[0..1]));
            model.ekle("Vis Type[1]= ",cast(string)dosya.rawRead((&falcon4_ct.visType[0])[0..1]));
            model.ekle("Vis Type[2]= ",cast(string)dosya.rawRead((&falcon4_ct.visType[1])[0..1]));
            model.ekle("Vis Type[3]= ",cast(string)dosya.rawRead((&falcon4_ct.visType[2])[0..1]));
            model.ekle("Vis Type[4]= ",cast(string)dosya.rawRead((&falcon4_ct.visType[3])[0..1]));
            model.ekle("Vis Type[5]= ",cast(string)dosya.rawRead((&falcon4_ct.visType[4])[0..1]));
            model.ekle("Vis Type[6]= ",cast(string)dosya.rawRead((&falcon4_ct.visType[5])[0..1]));
            model.ekle("Vis Type[7]= ",cast(string)dosya.rawRead((&falcon4_ct.visType[6])[0..1]));
            model.ekle("Vehicle Data Index= ",cast(string)dosya.rawRead((&falcon4_ct.vehicleDataIndex)[0..1]));
            model.ekle("Data Type= ",cast(string)dosya.rawRead((&falcon4_ct.dataType)[0..1]));
            model.ekle("Data Ptr _ RecordID= ",cast(string)dosya.rawRead((&falcon4_ct.dataPtr)[0..1]));
            model.ekle("Unknow 1= ",cast(string)dosya.rawRead((&falcon4_ct.unknow1)[0..1]));
        }
                
        dosya.close();
 
        //..............................
 
        auto görünüm = new GörünümModeli(model);
        anaKutu.packStart(görünüm, true, true, 0);
 
        add(anaKutu);
        showAll();
    }
}
 
class VeriModeli /* model */
{
    ListStore model;
 
    this()
    {
        model = new ListStore([GType.STRING, GType.STRING]);
    }
 
    void ekle(string isim, string başkent)
    {
        TreeIter erişici = model.createIter();
        model.setValue(erişici, 0, isim);
        model.setValue(erişici, 1, başkent);
    }
}
 
class GörünümModeli: TreeView /* görünüm */
{
    TreeViewColumn üyeSütunu;
    TreeViewColumn değerSütünu;
 
    this(VeriModeli veri)
    {
        üyeSütunu = new TreeViewColumn("Member", new CellRendererText(), "text", 0);
        appendColumn(üyeSütunu);
        değerSütünu = new TreeViewColumn("Value", new CellRendererText(), "text", 1);
        appendColumn(değerSütünu);
        setModel(veri.model);
    }
}
 
void main(string[] değişkenler)
{
    Main.init(değişkenler);
    auto pencere = new Pencere();
    Main.run();
}
E=mc^2
erdem (Moderatör) #19
Üye Tem 2009 tarihinden beri · 1076 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben de şöyle bir şey yaptım. Ama dinamik dizi kullanınca bu yöntem çalışmıyor mu acaba.
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[3956] entities;
 
    //entities.length = numEntities;
 
    kütük.rawRead((&entities)[0..1]);
 
    writeln("İlk eleman ", entities[0].vehicleDataİndex);
}
cos00kun #20
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
benim bildiğim dinamik dizide çalışmıyor.. ayrıca benim yapacağım programda kayıt ekleyip çıkartacağımız için entities her ekleme yada çıkarmada değişecektir.. hatta birçok şey...
E=mc^2
acehreli (Moderatör) #21
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4643 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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 mesaj acehreli tarafından değiştirildi; zaman: 2018-01-24, 10:23.
erdem (Moderatör) #22
Üye Tem 2009 tarihinden beri · 1076 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #19
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.
cos00kun #23
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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  :-)
E=mc^2
erdem (Moderatör) #24
Üye Tem 2009 tarihinden beri · 1076 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #22
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.
cos00kun #25
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
hemen üstte sebebini yazdım sanırım yeni okuyacaksın  :blush:
E=mc^2
erdem (Moderatör) #26
Üye Tem 2009 tarihinden beri · 1076 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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..
cos00kun #27
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Id herzaman 60395 çıkıyor
E=mc^2
erdem (Moderatör) #28
Üye Tem 2009 tarihinden beri · 1076 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Başkalarının yazdığı programlarda mı?
cos00kun #29
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
evet
E=mc^2
cos00kun #30
Üye Kas 2014 tarihinden beri · 262 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
ayrıca bendekindede hep aynı değer çıkıyor ! yani ID= 60395
E=mc^2
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  önceki  1  2  3  4  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2018-02-24, 02:15:17 (UTC -08:00)