تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] اريد تقسيم عناصر listbox إلي ملفات txt داخل الجهاز
#1
Heart 
السلام عليكم ورحمة الله وبركاته 

انا لدي listbox1 يوجد به مليون بروكسي مثلا . او مليون عنصر . 
اريد ان احفظها علي الجهاز بصيغه txt 
ولكن يتم تقسيم المليون بروكسي او المليون عنصر علي 49 ملف 
كيف يمكنني فِعل ذلك ؟ 

اتمني الاجابة السريعة للضرورة

يتم تقسيمها علي 49 ملف بمعني انو يحفظهم 49 ملف text بدل ملف واحد
يقسم المجموع بتاعهم علي ال 49 ويحفظهوملي بالترتيب 1,2,3,4,5,6,7,8,9,10,11,............... 49
الرد }}}
تم الشكر بواسطة:
#2
فينكم يا شباب . Sad
الرد }}}
تم الشكر بواسطة:
#3
تفضل اخي الكريم :

كود :
       Dim LinesPerFile = 20000 'اقصي عدد عناصر لكل ملف
       Dim Lines = ListBox1.Items.Count 'عدد العناصر الكلي
       Dim Files = Math.Ceiling(Lines / LinesPerFile) 'عدد الملفات

       For FileID As Integer = 0 To Files - 1

           Dim FileName = String.Format("E:\{0}.txt", FileID)

           Using sw As New StreamWriter(File.Open(FileName, FileMode.OpenOrCreate))

               Dim startIndex = FileID * LinesPerFile 'اول عنصر في الملف الحالي
               Dim endIndex = Math.Min(startIndex + LinesPerFile, Lines) - 1 'اخر عنصر في الملف الحالي

               For index = startIndex To endIndex
                   sw.WriteLine(ListBox1.Items(index).ToString)
               Next

           End Using

       Next
الرد }}}
#4
(03-09-20, 07:46 PM)Anas Mahmoud كتب : تفضل اخي الكريم :

كود :
       Dim LinesPerFile = 20000 'اقصي عدد عناصر لكل ملف
       Dim Lines = ListBox1.Items.Count 'عدد العناصر الكلي
       Dim Files = Math.Ceiling(Lines / LinesPerFile) 'عدد الملفات

       For FileID As Integer = 0 To Files - 1

           Dim FileName = String.Format("E:\{0}.txt", FileID)

           Using sw As New StreamWriter(File.Open(FileName, FileMode.OpenOrCreate))

               Dim startIndex = FileID * LinesPerFile 'اول عنصر في الملف الحالي
               Dim endIndex = Math.Min(startIndex + LinesPerFile, Lines) - 1 'اخر عنصر في الملف الحالي

               For index = startIndex To endIndex
                   sw.WriteLine(ListBox1.Items(index).ToString)
               Next

           End Using

       Next


السلام عليكم ورحمة الله وبركاته 
اهلا بك اخي الكريم . 
انت لم تفهمني جيدا . 
انا اريد تقسيم عدد الاسطر الموجودة في listbox ,  ايا كان عددها لا يحذف منها 
وعند حفظ الملف يقوم بحفظ 48 ملف 
المهم في الاخر لما يعمل save للـ txt  يقسمهم في 48 تكست مش واحد بس . لان الملفات التي اعمل عليها كبيرة جدا .. تحتوي علي زيادة عن 2 مليون او مليون سطر .. في listbox  بالتالي انا اريد تقسيم العدد علي 48 txt  كما هو موضح في الصورة .. 

الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , ابراهيم ايبو
#5
وعليكم السلام ورحمة الله وبركاته

PHP كود :
       Dim filecount Math.Ceiling(ListBox1.Items.Count 48)
 
       Dim c As Integer 0
        For i 
1 To 48
            Dim s 
As New System.Text.StringBuilder
            For i2 
1 To filecount
                s
.AppendLine(ListBox1.Items(c))
 
               c 1
                If c 
ListBox1.Items.Count Then Exit For
 
           Next
            IO
.File.WriteAllText("bah" "i.txt"s.ToString)
 
       Next 
الرد }}}
#6
(03-09-20, 09:05 PM)bazooka top كتب : السلام عليكم ورحمة الله وبركاته 
اهلا بك اخي الكريم . 
انت لم تفهمني جيدا . 

بل فهمتك جيدا الحمد لله 

الكود تحدد فيه اقصى عدد تريده في كل ملف وليكن 20000 مثلا او 40000 كما تريد

ومن ثم يقوم بحفظ عناصر الليست بوكس في ملف كل ملف لايزيد عن العدد المحدد

لايقص اي شيء يحفظ العناصر كلها في ملفات بارقام

جرب الكود واخبرني بالنتيجة
الرد }}}
#7
(03-09-20, 10:02 PM)L35 كتب : وعليكم السلام ورحمة الله وبركاته

PHP كود :
       Dim filecount Math.Ceiling(ListBox1.Items.Count 48)
 
       Dim c As Integer 0
        For i 
1 To 48
            Dim s 
As New System.Text.StringBuilder
            For i2 
1 To filecount
                s
.AppendLine(ListBox1.Items(c))
 
               c 1
                If c 
ListBox1.Items.Count Then Exit For
 
           Next
            IO
.File.WriteAllText("bah" "i.txt"s.ToString)
 
       Next 

سأجربه ولي عودة شكرا لك

(03-09-20, 10:16 PM)Anas Mahmoud كتب :
(03-09-20, 09:05 PM)bazooka top كتب : السلام عليكم ورحمة الله وبركاته 
اهلا بك اخي الكريم . 
انت لم تفهمني جيدا . 

بل فهمتك جيدا الحمد لله 

الكود تحدد فيه اقصى عدد تريده في كل ملف وليكن 20000 مثلا او 40000 كما تريد

ومن ثم يقوم بحفظ عناصر الليست بوكس في ملف كل ملف لايزيد عن العدد المحدد

لايقص اي شيء يحفظ العناصر كلها في ملفات بارقام

جرب الكود واخبرني بالنتيجة


جربت الكود . يحفظ ملف واحد فقط فيه 20000 والباقي مش موجودين
الرد }}}
تم الشكر بواسطة:
#8
(03-09-20, 12:14 PM)bazooka top كتب : السلام عليكم ورحمة الله وبركاته 

انا لدي listbox1 يوجد به مليون بروكسي مثلا . او مليون عنصر . 
اريد ان احفظها علي الجهاز بصيغه txt 
ولكن يتم تقسيم المليون بروكسي او المليون عنصر علي 49 ملف 
كيف يمكنني فِعل ذلك ؟ 

اتمني الاجابة السريعة للضرورة

يتم تقسيمها علي 49 ملف بمعني انو يحفظهم 49 ملف text  بدل ملف واحد
يقسم المجموع بتاعهم علي ال 49 ويحفظهوملي بالترتيب 1,2,3,4,5,6,7,8,9,10,11,............... 49

وعليك السلام ورحمة الله وبركاته

مادام تقول ان لديك مليون عنصر في ليست بوكس عبارة عن عناوين بروكسي 
ومادام ان المطلوب هو تقسيم المليون بروكسي الى 49 مجموعة وهذا يعني ان في كل مجموعة يوجد 20408 عنصر وكسور
وكل مجموعة تحفظ في ملف نصي في المسار اللي تحدده

بحسب مافهمت انا جربت التالي

وضعت داخل الليست بوكس 1000 عنصر تبدأ من 0

ثم قمت بحفظ  كل 50 عنصر في ملف  على اعتبار انك تقصد بالرقم 49 تسعه واربعين عنصر 
وكانت النتيجة انشاء 21 ملف كل ملف يحتوي 50 بروكسي الا الاخير يحتوي اقل من 50 بحكم الضرورة

وتاكدت من الحل بمطابقة اخر عنصر في اخر ملف مع اخر عنصر في الليست بوكس 


كود :
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        WriteProxies(0)
    End Sub


    Sub WriteProxies(min As Integer)
        Static counter As Integer
        ProgressBar1.Maximum = ListBox1.Items.Count
        Dim fname As String = "D:\test\proxy"
        Dim sw As IO.StreamWriter
        sw = New IO.StreamWriter(fname & counter & ".txt")
        counter += 1

        Static max As Integer
        Dim lastValidMax As Integer = (ListBox1.Items.Count - 1) - 49

        If (min + 49) < (lastValidMax + 49) Then
            max = min + 49
        Else
            max = lastValidMax + 49 ' (ListBox1.Items.Count - 1)
        End If

        For a As Integer = min To max
            Application.DoEvents()

            sw.WriteLine(ListBox1.Items(a), True)
            Try
                ProgressBar1.Value += 1

            Catch ex As Exception

            End Try
        Next
       
        sw.Close()
        If max < (ListBox1.Items.Count - 1) Then
            min = max
            WriteProxies(min)

        End If


    End Sub

الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#9
اخي بازوكا أسف على الرد الاول كان خاطىء
واعذرني لاني بصراحة كذا مرة اشوف السؤال هذا في المنتدى او سؤال قريب منه واحس انه بسيط لكن بااتضح انه على الاقل يبغى زيادة تركيز

لكن الحمد لله رجعت دققت في سؤالك وحاولت اغير طريقتي للحل
وان شاء الله يكون هذا  الحل هو اللي ماتسأل بعده

تفضل الكود:


كود :
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        WriteProxies(0)
    End Sub


    Sub WriteProxies(firstLine As Integer)

        Static counter As Integer = 1
        ProgressBar1.Maximum = ListBox1.Items.Count
        Dim fname As String = "D:\test\proxy"
        Dim sw As IO.StreamWriter
        sw = New IO.StreamWriter(fname & counter & ".txt", False)

        Dim numberofFiles As Integer = 49
        Dim MaxLinesInFile As Integer

        '*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x**x*x*x*x*x
        '  for loop التحقق من عدد العناصر قبل بدء
        If ListBox1.Items.Count < numberofFiles Then
            MsgBox("خطأ،عدد العناصر اقل من عدد الملفات")
            Exit Sub
        End If
        'x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*

        MaxLinesInFile = Math.Floor((ListBox1.Items.Count) / numberofFiles)


        '/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\//\/\/\/\\//\
        'هذا المتغير ضروري لانه يخبرنا ان عدد العناصر التي لم تكتب اصبح اقل من عدد الاسطر
        'لانه قيمته هي نفس عدد الاسطر لاخر ملف في حال كان اخر ملف يجب ان يحتوي على اسطر اقل من مما قبله
        Dim diff As Integer = (ListBox1.Items.Count) - (MaxLinesInFile * numberofFiles)
     '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

        'هنا نتأكد في كل مره ان عدد العناصر التي لم تحفظ 
        'اكبر او اقل من عدد الاسطر المطلوبه لكل ملف
        'فان كان عدد العناصر اقل من عدد الاسطر
        ' firstline+ diff قيمة MaxLinesInFile نعطي المتغير 
        '

        If firstLine + diff = ListBox1.Items.Count Then
            MaxLinesInFile = firstLine + diff
        Else
            MaxLinesInFile = firstLine + MaxLinesInFile
        End If

        Static i As Integer = 1
        For a As Integer = firstLine To MaxLinesInFile
            Application.DoEvents()


            sw.WriteLine(ListBox1.Items(a), False)
            ListBox1.SelectedIndex = a

            Try
                ProgressBar1.Value += 1

            Catch ex As Exception

            End Try

            If a = (ListBox1.Items.Count - 1) Then
                sw.Flush()
                sw.Close()
                counter = 0
                i = 1
                ProgressBar1.Value = 0
                MaxLinesInFile = 0
                firstLine = 0
                Exit Sub

            End If
        Next

        sw.Close()

        If counter < numberofFiles Then
            counter += 1
        End If

        WriteProxies(MaxLinesInFile)



    End Sub


لكن رجاء تخبرني اذا كان الحل صحيح او كان خاطىء
تحياتي

الرد }}}
تم الشكر بواسطة: Anas Mahmoud , ابراهيم ايبو
#10
لا اعلم اخي تفاصيل برنامجك ولكنها عملت معي في مثال بسيط 

   

   


الملفات المرفقة
.zip   ListFiles.zip (الحجم : 53.42 ك ب / التحميلات : 31)
الرد }}}


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Star [سؤال] مشكلة في السحب والأفلات داخل الفورم عند التصميم reduouo 1 100 02-03-24, 02:39 AM
آخر رد: Taha Okla
  [سؤال] ضغط ملفات PDF flawer69 1 522 06-04-23, 03:03 AM
آخر رد: Taha Okla
Information [C#.NET] اريد طباعة فاتورة باستعمال Xtrareport Devexpress soufiweb 2 748 26-03-23, 01:17 PM
آخر رد: sanyor77
  panel1 اريد ان يختفي و يضهر عند مرور الماوس الفارة HASNI14 3 691 02-02-23, 01:58 AM
آخر رد: HASNI14
  اريد كود فتح ربط موقع به روابط m3u على listview HASNI14 0 476 23-01-23, 04:57 AM
آخر رد: HASNI14
  [C#.NET] تعديل سجل في listbox ali_ahmed12 2 599 13-11-22, 03:59 PM
آخر رد: ali_ahmed12
  كيفية قراءة وعرض ملفات pdf مخزنة في داتا كرد فيو من خلال زر بتن وبدون open file dialo مرتضى 0 607 31-10-22, 12:53 AM
آخر رد: مرتضى
  [سؤال] اريد حل لمشكله كود التعديل الرجاء محمدكمالمحمدعبدالمنعم 2 1,150 17-04-22, 09:13 PM
آخر رد: محمدكمالمحمدعبدالمنعم
  عدد-بيانات-معينه-داخل-تقرير amonem 3 1,355 03-04-22, 09:42 PM
آخر رد: asemshahen5
  تحويل كود سي شارب الي فاكشن داخل سيكول سيرفر amonem 0 926 10-03-22, 11:32 AM
آخر رد: amonem

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم