تكرار من خلال الملفات وقراءة السجلات
-
23-09-2019 - |
سؤال
ما هي أسرع طريقة لما يلي في C# 3.5:
- تكرار من خلال الملفات في دليل
- اقرأ سجلات الملف (الطول الثابت 247 حرفًا)
- قم بتحويل سلسلة الطول الثابت لكل سجل إلى بنية أو فئة.
شكرًا
المحلول
سيكون هذا سريعًا نسبيًا للكتابة:
var myStructs =
from file in Directory.GetFiles(".", "*.*", SearchOption.TopDirectoryOnly)
select ConvertFileToStructs(File.ReadAllText(file));
إذا كانت هذه هي أسرع طريقة ممكنة ، فالأداء؟ ربما لا ، لكنها لن تحدث فرقًا كبيرًا. ما سيؤثر على الأداء هو تنفيذ التخلص من دالة ConvertFileToStructs (). ولكن للإجابة على هذا ، نحتاج إلى معرفة التنسيق المحدد لملفاتك.
فقط اقرأ تعليقاتك. أود أن أقترح التحليل التالي:
List<MyStruct> ConvertFileToStructs(string content, int[] mapping)
{
var records = new List<MyStruct>();
int length = content.Length();
for(int i = 0; i < length; i += 247)
records.Add(ConvertRecordToStruct(content.Substring(i,247), mapping));
return records;
}
MyStruct ConvertRecordToStruct(string record, int[] mapping)
{
MyStruct s;
s.Field1 = record.Substring(mapping[0], mapping[1]);
//set other fields
return s;
}
من المحتمل أن يتم تحسين هذا الرمز للأداء ، لكنني لا أعتقد أنه سيغير الأمور بشكل كبير ، خاصةً لأن I/O إلى القرص متورط و Srackring () سريع جدًا (انظر http://dotnetperls.com/substring). بالطبع سيكون عليك اختبار هذا على جهازك.
نصائح أخرى
فئة مخصصة للتعامل مع الملفات
class customFile
{
string fileText;
public string FileText
{
get { return fileText; }
set { fileText = value; }
}
}
اقرأ كل النص
string[] filePaths = Directory.GetFiles(dirPath);
List<customFile> customFiles = new List<customFile>();
foreach (string file in filePaths)
{
customFiles.Add(new customFile { FileText = File.ReadAllText(file) });
}
لا تنتمي إلى StackOverflow