سؤال

نتلقى الكثير من البيانات كملفات مسطحة: سجلات الطول المحددة أو الثابتة فقط. من الصعب في بعض الأحيان معرفة ما تحتويه الملفات بالفعل.

هل هناك أي ممارسات راسخة لتضمين مخطط الملف إلى بداية أو نهاية ملف لجعل الملف محسوسًا ذاتيًا؟

فقط للحصول على فكرة ، تخيل شيئًا كهذا:

<data name=test records=2 type=fixed>
   <field name=foo start=0 length=2 type=numeric>
   <field name=bar start=2 length=4 type=text>
</data>
11test
12ing 

سنقوم بتحليل XML في البداية ونستخدمه لقراءة السجلات.

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

المحلول

بقدر ما أدرك لا - أو على الأقل ليس بشكل كبير.

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

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

التفكير قليلاً ، يمكنك - إذا كنت تستخدم XML - من المحتمل تضمين الملف في التعريف (كتلة كبيرة من CDATA). هذا حل عملي أكثر قليلاً حيث وضع غلاف حول بياناتك الخارجية لا تطلب تعديل البيانات نفسها. لست متأكدًا من مدى عملي - لكنه يبدو أفضل بالنسبة لي من العكس.

نصائح أخرى

هل نظرت إلى المخازن المؤقتة البروتوكول للإلهام؟

لا أعرف عن أي ممارسة راسخة ، لكن فكرتك عن مجرد إعداد المخطط للبيانات تبدو جيدة. Apache Avro هي أداة تسلسل البيانات مماثلة لمخازن المؤسسات البروتوكول والتوفير. أعتقد أن استخدام AVRO النموذجي ينطوي على تخزين المخطط مع البيانات (عن طريق إعداده في الدفق ، أعتقد).

أردت أن أذكر أيضا مشروع PADS. لديهم لغة مخطط مصممة للسماح لك بوصف تنسيقات البيانات "المخصصة". في الوقت الحالي ، أعتقد أن لديهم تطبيقات C و ML فقط ، والتي قد تكون مشكلة. من ناحية أخرى ، تم تصميم لغة المخطط الخاصة بهم للتعامل مع مجموعة واسعة من التنسيقات ، لذلك قد لا يزال من المفيد استخدامه على الشيء الذي يعتمد على XML.

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