هذا نفس الكود مع رشة ملح :
كود :
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(fpath, FileMode.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
هذا الاجراء اللي شيب براسي التقسيم تمام مثل الاول والاشكالية مثل الاولى.
اذا فيه خطا ياليت تدلوني على التصحيح.
طبعا حاولت تطبيق الافكار الموجودة باللفكرة لكن لم تفلح فظللت اتراجع الى ان اصبح البرنامج نسخة مطابقة للمثال الاول.
الظاهر خلاص افكر انسى.