سؤال

هل هناك تنسيق قياسي أو مفتوح يمكن استخدامه لوصف تكوين ملف مسطح. تدمج شركتي العديد من تنسيقات ملفات العملاء المختلفة. مع ملف XML ، من السهل الحصول على XSD أو إنشاءه لوصف تنسيق ملف XML. أنا أبحث عن شيء مشابه لصف تنسيق الملف المسطح (العرض الثابت ، المحدد إلخ). يستخدم Stylus Studio تنسيقًا. Conv للقيام بذلك. يمكن استخدام تنسيق .conv في وقت التشغيل لتحويل ملف مسطح تعسفي إلى ملف XML. كنت أتساءل فقط عما إذا كان هناك طريقة مفتوحة أو معايير قائمة على فعل الشيء نفسه.

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

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

المحلول

xflat:http://www.infoloom.com/gcaconfs/web/philadelphia99/lyons.htm#n29 http://www.unidex.com/overview.htm

للحالات المعقدة (على سبيل المثال ملفات السجل) ، قد تفكر في محلل معجمي.

نصائح أخرى

عن اختيار الموجود تنسيقات الملفات المسطحة: هنالك ال قيم مفصولة بفواصل (CSV) تنسيق. أو بشكل عام ، DSV. لكن هذه ليست "عرضًا ثابتًا" ، نظرًا لوجود حرف محدد (مثل فاصلة) تفصل الخلايا الفردية. لاحظ أنه على الرغم من CSV موحدة, ، لا يلتزم الجميع بالمعيار. أيضًا ، قد يكون CSV بسيطًا لأغراضك ، لأنه لا يسمح ببنية مستندات غنية.

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

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

عن وصف تنسيقات الملفات المسطحة: قد يكون هذا سهلاً أو صعبًا للغاية ، اعتمادًا على التنسيق. على الرغم من وجود حلول أسهل في معظم الحالات ، فإن إحدى الطرق التي ستعمل بشكل عام هي عرض تنسيق الملف على أنه أ القواعد الرسمية, ، واكتب أ ليكسر/محلل لذلك. لكني أعترف ، هذا تماما الآلات الثقيلة.

إذا كنت محظوظًا ، فتقدم اثنين تعبيرات منتظمة قد تفعل الخدعة. معظم التنسيقات لن تقرض نفسها. إذا كنت تخطط لكتابة Lexer/Parser بنفسك ، يمكنني أن أنصح لا (Python Lex-Yacc). لكن هناك العديد من الحلول الأخرى ، في العديد من اللغات المختلفة ، والكثير منها أكثر ملاءمة من المدرسة القديمة Lex & yacc. لمزيد ، انظر ما المولد المحلل الذي توصي به؟


  : نعم ، قد يكون هذا بخس.
  : حتى وصف بشكل صحيح تنسيق عنوان البريد الإلكتروني ليس تافها.

يحتوي Cobol (سواء أعجبك ذلك أم لا) على تنسيق قياسي لوصف تنسيقات سجل العرض الثابت في الملفات.

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

هناك أمثلة على استخدام JSON لصياغة بيانات التعريف للملفات النصية. يمكن تطبيق ذلك على ملفات JSON وملفات CSV وملفات التنسيق الثابت.

ينظر الى http://www.projectzero.org/smash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.html

هذا هو IBM's Smash (Project Zero) باستخدام JSON لتشفير البيانات الوصفية. يمكنك بسهولة تطبيق هذا على الملفات المسطحة.

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

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

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

يرى XML مقابل فاصلة الملفات النصية المحددة لمزيد من المرجع.

لا أعرف ما إذا كان هناك أي تنسيق قياسي أو مفتوح لوصف تنسيق الملف المسطح. لكن صناعة واحدة فعلت هذا: الصناعة المصرفية. تتواصل المؤسسات المالية بالفعل باستخدام رسالة موحدة عبر شبكة مخصصة تسمى سريع. كانت الرسائل السريعة في الأصل موضعية (قبل SWIFTML ، الإصدار XMLIFITY). لا أعرف ما إذا كان هذا اقتراحًا جيدًا لأنه غامض نوعًا ما ولكن ربما يمكنك النظر إلى دليل تنسيق سريع, ، قد يمنحك بعض الأفكار.

بعد ذلك ، تحقق من الدودة المسطحة, ، محلل الملف المسطح المتواضع. لقد استخدمته لتحليل ملف الموضعية و/أو CSV وأحببت تنسيق واصف XML. قد يكون اقتراحًا أفضل من Swift :)

CSV

CSV هو تنسيق بيانات محدد يحتوي على حقول/أعمدة مفصولة بحرف الفاصلة والسجلات/الصفوف مفصولة بواسطة الخطوط الجديدة. يجب أن تكون الحقول التي تحتوي على شخصية خاصة (فاصلة ، سطر جديد ، أو اقتباس مزدوج) ، محاطة باقتباسات مزدوجة. ومع ذلك ، إذا كان الخط يحتوي على إدخال واحد وهو السلسلة الفارغة ، فقد يتم إرفاقه في عروض أسعار مزدوجة. إذا كانت قيمة الحقل تحتوي على حرف اقتباس مزدوج ، فسيتم هروبه عن طريق وضع حرف اقتباس مزدوج آخر بجواره. لا يتطلب تنسيق ملف CSV من تنسيق ترميز أحرف محدد أو ترتيب بايت أو تنسيق Line Terminator.


سمح لي إدخال CSV على ويكيبيديا بالعثور على أ مقارنة تنسيقات تسلسل البيانات هذا إلى حد كبير ما طلبته.

الشيء الوحيد المماثل الذي أعرفه هو Hachoir ، والتي يمكنها حاليًا تحليل تنسيقات الملفات 70:

http://bitbucket.org/haypo/hachoir/wiki/home

لست متأكدًا مما إذا كان الأمر مهمًا حقًا كلغة تصريفية ، نظرًا لأنها تعتمد على محلل البرنامج المساعد ، ولكن يبدو أنها تعمل ، ويمكن توسيعها ، والتي قد تلبي احتياجاتك بشكل جيد.

جانبا ، هناك تنسيقات مثيرة للاهتمام ، وموسعة ، قابلة للتمديد ، مثل IFF (تنسيق ملف التبادل).

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