هيكل البيانات المناسبة للمعالجة ملف ثابت؟

StackOverflow https://stackoverflow.com/questions/305673

  •  08-07-2019
  •  | 
  •  

سؤال

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

هل يمكنني إنشاء فئة لكل نوع السجل مع خصائص مطابقة الحقول في السجل؟ يجب أن مجرد استخدام المصفوفات؟

وأريد أن تحميل البيانات إلى نوع من بنية البيانات قبل حفظه في قاعدة البيانات حتى أستطيع أن استخدام وحدة الاختبارات للتحقق من أن البيانات التي تم تحميلها بشكل صحيح.

وفيما يلي عينة من ما لدي للعمل مع (البيانات BAI2 البنك):

01,121000358,CLIENT,050312,0213,1,80,1,2/

02,CLIENT-STANDARD,BOFAGB22,1,050311,2359,,/

03,600812345678,GBP,fab1,111319005,,V,050314,0000/

88,fab2,113781251,,V,050315,0000,fab3,113781251,,V,050316,0000/

88,fab4,113781251,,V,050317,0000,fab5,113781251,,V,050318,0000/

88,010,0,,,015,0,,,045,0,,,100,302982205,,,400,302982205,,/

16,169,57626223,V,050311,0000,102 0101857345,/

88,LLOYDS TSB BANK PL 779300 99129797

88,TRF/REF 6008ABS12300015439

88,102 0101857345 K BANK GIRO CREDIT

88,/IVD-11 MAR

49,1778372829,90/

98,1778372839,1,91/

99,1778372839,1,92
هل كانت مفيدة؟

المحلول

وأود أن أوصى إنشاء فئات (أو البنيات، أو قيمة ما على الإطلاق اكتب تدعم لغتك)، و

record.ClientReference

وهو أكثر من ذلك بكثير من صفية

record[0]

وإذا كنت تستخدم (رائع!) FileHelpers مكتبة ، ثم شروطكم هي جميلة أملى بكثير بالنسبة لك.

نصائح أخرى

والمنطق التحقق من صحة وعادة ما يكون مستويات على الأقل 2، ومستوى اجمالي يجري "بتنسيق جيد" ومستوى أدق يجري "البيانات الصحيحة".

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

والجمهور الفراغ setField1 (كثافة العمليات ط)    {         إذا (ط> 100) رمي InvalidDataException جديد ...    }

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

   public void setField2(String s)
   {
         if (field1==88 && s.equals ...

         else if (field2==22 && s 
   }

وyechh.

عند لقد كان لتحميل هذا النوع من البيانات في الماضي، لقد وضع كل ذلك في جدول العمل مع أول حرفين في حقل واحد والباقي في آخر. ثم لقد توزيعه إلى جداول العمل الأخرى المناسبة استنادا إلى الأحرف الأولى والثانية. ثم فعلت أي تنظيف والتحقق قبل إدخال البيانات من المجموعة الثانية من الجداول العمل في قاعدة البيانات.

في SQL Server يمكن القيام بذلك من خلال DTS (2000) أو حزمة مباحث أمن الدولة واستخدام جهاز مباحث أمن الدولة، قد تكون قادرة على معالجة البيانات تي إتش إي الطاير مع تخزين في جداول العمل لأول مرة، ولكن prcess هو الدقه، استخدم لأول مرة حرفين لتحديد فرع تدفق البيانات للاستخدام، ثم تحليل بقية السجل إلى نوع من عقد آلية ومن ثم تنظيف والتحقق من صحة قبل إدخال. أنا متأكد من قواعد البيانات الأخرى أيضا نوع من آلية لاستيراد البيانات وسوف تستخدم عملية مشابهه.

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

وخلق فئة لكل نوع من الخلاف سيكون حلا أفضل من استخدام المصفوفات.

وقال ذلك، ولكن في الماضي كنت قد استخدمت Arraylists من Hashtables لإنجاز نفس الشيء. كل عنصر في arraylist هو صف واحد، ولكل إدخال في جدول هاش هو زوج مفتاح / قيمة تمثل العمود اسم وقيمة خلية.

لماذا لا تبدأ من خلال تصميم قاعدة البيانات التي سوف تعقد البيانات ثم يمكنك استخدام framwork المنشأة على توليد الطبقات بالنسبة لك.

وهنا فكرة أحمق:

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

و-ستيف

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