تقييم الموضوع :
  • 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 ك ب / التحميلات : 15)
الرد


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [C#.NET] اريد تصحيح الخطأ في هذا الكود عاصم النجار 1 129 25-10-20, 05:34 AM
آخر رد: عاصم النجار
  مساعدة فى مشغل قنوان عبر الانترنت اريد اخد صورة issamsaidd 1 271 28-08-20, 09:24 PM
آخر رد: issamsaidd
  [سؤال] البحث عن كلمة داخل اكثر من ملف malek369 1 282 03-08-20, 02:35 AM
آخر رد: Rabeea Qbaha
  [سؤال] البحث عن كلمة داخل ليست بوكس malek369 2 349 31-07-20, 11:53 AM
آخر رد: malek369
Sad [سؤال] طريقة البحث عن كلمات معينة داخل موقع ويب malek369 4 662 29-07-20, 11:18 PM
آخر رد: malek369
Sad [سؤال] طريقة استخدام ( or ) في سي شارب داخل ( if ) واحدة malek369 2 377 27-07-20, 09:26 AM
آخر رد: malek369
  طلب مساعدة فتح ملف اكسيل داخل فورم AboRakan 1 606 29-02-20, 03:04 AM
آخر رد: khodor1985
  [كود] ملء ملفات بي دي أف من ملف اكسيل Casper12421 1 408 17-02-20, 08:18 AM
آخر رد: عاشق سي شارب
  احتاج كود لاستخراج سيريل الجهاز وملحقاته hglogtd 2 478 14-02-20, 05:44 PM
آخر رد: hglogtd
  تحويل كود سي شارب الى فيو داخل سيكول سيرفر amonem 0 498 12-12-19, 11:26 AM
آخر رد: amonem

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


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