سؤال

وأنا أحاول قراءة محتويات الملفات خريطة / نموذج لعبة لفي برنامج لأغراض كتابة نموذج المشاهد الصغيرة واختبار بعض الميزات دايركت. والمقسم للنماذج / خريطة الملف في الطبيعة، وأنا أعرف شكل هذه الملفات. يمكنني بسهولة قراءة الملفات عن طريق تحليل من خلال قطع الفردية، وذلك باستخدام نهج مثل هذا:

class FileType1 {
    private Chunk1 c1;
    private Chunk2 c2; // etc

    public void Read(BinaryReader reader) {
        c1 = new Chunk1(reader);
        c2 = new Chunk2(reader);
    }
}

ولكن، وأنا أحاول أن أفكر في بعض الطريق لقراءة بشكل عام هذه الملفات، لتحديد شكل ملف متمسك (يتبع أي Chunk1 التي كتبها Chunk2 الخ الخ) بحيث يمكن للقارئ أن تضمن الملف هو من هيكل مناسب . يمكنني استخدام فئة سوبر الخبز ومصنع الخبز لقراءة بشكل عام جميع قطع في أي ملف معين. أساسا، وأود أن زيادة هذا مع وظيفة إضافية لمدقق هيكل (أو شيئا من هذا القبيل) أن يؤدي إلى طريقة مشابهة لهذه:

public void Read(BinaryReader reader, ChunkFileFormat format) {
    while (!EOF) {
        char[] chunkID = reader.ReadChars(4);
        Chunk c = chunkFactory.Create(chunkID);
        if (c.GetType() != format.Next.GetType())
            throw new Exception("File format is invalid");
        format.SetCurrentRecord(c);
    }
}

والفكرة هنا هي أن تحدد الطبقة ChunkFileFormat بنية الملف، مشيرا إلى ما هو نوع قطعة من المتوقع أن تكون قراءة المقبل في من تيار ثنائي. وسيتيح هذا فرعية من ChunkFileFormat لتحديد تخطيط أن شكل معين، ويمكن استخدام طريقة قراءة واحدة لقراءة جميع صيغ الملفات المقسم مختلفة، بدلا من كتابة طريقة ينضب طويلة ومتكررة لكل منها.

وسؤالي هو، هو على بينة من أنماط التصميم أو الأساليب التي يمكن التعامل مع هذا الوضع أي شخص؟ مشروع أعمل عليه هو حاليا في C # على الرغم من أنني سوف تكون مهتمة في الحلول في C ++ (أو أي لغة لهذه المسألة).

ويرجع الفضل في ذلك مسبقا!

هل كانت مفيدة؟

المحلول

ويتم ترميز هذا النوع من القواعد بسهولة باستخدام آلة المحدودة للدولة .

وكل قطعة يجب تغيير الدولة التي تتواجد فيها. في انتظار كل دولة لقطع معينة بعد ذلك. إذا واجهت قطعة التي يجب أن لا تواجه في التيار، وهذا خطأ.

نصائح أخرى

هل يمكن إنشاء وصفا الرسمي للشكل باستخدام DataScript / ANTLR، وأنها خلق تحليل وط / س كود لك (جافا أو C ++).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top