06-10-17, 02:42 PM (آخر تعديل لهذه المشاركة : 06-10-17, 02:53 PM {2} بواسطة rabeh.ram.)
سلام اخوان ارجو ان تكونوا في تمام الصحة والعافية .
استسمح الاخوة المشرفين على طرح التسأل هنا رغم انه لا يندرج ضمن تخصص القسم الى اني ادرجته هنا لكوني اعرف ان الاعضاء لايبخلون باي ردود واراء كما اني اعمل على vba الذي لم اجده في منتدنا الرائع على العموم انا لا اود ان ادخل الاعضاء معي في متاهة لغة برمجة جديدة بال انا ابحث فقط عن الخوارزمية التي تساعد في حل المطلوب جزاكم الله عنا الف خير
06-10-17, 05:43 PM (آخر تعديل لهذه المشاركة : 06-10-17, 05:45 PM {2} بواسطة silverlight.)
سؤالك غير واضح تماما خصوصا في موضوع انقطاع Line
عموما لكي تبني خوارزمية لأي شئ
يجب أن يكون لديك أساس قوي لكيفية تمرير البيانات حتي تستطيع التعامل معها لاحقا بحيث تسترد البيانات او جزء من هذه البيانات ومن ثم تتعامل معها
مثال صغير ربما يوضح لك كيف تضع استراتيحية مناسبة لتمرير البيانات
وهذا المثال يعتمد علي انك تمرر البينات ثم تقوم بتحويلها الي مصفوفة صغيرة
ولأني كتبت المثال بسرعة فأنا هنا لم أراعي أخطاء التنفيذ حين لا يتم تمرير البيانات للكلاس
PHP كود :
Public Class Line
Public Property ID As String Public Property Low As Integer Public Property High As Integer
Private Iterator Function GetEnumerator() As IEnumerable(Of Object) Yield Me.ID Yield Me.Low Yield Me.High Return End Function
Public Overrides Function ToString() As String Dim result As String = String.Empty Dim indent As Char = " "c Dim i As Integer = 0 While i < GetEnumerator.Count Dim obj As Object = GetEnumerator(i) result += obj.ToString result += indent i += 1
End While Return result.TrimEnd(indent) End Function
End Class
كيف تستخدم الكلاس
PHP كود :
Dim line As New Line With {.ID = "T007", .Low = 122, .High = 200}
ويمكن استردا البيانات من الكلاس بشكل مباشر من خلال كل Property او كالأتي
PHP كود :
Dim values As String() = line.ToString().Split(" "c) Dim s As String = values(0) Dim low As Integer = CInt(values(1)) Dim high As Integer = CInt(values(2))
كل ما عليك بعد ذلك هو ان تتعامل مع مجموعات أو مصفوفات من Line
الفكرة كأنك بتبني صفوف مثلما يحدث في DataTable مثلا
06-10-17, 06:20 PM (آخر تعديل لهذه المشاركة : 06-10-17, 06:38 PM {2} بواسطة rabeh.ram.)
شكرا لك اخي على تفاعلك الدائم معنا
رغم مجهودك الرائع معنا لكني صراحة لم افهم ردك و هذا لمستوي الضعيف في البرمجة عذا لك اخي
اعتقد ان الموضوع ليس بالاشكال الكبير الذي يحتاج اكواد كثيرة و اظن اني لم اقم بايصال الفكرة بشكبل جيد
------------- اعيد شرح المطلوب----------------
عندي ملف تكست هذا الملف يحتوي على مجموعة من الاحداثيات لنقط لخطوط LINE مختلفة هذه النقط تكون عادة بترقيم ID متتابع لكل LINE
في بعض الحالة تكون هنالك قفزة او انقطاع اي ان الترقيم يقفز بعض القيم
ما اريده انه عند ادراج الملف الى البرنامج بضغطة على البوتون يعطني ملف تاكست جديد يحتوي كل LINE اين يبدا فيها الترقيم والى اين ينتهي اي اكبر واصغر ID
في حالة LINE التي يوجد بها انقطاع و قفزة تظهر هته اللين هلى جزئين
اول قيمة -----------اكبر قيمة قبل الانقطاع
اصغر قيمة بعد الانقطاع ----- اكبر قيمة بعد الانقطاع
الشرح في الصورة اعلاه
مثال عن الملف المراد ادراجه والملف المراد استخراجه في المرفقات
07-10-17, 02:15 AM (آخر تعديل لهذه المشاركة : 07-10-17, 11:12 AM {2} بواسطة silverlight.)
كما سبق و قلت لك أنت تحتاج الي استراتيجية لقراءة المدخلات و إن كنت لا تريد استخدام كلاس يمكنك تنفيذ الأتي
تقرأ البيانات علي شكل Genric Dictionary و تحديدا علي شكل ..... Dictionary (Of Integer, String)
ثم تقوم بتحويله الي محموعات أو مصفوفات بخيث مثلا T005 تكون مصفوفة رقمية و T006 تكون مجموعة رقمية و هكذا
شرط التقسيم الي مجموعات هو أن المفتاح مختلف عن ما يليه في القيمة
كأنك تقارن T005 مع ما يليه من قيمة و هكذا
في النهاية سيكون لديك نوعان من المجموعات أو المصفوفات
المجموعة الأولي
وفيها الرقم المسلسل يزيد بمعدل منتظم =1 و غالبا ستجد هذا في المجموعات T005 و T007 و T008 و T009
غالبا هنا ليس لديك مشكلة فقط ستقرأ اعلي قيمة و أقل قيمة و بذلك تحصل علي مرادك
المجوعة الثانية
و هي الأصعب قليلا حيث أن الرقم المسلسل سيقفز و يزيد بمعدل أكبر من 1
وهنا عليك ان تقسم المجموعة T006 تحديدا الي مصفوفتان
و الشرط الذي يجب استخدامه في تقسيم المجموعة T006 هو أن الرقم الذي تقرأه يكون الفارق بينه و بين ما بعده أكبر من 1
هذا هو تفسيري لما فهمته من سؤالك
شئ أخير
المبرمج الذي يتعامل مع بيانات طبواغرافية
لا يصح أن يقول علي تفسه مستواي ضعيف