09-05-18, 01:08 AM
(آخر تعديل لهذه المشاركة : 09-05-18, 01:21 AM {2} بواسطة mrnooo2000.)
(08-05-18, 07:17 PM)عبدالله الدوسري كتب : الفكرة كالتالي :
1 - الملف النصي الذي أرفقتة , المفترض أنك تستطيع تحديد الحقول , متى يبداء الحقل ومتى ينتهي ، بمعنى أنك تستطيع إستخراج البيانات.
2 - تقوم بعمل برنامج مستقل + قاعدة بيانات بأي نوع ، ( اسم البرنامج مثلاً : Data Converter ) ( البرنامج يعمل بدون توقف ) هذا البرنامج مهمة الوحيدة هو إستخراج البيانات من الملف النصي وإدخالها في قاعدة البيانات ، وبعد كل عملية إستخراج للبيانات يتحقق من حجم الملف النصي كل ما يتغير حجم الملف يعني وجود بيانات جديدة ، دتخل في عملية إستخراج للبيانات من جديد ولكن تقوم بإدخال البيانات الجديدة فقط لقاعدة البيانات ، وهكذا ، ويظل البرنامج في عملية تحقق لحجم الملف النصي ، لنفرض كل 5 ثواني ( يتحقق من حجم الملف عملية لا تستغرق أجزاء أجزاء الثانية ) ولكن عند تغير الحجم تدخل في عملية إستخراج للبيانات ويتوقف التحقق من حجم الملف حتى تنتهي من إستخراج البيانات .
3 - الآن من خلال برنامجك أنت تقوم بالإتصال العادي على قاعدة البيانات بكل سهولة وسرعة ولا يؤثر على أداء البرنامج لديك ، لأن من يقوم بالمهمة هو برنامج ( Data Converter ) .
4 - أي معلومات جديدة على الملف النصي لن تظهر في برنامجك حتى يقوم البرنامج ( Data Converter ) بعملة.
5 - تحتاج أي معلومات جديدة للظهور لديك في البرنامج إلى نفس الوقت الازم لقراءة الملف النصي.
أتمنى وصلت الفكرة .
طريقة إستخراج البيانات تحتاج أن تبين لنا كيفية فصل الحقول لأنني قراة الملف ولم استطع معرفة الحقول ولا السجل , لم افهم شيء
رائع جدا
و لكن كل هذا سيحتاج الى قراءة الملف النصى
و نعود لنفس النقطة أننا نريد طريقة سريعة لقراءة هذه البيانات
بالنسبة للملف أنا أقرأه فعلا و أضعه فى datatable ثم أبدأ فى التعامل معه مباشرة و لك بدون برنامج وسيط
و لكن الأمر يتطلب حوالى 7 ثوانى لقراءة البيانات و ملء الجدول
و أعتقد أنه من الممكن أن يكون الوقت أقصر من ذلك
لأنه مع ذيادة السجلات عن ذلك ( و هذا قد يحدث ) سيزيد الوقت
عموما هذا هو الكود الذى أستعمله حاليا
أولا لقراءة الملف
كود :
Using sr As New StreamReader("Data.txt")
Dim Record(2228) As Char
Do While sr.Peek <> -1
Dim numChars As Integer = sr.Read(Record, 0, Record.Length)
' split Record into fields
Dim F As String() = SplitString(Record_Index, Record, FieldLegnths)
Record_Index += 1
Loop
End Using
و لقراءة الحقول
كود :
Public Function SplitString(ByVal Txt As String, Lengths As Integer()) As String()
Dim L As Integer = Lengths.Length - 1
Dim Fields(L) As String
Dim offset As Integer = 0
For i As Integer = 0 To L
Fields(i) = Txt.Substring(offset, Lengths(i))
offset += Lengths(i)
Next
Return Fields
End Function
طول السجل الواحد 2229 حرف و أطوال الحقول هى
كود :
Dim FieldLegnths As Integer() = New Integer() {100, 100, 100, 100, 100, 100, 5, 95, 10, 1000, 100, 94, 6, 4, 100, 100, 8, 105, 2}
اتمنى أن أجد كود أسرع من هذا