منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : ماهي معادلة تقسيم شيء ما
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
هذا نفس الكود مع رشة ملح :

كود :
       Dim C1 As Integer = ListBox1.Items.Count    ' العدد الاجمالي
       Dim G1 As Integer = 40                      ' تعداد المجموعة الواحدة

       Dim GC1 As Integer = C1 \ G1                ' عدد المجموعات
       Dim M1 As Integer = C1 Mod G1               ' الباقي خارج المجموعات المكتملة

       Dim fn As String                            ' مسار ملف الحفظ

       Dim All As String = ""                      ' شغلات كثيرة بعدين بتعرفها

       For i = 0 To C1 - 1
           ListBox1.SetSelected(i, True)
           All &= ListBox1.Text & vbNewLine

           If (i + 1) Mod G1 = 0 And (i + 1) > 0 Then  ' الوصول لأول مجموعة بشرط العداد أكبر من الصفر
               fn = fpath & (i + 1).ToString("000") & ".txt"
               IO.File.WriteAllText(fn, All)
               All = ""
           ElseIf M1 > 0 And i = C1 - 1 Then       ' إذا كان يوجد باقي  والعداد وصل للنهاية
               fn = fpath & (i + 1).ToString("000") & ".txt"
               IO.File.WriteAllText(fn, All)
               All = ""
           End If
       Next

..
ماشاء الله تبارك الله
هل الفكرة ممكن نطبقها على ارقام كبيرة جدا مثل حجم الملف اذا حولنا الميجا الى بايت؟.
طبعا باستخدام BinaryReader  مع  BinaryWriter
هل ينفع او لها اسلوب آخر لاني اطبق نفس المبدا اللي بالمشاركة.
(26-08-22, 01:03 AM)سعود كتب : [ -> ]ماشاء الله تبارك الله
هل الفكرة ممكن نطبقها على ارقام كبيرة جدا مثل حجم الملف اذا حولنا الميجا الى بايت؟.
طبعا باستخدام BinaryReader  مع  BinaryWriter
هل ينفع او لها اسلوب آخر لاني اطبق نفس المبدا اللي بالمشاركة.

جرب .. وأعطينا النتيجة..
ولكن عليك رفع مستوى المتغيرات
الى Long او اكثر
بنهاية المطاف ما اظن اني احيد عن المثال الاول( اقصد اني لا احسن افضل منه رغم ضعفه) ,,,   اريد باي طريقة جديدة تكون افضل وممكن افهمها.

على كل حال ظليت اتنقل بين المشروع الاول ومشروع جديد احاول اطبق اللي فهمته من اكواد التعامل مع النصوص لكن مافيه اي نتيجة.
الشيء المضحك ويرفع الضغط بنفس الوقت ان on error resume next لم تعد تتخطى الاخطاء !!!
ولا حتى try
هي مثل علاج سريع لتجاوز بعض المشاكل والتي يكون أكواد التصحيح وتلافي الخطأ فيها أكثر من اللازم
ومن الخطأ أساساً استخدام هذه العبارات لتجاوز الأخطاء - بل يجب الوقوف على كل خطأ ووضع الكود المناسب لتلافيه ومناقشة حالته..

فهي ربما تتجاز سطر أو سطرين من الاخطاء ولكن ليس كل اللبلوك البرمجي ..
---
من الحالات النادرة التي تستدعي وضع هذا الكود 
مثل طلب حذف ملف -فربما يكون هذا الملف مفتوح - فلا يستطيع البرنامج حذفه - فيأتي هنا دور هذه العبارة لـ لتلافي ايقاع البرنامج بمشكلة الايقاف المفاجئ بسبب هذا الخطأ - ويبقى الوضع هكذا حتى يجد حل لكل نوع من الملفات - فليس كل الملفات تقبل نفس الحلول..
---
في برامجي المحاسبية : أرفض تماماً استخدامها إلا في حالة تنسيق شكل النوافذ بالتكبير والتصغير لتناسب كل أنواع الشاشات.
و في حالة بناء جداول البيانات والجداول المؤقته من خلال الكود .. فقط ..  
أما عند تسجيل القيود والحسابات فمرفوض أن يتم تلافي أي خطأ بل يجب إصلاح كل الأخطاء التي تقع ويجب وضع لها حلول منطقية تبقي الحسابات صحيحة .. فأي خطأ يقع في أي طرف من أطراف القيود من الصعب ادراكه وادراك مكان وقوعه .. فالحل يجب أن نترك الخطأ يقع لينبهنا عن وجود أخطاء لنقوم باصلاحها بنفس وقت وقوعها .. لأنها لا تتحمل التأخير ..  فربما تصنع برنامج في ستة أشهر وتبقى سنتينن حتى تصلح أغلب أخطائه ..
PHP كود :
 btnstart.Invoke(Sub() btnstart.Enabled True
الكود السابق واضح لكن مكانه بعد حلقة for ومستغرب لماذا لا يتم تفعيل الزر.

PHP كود :
Private Sub split(ByVal fpath As String)
 
       If IO.File.Exists(fpath) = False Then Exit Sub
        Dim thefile 
As New IO.FileInfo(fpath)
 
       Dim fn As String thefile.Name
        Dim GC1 
As Long filesize filemax                 ' عدد المجموعات
        Dim M1 As Long = filesize Mod filemax                ' 
الباقي خارج المجموعات المكتملة
        Dim fs 
As New FileStream(fpathFileMode.Open)
 
       Dim br As New BinaryReader(fs)
 
       Dim i As Long
        Dim n 
As Long 0
        Dim newfile 
As String folder fn "_File_" n.ToString("00000000")
 
       p1.Invoke(Sub() p1.Maximum filemax + (filemax 80)) 'ماقدرت اتصرف معها زودت القيمة جدعنة بس
        For i = n To filesize - 1
            If th.ThreadState = Threading.ThreadState.AbortRequested Then Exit For
            n = i
            p1.Invoke(Sub() p1.Value = fl(newfile))
            If (fl(newfile) < filemax) Then
                lbl.Invoke(Sub() lbl.Text = newfile)
                Using fw As New FileStream(newfile, FileMode.Append)
                    Using bw As New BinaryWriter(fw)
                        bw.Write(br.ReadBytes(i))
                        fw.Close()
                        bw.Close()
                    End Using
                End Using
            ElseIf fl(newfile) >= filemax Then
                n += 1
                newfile = folder & fn & "_File_" & n.ToString("00000000")
                lbl.Invoke(Sub() lbl.Text = newfile)
                Using fw As New FileStream(newfile, FileMode.Append)
                    Using bw As New BinaryWriter(fw)
                        bw.Write(br.ReadBytes(i))
                        fw.Close()
                        bw.Close()
                    End Using
                End Using
                p1.Invoke(Sub() p1.Value = fl(newfile))
            End If
        Next
        btnstart.Invoke(Sub() btnstart.Enabled = True)
    End Sub 

هذا  الاجراء اللي شيب براسي التقسيم تمام مثل الاول والاشكالية مثل الاولى.
اذا فيه خطا ياليت تدلوني على التصحيح.
طبعا حاولت تطبيق الافكار  الموجودة باللفكرة لكن لم تفلح فظللت اتراجع الى ان اصبح البرنامج نسخة مطابقة للمثال الاول.
الظاهر خلاص افكر انسى.
الصفحات : 1 2