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

نسخة كاملة : ماهي معادلة تقسيم شيء ما
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمةالله و بركاته
مثلا لدينا ListBox يحتوي عدد غير محدد (لاني اريد المعادلة فقط) و اقصد مرة 150 و مرة 230 وهكذا
لو حبيت تقسيمه بقيمة ايضا ليست ثابتة .
مثال آخر:
اريد كل 80 سطر اجعله قسم آخر اي احفظه المهم ماهي المعادلة ؟
وانا اتصفح بالجوال وجدت سؤال اجاب عليه الاخ Selverlight لكن لما دخلت المنتدى وظليت ابحث لم اجده.
وعليكم السلام ورحمة الله وبركاته

هل تقصد مثلاً :
أنه لو لديك 141 عنصر أن تأخذ من الـ ListBox   : 
عناصر مثلاً 50 وتضعهم في ملف ثم 50 وتضعهم في ملف وتأخذ الباقي في ملف آخر ..
؟؟؟
؟؟
؟
(25-08-22, 08:34 AM)Taha Okla كتب : [ -> ]وعليكم السلام ورحمة الله وبركاته

هل تقصد مثلاً :
أنه لو لديك 141 عنصر أن تأخذ من الـ ListBox   : 
عناصر مثلاً 50 وتضعهم في ملف ثم 50 وتضعهم في ملف وتأخذ الباقي في ملف آخر ..
؟؟؟
؟؟
؟

السلام عليكم و رحمة الله و بركاته
ربما هذا الموضوع يقي بالغرض او يقربها
https://stackoverflow.com/questions/3840...to-2-parts
(25-08-22, 08:34 AM)Taha Okla كتب : [ -> ]وعليكم السلام ورحمة الله وبركاته

هل تقصد مثلاً :
أنه لو لديك 141 عنصر أن تأخذ من الـ ListBox   : 
عناصر مثلاً 50 وتضعهم في ملف ثم 50 وتضعهم في ملف وتأخذ الباقي في ملف آخر ..
؟؟؟
؟؟
؟

اي نعم هذا هو القصد وهذا اريده لكي اصحح مشروع الدمج والتقسيم لانه تنقصه الدقة من هذا الجانب.

(25-08-22, 08:43 AM)asmarsou كتب : [ -> ]
(25-08-22, 08:34 AM)Taha Okla كتب : [ -> ]وعليكم السلام ورحمة الله وبركاته

هل تقصد مثلاً :
أنه لو لديك 141 عنصر أن تأخذ من الـ ListBox   : 
عناصر مثلاً 50 وتضعهم في ملف ثم 50 وتضعهم في ملف وتأخذ الباقي في ملف آخر ..
؟؟؟
؟؟
؟

السلام عليكم و رحمة الله و بركاته
ربما هذا الموضوع يقي بالغرض او يقربها
https://stackoverflow.com/questions/3840...to-2-parts

يمكن نفس الفكرة وباذن الله ساحاول فهم الموضوع من الرابط.
انا ذكرت الليست بوكس كمثال وانا اطبق مثال جديد عليه ان انا فهمت الفكرة فسانتقل باذن الله  الى مشروع تقسيم الملفات لكي اصحح هذه الجزئية فهي غير دقيقة بما يكفي.
في البداية عليك معرفة عدة عناصر  :

عدد المجموعات  - أو قدد عناصر كل مجموعة :
إذا كنت تريد تقسيمه بحسب عدد المجموعات 

فيكون لديك عدة متغيرات 

(مجموع العناصر الكلي) تقسيم (عدد عناصر المجموعة الواحدة)  =  عدد المجموعات.
في التقسيم هنا نستخدم الاشارة (BackSlash)  لأنها تعطي نتيجة صحيحة بدون فواصل  يعني الاشارة (\).

بعد ذلك تحسب الباقي وذلك من خلال الدالة (Mod) ..
(مجموع العناصر الكلي) Mod (عدد عناصر المجموعة الواحدة)  =  باقي القسمة .
فهذه تعطيك الرقم الصحيح أيضاً والذي لا يقبل القسمة على الرقم المقسوم عليه ..

=========================================

وإذا كان لديك عدد عناصر المجموعة الواحدة معلوم استخدم الكود التالي : 
كود :
       ListBox2.Items.Clear()

       '  Val(TextBox2.Text)    هي عدد عناصر المجموعة الواحدة

       Dim N1 As Integer = ListBox1.Items.Count \ Val(TextBox2.Text)  ' عدد المجموعات
       Dim M1 As Integer = ListBox1.Items.Count Mod Val(TextBox2.Text)

       For i = 1 To N1
           ListBox2.Items.Add(TextBox2.Text)
       Next
       ListBox2.Items.Add(M1)



إذا كان لديك عدد المجموعات معلوم استخدم التالي  لمعرفة عدد عناصر كل مجموعة :
كود :
       ListBox2.Items.Clear()

       '  Val(TextBox2.Text)    هي عدد المجموعات

       Dim N1 As Integer = ListBox1.Items.Count \ Val(TextBox2.Text)  ' عدد عناصر المجموعة الواحدة
       Dim M1 As Integer = ListBox1.Items.Count Mod N1

       For i = 1 To Val(TextBox2.Text)
           ListBox2.Items.Add(N1)
       Next
       ListBox2.Items.Add(M1)


الباقي عليك و هو فرز المجموعات بحسب الحلقة والتي بات معلوم لديك قيمة عناصرها..
باذن الله ساعيد القراءة للاكواد مرات عدة حتى اتمكن من تطبيق الفكرة.

شوف الكود اللي كتبته (اقصد انا) كتبته قبل كتابة الموضوع وواجهت اشكالية هي نفس اشكالية المشروع الخاص بالتقسيم والدمج وهو ان الملفات الصغيرة الحجم لا تنفع معها بسبب المشكلة بالكود:

PHP كود :
Imports System.IO
Public Class Form1
    Dim fpath 
As String IO.Path.GetDirectoryName(Application.ExecutablePath) & "\textfiles\"
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 0 To 100
            ListBox1.Items.Add(i.ToString("
000"))
        Next
        If IO.Directory.Exists(fpath) = False Then
            IO.Directory.CreateDirectory(fpath)
        End If
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim maxint As Integer = 40
        Dim i As Integer
        Dim all As String = ""
        For i = 0 To ListBox1.Items.Count - 1
            ListBox1.SetSelected(i, True)
            Dim fn As String = fpath & i.ToString("
000") & ".txt"
            all &= ListBox1.Text & vbNewLine
            If i >= maxint Then
                If i Mod maxint = 0 Then
                    IO.File.WriteAllText(fn, all)
                    all = ""
                End If
            End If
            fn = Nothing
        Next
    End Sub
End Class 

هذا الكود نتيجته يحفظ الى 80 فقط .
ماهي الجزئية الخطأ.
(25-08-22, 09:47 AM)سعود كتب : [ -> ]باذن الله ساعيد القراءة للاكواد مرات عدة حتى اتمكن من تطبيق الفكرة.

شوف الكود اللي كتبته (اقصد انا) كتبته قبل كتابة الموضوع وواجهت اشكالية هي نفس اشكالية المشروع الخاص بالتقسيم والدمج وهو ان الملفات الصغيرة الحجم لا تنفع معها بسبب المشكلة بالكود:

PHP كود :
Imports System.IO
Public Class Form1
    Dim fpath 
As String IO.Path.GetDirectoryName(Application.ExecutablePath) & "\textfiles\"
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 0 To 100
            ListBox1.Items.Add(i.ToString("
000"))
        Next
        If IO.Directory.Exists(fpath) = False Then
            IO.Directory.CreateDirectory(fpath)
        End If
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim maxint As Integer = 40
        Dim i As Integer
        Dim all As String = ""
        For i = 0 To ListBox1.Items.Count - 1
            ListBox1.SetSelected(i, True)
            Dim fn As String = fpath & i.ToString("
000") & ".txt"
            all &= ListBox1.Text & vbNewLine
            If i >= maxint Then
                If i Mod maxint = 0 Then
                    IO.File.WriteAllText(fn, all)
                    all = ""
                End If
            End If
            fn = Nothing
        Next
    End Sub
End Class 

هذا الكود نتيجته يحفظ الى 80 فقط .
ماهي الجزئية الخطأ.
استاذ اذا كان قصدك كما فهمت هو تقسيم عناصر الليست اي ال 100 عنصر المنشأة عند الفورم لود الى قسمين متساويين اي كل قسم 50 عنصر فقط غير معرف ال maxint  في بداية كود البوتن من =40  الى عدد عناصر الليست الحقيقية ال 100 عنصر ليصبح الكود برمته على النحو
PHP كود :
Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        Dim maxint 
As Integer = (ListBox1.Items.Count 1) / 2
        Dim i 
As Integer
        Dim all 
As String ""
 
       For i 0 To ListBox1.Items.Count 1
            ListBox1
.SetSelected(iTrue)
 
           Dim fn As String fpath i.ToString("000") & ".txt"
 
           all &= ListBox1.Text vbNewLine
            If i 
>= maxint Then
                If i Mod maxint 
0 Then
                    IO
.File.WriteAllText(fnall)
 
                   all ""
 
               End If
 
           End If
 
           fn Nothing
        Next
    End Sub 
إقتباس :استاذ اذا كان قصدك كما فهمت هو تقسيم عناصر الليست اي ال 100 عنصر المنشأة عند الفورم لود الى قسمين متساويين اي كل قسم 50 عنصر فقط غير معرف ال maxint  في بداية كود البوتن من =40  الى عدد عناصر الليست الحقيقية ال 100 عنصر ليصبح الكود برمته على النحو
الـ maxint هذا متغير وهو يمثل حجم التقسيم  لو كانت بنود الليست بوكس كلها 100 اريد ان قسمناها على 40 و 40  يبقى 20 هذه الاخيرة كيف اقتنصها و اطبعها.
خذها من يد عربية :

كود :
       Dim maxint As Integer = 40
       Dim i As Integer
       Dim all As String = ""

       Dim j As Integer

       For i = 0 To ListBox1.Items.Count - 1
           ListBox1.SetSelected(i, True)

           Dim fn As String = fpath & i.ToString("000") & ".txt"

           all &= ListBox1.Text & vbNewLine

           If (i + 1) >= maxint Then
               If (i + 1) Mod maxint = 0 Then
                   IO.File.WriteAllText(fn, all)
                   all = ""
               ElseIf (i + 1) > (maxint * ((ListBox1.Items.Count - 1) \ maxint)) Then
                   For j = (maxint * ((ListBox1.Items.Count - 1) \ maxint)) + 1 To ListBox1.Items.Count - 1
                       i = j
                       ListBox1.SetSelected(i, True)
                       all &= ListBox1.Text & vbNewLine
                   Next

                   i = j + 1
                   IO.File.WriteAllText(fpath & j.ToString("000") & ".txt", all)
                   all = ""

                   ' i = j
               End If
           
           End If
           fn = Nothing
       Next

(مع أنه مو عاجبني طريقة الكود)  أظن هناك أفضل من هذه الطريقة وكود أبسط لتقسيم البيانات ولكن أبقيت على نفس الطريقة التي تعرفها..

بالتوفيق ..
(25-08-22, 12:21 PM)Taha Okla كتب : [ -> ]خذها من يد عربية :

كود :
       Dim maxint As Integer = 40
       Dim i As Integer
       Dim all As String = ""

       Dim j As Integer

       For i = 0 To ListBox1.Items.Count - 1
           ListBox1.SetSelected(i, True)

           Dim fn As String = fpath & i.ToString("000") & ".txt"

           all &= ListBox1.Text & vbNewLine

           If (i + 1) >= maxint Then
               If (i + 1) Mod maxint = 0 Then
                   IO.File.WriteAllText(fn, all)
                   all = ""
               ElseIf (i + 1) > (maxint * ((ListBox1.Items.Count - 1) \ maxint)) Then
                   For j = (maxint * ((ListBox1.Items.Count - 1) \ maxint)) + 1 To ListBox1.Items.Count - 1
                       i = j
                       ListBox1.SetSelected(i, True)
                       all &= ListBox1.Text & vbNewLine
                   Next

                   i = j + 1
                   IO.File.WriteAllText(fpath & j.ToString("000") & ".txt", all)
                   all = ""

                   ' i = j
               End If
           
           End If
           fn = Nothing
       Next

(مع أنه مو عاجبني طريقة الكود)  أظن هناك أفضل من هذه الطريقة وكود أبسط لتقسيم البيانات ولكن أبقيت على نفس الطريقة التي تعرفها..

بالتوفيق ..
 احسنت
الصفحات : 1 2