بدائل للقراءة المحسنة وتحليل الملفات النصية باستخدام .NET

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

  •  09-06-2019
  •  | 
  •  

سؤال

أحتاج إلى القراءة من مجموعة متنوعة من الملفات النصية المختلفة (لدي بعض الملفات المحددة وبعض الملفات ذات العرض الثابت).لقد فكرت في تحليل الملفات سطرًا تلو الآخر (بطيء باستخدام أساليب النوع File.ReadLine) وقراءة الملف باستخدام برنامج تشغيل النص ODBC (أسرع) ولكن هل لدى أي شخص أي اقتراحات أخرى (أفضل)؟أنا أستخدم .NET/C#.

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

المحلول 3

الإجابة على سؤالي الخاص:

انتهى بي الأمر باستخدام كائن Microsoft.VisualBasic.FileIO.TextFieldParser، راجع:

http://msdn.microsoft.com/en-us/library/f68t4563.aspx

(مثال للتنفيذ هنا)

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

نصائح أخرى

لست متأكدًا من أنه يمكنك حقًا إجراء محلل لملفات النص وExcel، إلا إذا كنت تقصد بملف Excel ملفًا محددًا بفاصلة/أنبوب/علامة تبويب، وهو في الواقع مجرد ملف نصي آخر.تتطلب قراءة ملفات Excel الفعلية استخدام مكتبات MS Office.

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

تجاهل جزء Excel (الذي تقول إنه غير مهم):

لقد وجدت أن LINQ مفيد إلى حد ما في تحليل ملفات txt (المحددة عبر الأنابيب أو CSV)

على سبيل المثاليؤدي هذا إلى قراءة ملف محدد بشُرط رأسية يتخطى صف hader وينشئ IEnumerable كنتيجة:

VAR Records = from line in File.ReadAlllines (@"c: blah.txt"). Skip (1) Let Parts = line.split ('|') حدد قطع الغيار ؛

إذا كانت الملفات صغيرة نسبيًا، فيمكنك استخدام ملف ملف فصل.لديها هذه الطرق التي قد تساعدك:

  • قراءة الكل بايت
  • قراءة جميع الخطوط
  • قراءة كل النص

سؤالك غامض بعض الشيء.أفترض أن الملفات النصية تحتوي على بيانات منظمة، وليس فقط أسطر نصية عشوائية.

إذا كنت تقوم بتحليل الملفات بنفسك، فإن .NET لديه وظيفة مكتبة لقراءة كافة الأسطر من ملف نصي إلى مجموعة من السلاسل (File.ReadAllLines).إذا كنت تعلم أن ملفاتك صغيرة بما يكفي للاحتفاظ بها في الذاكرة، فيمكنك استخدام هذه الطريقة والتكرار عبر المصفوفة باستخدام تعبير عادي للتحقق من صحة الحقول واستخراجها.

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

وأنا أتفق مع جون،

على سبيل المثال:-

using System.IO;

...

public class Program {
  public static void Main() {
    foreach(string s in File.ReadAllLines(@"c:\foo\bar\something.txt") {
      // Do something with each line...
    }
  }
}

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

فيما يتعلق بقراءة ملفات XLS:

إذا كان لديك Microsoft Office XP والإصدارات الأحدث، فيمكنك الوصول إلى مكتبات .NET SDK Office المضمنة بالفعل، حيث يمكنك "أصليًا" قراءة ملفات XLS وWord وPPT وما إلى ذلك.الرجاء ملاحظة أنه ضمن Office XP يتعين عليك التحقق من ذلك يدويًا أثناء التثبيت (ما لم يكن لديك .NET مثبتًا مسبقًا).

لا أعرف ما إذا كانت هذه المكتبات متاحة كحزمة منفصلة إذا لم يكن لديك Microsoft Office.

لسبب غامض، جميع هذه المكتبات (بما في ذلك أحدث الإصدارات من Office 2007 -a.k.a.):Office 12)، هي مكونات COM التي هي ألم للاستخدام، يسبب تبعيات قبيحة و لا متوافق مع الجيل السابق.أي.:إذا كانت لديك بعض الأساليب التي تعمل مع Office XP (Office11)، وقمت بتثبيتها على عميل لديه Office 12، لا يعمل, لأن بعض الواجهات تغيرت.لذلك تحتاج إلى الحفاظ اثنين مجموعة من "المكتبات" وطرق التعامل مع ذلك.وينطبق الشيء نفسه إذا كنت تستخدم مكتبات Office 12 للبرمجة، وكان عميلك لديه Office 11.مكتباتك لا تعمل.:س

لا أعرف لماذا لم تقم Microsoft مطلقًا بإنشاء مكتبة (Microsoft.Office.XXXX) المُدارة حول تلك الأشياء القبيحة.

على أية حال، سؤالك غريب جدًا، حاول اتباع بعض النصائح هنا.حظ سعيد!

أصبح برنامج تشغيل النص ODBC قديمًا إلى حد ما - ولا يحتوي على دعم Unicode.

من المثير للدهشة أن MS Excel لا يزال يستخدمه، لذلك إذا كنت يفتح عند استخدام Unicode CSV في Excel 2007 (بدلاً من استيراده)، ستفقد كافة الأحرف غير ASCII.

أفضل رهان هو استخدام أساليب قراءة الملفات الخاصة بـ .Net، كما اقترح الآخرون.

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