منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] نقل البيانات من ملف csv الي الداتا جريد فيو - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] نقل البيانات من ملف csv الي الداتا جريد فيو (/showthread.php?tid=26623)

الصفحات: 1 2


نقل البيانات من ملف csv الي الداتا جريد فيو - محمد اسماعيل - 24-09-18

السلام عليكم


عندي ملف رسائل مسحوبة من الموبايل بصيغة csv

الملف ياخذ الشكل التالي :-

Sno,Date,Contact Name,Number,SMS Body

1,الأربعاء ٢٢/٠٨/٢٠١٨ at ٠١:٢٦:٣٠ م,Hekaya,Hekaya,خصم 50% علي تجديد الباقه الشهرية لمدة شهر كلم #10*011* للاشتراك قبل التجديد



 بنقل محتوي الملف الي الداتا جريد فيو بناء علي نقل كل قيمة بعد الفاصلة , بالملف كعمود بالداتا جريد فيو

المشكلة اما مي كالاتي

1- اظهار الرسائل المرسلة بعنوان  mony وهيا نفس المكان الخاص Hekaya   بالفاصلة 2  بالجملة الواحدة بالملف النصي

2- حذف الرسائل التي لا تحتوي علي مرسل باسم  mony او قيمتها null

3- بعض اللينات بالملف النصي تكون مكررة الرسائل او قيمتها فارغة اريد حذفها

4- التاريخ يظهر بالشكل الاتي   =   الأربعاء ٢٢/٠٨/٢٠١٨ at ٠١:٢٦:٣٠ م      اريد حذف at وتبديلها باسم اليوم  بالشكل التالي

  ٢٢/٠٨/٢٠١٨ الأربعاء ٠١:٢٦:٣٠ م   بدل من الأربعاء ٢٢/٠٨/٢٠١٨ at ٠١:٢٦:٣٠ م

5- طبعا طريقة الريجيستر لا اجداستخدامها ساعدني احد الاخوة لحذف جزء من اللينات لاستخراج المبالغ المحولة الي واريدها كما هيا


الكود الي استخدمتة 

مشاكلة

1- عدم حذف المكرر مباشرتا من الملف اثناء نقلة

2- عدم حذف القيم الفارغة كما سبق وذكرت

3- تعديل التاريخ كما سبق


كود :
Sub removduplicate()
       On Error Resume Next
       ' حذف المكرر
       For intI = DATAGRID_NAME.Rows.Count - 1 To 0 Step -1
           For intJ = intI - 1 To 0 Step -1
               If DATAGRID_NAME.Rows(intI).Cells(1).Value = DATAGRID_NAME.Rows(intJ).Cells(1).Value AndAlso DATAGRID_NAME.Rows(intI).Cells(3).Value = DATAGRID_NAME.Rows(intJ).Cells(3).Value Or DATAGRID_NAME.Rows(intI).Cells(2).Value = Nothing Then
                   DATAGRID_NAME.Rows.RemoveAt(intI)
               End If
           Next
       Next

       DATAGRID_NAME.Refresh()
       For i As Integer = 0 To DATAGRID_NAME.Rows.Count - 1
           DATAGRID_NAME.Rows(i).Cells(0).Value = (i + 1).ToString
           Label2.Text = i + 1
       Next
   End Sub
   Private Sub LIST_FILE_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LIST_FILE.SelectedIndexChanged
       On Error Resume Next
       DATAGRID_NAME.Rows.Clear()
       Dim txt As String = IO.File.ReadAllText(LIST_FILE.SelectedItem)

       Dim arr() As String = (From m In Regex.Matches(txt, "\d+,.+") Select CStr(m.Value)).ToArray
       For Each a In arr
           Dim r = a.Split(",")
           If Not IsDBNull(r(2)) AndAlso r(2) = "mony" Then
               Dim tel As String = Regex.Match(r(4), "(?<=(من رقم)\s?\(?\s?)\d{10,}").Value
               Dim code As String = Regex.Match(r(4), "(?<=(رقم العملية)\s?\(?\s?)\d{10,}").Value
               Dim MONY As String = Regex.Match(r(4), "(?<=(مبلغ)\s?\(?\s?)\d{1,}").Value
               Dim lst As New List(Of String)(r)
               lst.Add(code)
               lst.Add(tel)
               lst.Add(MONY)

               Me.DATAGRID_NAME.Rows.Add(lst.ToArray)
           End If
       Next
       DATAGRID_NAME.Refresh()
       removduplicate()

   End Sub



RE: نقل البيانات من ملف csv الي الداتا جريد فيو - r49 - 24-09-18

لم ترفق المشروع للتجربة على أن يشمل ملف csv مع توضيح أكثر لدور كلمة mony


RE: نقل البيانات من ملف csv الي الداتا جريد فيو - محمد اسماعيل - 24-09-18

(24-09-18, 12:34 AM)r49 كتب : لم ترفق المشروع للتجربة على أن يشمل ملف csv مع توضيح أكثر لدور كلمة mony

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

كلمة mony  خاصة باسم الرسالة بالاشعارات او عنوان الرسالة الي انا مهتم بيها وفيها العمليات النقدية

وبيظهر مع الرسائل طبعا العروض اليومية والخدمات الي مش محتجها تظهر بالداتا جريد وبتاتي باسماء اخري غير mony


RE: نقل البيانات من ملف csv الي الداتا جريد فيو - elgokr - 24-09-18

(24-09-18, 01:37 AM)محمد اسماعيل كتب : صعب انقل الملف فية اكواد العملية وارقام العملاء واكواد خاصة بشرحتي

كلمة mony  خاصة باسم الرسالة بالاشعارات او عنوان الرسالة الي انا مهتم بيها وفيها العمليات النقدية

وبيظهر مع الرسائل طبعا العروض اليومية والخدمات الي مش محتجها تظهر بالداتا جريد وبتاتي باسماء اخري غير mony


اخى محمد اسماعيل

ارفق ملف الـ csv وبالطريقة التالية
قم بعمل نسخة من الملف لديك 
ثم قم بتحريره ومسح جميع البيانات وابقاء لا يقل عن عدد 2 بيان
يمكنك تغيير الاسماء والتواريخ وما شبه ببيانات اخري عشوائية ولكن توافق النطاق 

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

تحياتى لك
وتمنياتى لك التوفيق



RE: نقل البيانات من ملف csv الي الداتا جريد فيو - محمد اسماعيل - 24-09-18

(24-09-18, 11:28 AM)elgokr كتب :
(24-09-18, 01:37 AM)محمد اسماعيل كتب : صعب انقل الملف فية اكواد العملية وارقام العملاء واكواد خاصة بشرحتي

كلمة mony  خاصة باسم الرسالة بالاشعارات او عنوان الرسالة الي انا مهتم بيها وفيها العمليات النقدية

وبيظهر مع الرسائل طبعا العروض اليومية والخدمات الي مش محتجها تظهر بالداتا جريد وبتاتي باسماء اخري غير mony


اخى محمد اسماعيل

ارفق ملف الـ csv وبالطريقة التالية
قم بعمل نسخة من الملف لديك 
ثم قم بتحريره ومسح جميع البيانات وابقاء لا يقل عن عدد 2 بيان
يمكنك تغيير الاسماء والتواريخ وما شبه ببيانات اخري عشوائية ولكن توافق النطاق 

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

تحياتى لك
وتمنياتى لك التوفيق

هشيل البيانات ارقام الخطوط وغير اكواد العملية

ملف الرسائل


RE: نقل البيانات من ملف csv الي الداتا جريد فيو - elgokr - 24-09-18

مرفق السورس + برنامج للاختبار
السورس (2015)

الادورات المستخدمة عدد [ 1 ] Button1 و [ 1 ] DataGridView
تم تعطيل التعديل والحذف والاضافة من DataGridView

كود الفورم كاملاً
كود :
Public Class Form1
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       DataGridView1.Rows.Clear()
       DataGridView1.Columns.Clear()
       Dim OFD_ As New OpenFileDialog
       Dim RdVal As IO.StreamReader
       Dim TxVal As String
       Dim SpVal As String()
       OFD_.DefaultExt = "csv"
       OFD_.FileName = Nothing
       OFD_.InitialDirectory = Application.StartupPath
       OFD_.Filter = "File [CSV]|*.csv"
       OFD_.Title = "Select file"
       If OFD_.ShowDialog() <> DialogResult.Cancel Then
           RdVal = IO.File.OpenText(OFD_.FileName)
           TxVal = RdVal.ReadToEnd()
           RdVal.Close()
           TxVal = TxVal.Replace(vbNewLine, ",")
           SpVal = TxVal.Split(",")
       Else
           Exit Sub
       End If

       DataGridView1.ColumnCount = 5
       For ii As Integer = 0 To 4
           DataGridView1.Columns(ii).Name = SpVal(ii)
       Next

       DataGridView1.Columns(0).Width = 30
       DataGridView1.Columns(1).Width = 240
       DataGridView1.Columns(2).Width = 100
       DataGridView1.Columns(3).Width = 50
       DataGridView1.Columns(4).Width = 750

       For i As Integer = 1 To Val(SpVal.Length / 5) - 1
           Dim row As String() = New String() {SpVal(Val(i * 5)), SpVal(Val(i * 5) + 1), SpVal(Val(i * 5) + 2), SpVal(Val(i * 5) + 3), SpVal(Val(i * 5) + 4)}
           DataGridView1.Rows.Add(row)
       Next

       DataGridView1.Refresh()
       DataGridView1.SelectAll()
   End Sub
End Class

تحياتى لك
وتمنياتى لك التوفيق



RE: نقل البيانات من ملف csv الي الداتا جريد فيو - محمد اسماعيل - 24-09-18

(24-09-18, 02:12 PM)elgokr كتب :
مرفق السورس + برنامج للاختبار
السورس (2015)

الادورات المستخدمة عدد [ 1 ] Button1 و [ 1 ] DataGridView
تم تعطيل التعديل والحذف والاضافة من DataGridView

كود الفورم كاملاً
كود :
Public Class Form1
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       DataGridView1.Rows.Clear()
       DataGridView1.Columns.Clear()
       Dim OFD_ As New OpenFileDialog
       Dim RdVal As IO.StreamReader
       Dim TxVal As String
       Dim SpVal As String()
       OFD_.DefaultExt = "csv"
       OFD_.FileName = Nothing
       OFD_.InitialDirectory = Application.StartupPath
       OFD_.Filter = "File [CSV]|*.csv"
       OFD_.Title = "Select file"
       If OFD_.ShowDialog() <> DialogResult.Cancel Then
           RdVal = IO.File.OpenText(OFD_.FileName)
           TxVal = RdVal.ReadToEnd()
           RdVal.Close()
           TxVal = TxVal.Replace(vbNewLine, ",")
           SpVal = TxVal.Split(",")
       Else
           Exit Sub
       End If

       DataGridView1.ColumnCount = 5
       For ii As Integer = 0 To 4
           DataGridView1.Columns(ii).Name = SpVal(ii)
       Next

       DataGridView1.Columns(0).Width = 30
       DataGridView1.Columns(1).Width = 240
       DataGridView1.Columns(2).Width = 100
       DataGridView1.Columns(3).Width = 50
       DataGridView1.Columns(4).Width = 750

       For i As Integer = 1 To Val(SpVal.Length / 5) - 1
           Dim row As String() = New String() {SpVal(Val(i * 5)), SpVal(Val(i * 5) + 1), SpVal(Val(i * 5) + 2), SpVal(Val(i * 5) + 3), SpVal(Val(i * 5) + 4)}
           DataGridView1.Rows.Add(row)
       Next

       DataGridView1.Refresh()
       DataGridView1.SelectAll()
   End Sub
End Class

تحياتى لك
وتمنياتى لك التوفيق

اشكرك علي ردك

ولكن لم تتابع طلبي كاملا  انا بنقل بيانات الملف كاملة الي برنامجي اريد تعديل داخل اعمدة الداتا جريد اثناء النقل

لمشكلة اما مي كالاتي



1- بعض اللينات بالملف النصي تكون مكررة الرسائل او قيمتها فارغة اريد حذفها

2- التاريخ يظهر بالشكل الاتي   =   الأربعاء ٢٢/٠٨/٢٠١٨ at ٠١:٢٦:٣٠ م      اريد حذف at وتبديلها باسم اليوم  بالشكل التالي

  ٢٢/٠٨/٢٠١٨ الأربعاء ٠١:٢٦:٣٠ م   بدل من الأربعاء ٢٢/٠٨/٢٠١٨ at ٠١:٢٦:٣٠ م

5- طبعا طريقة الريجيستر لا اجداستخدامها ساعدني احد الاخوة لحذف جزء من اللينات لاستخراج المبالغ المحولة الي واريدها كما هيا


الكود الي استخدمتة 

مشاكلة

2- تعديل التاريخ كما سبق


RE: نقل البيانات من ملف csv الي الداتا جريد فيو - elgokr - 25-09-18

الشكر لله والحمد لله
والحمد لله على كل حال

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

تحياتى لك
وتمنياتى لك التوفيق



RE: نقل البيانات من ملف csv الي الداتا جريد فيو - محمد اسماعيل - 25-09-18

(25-09-18, 10:58 AM)elgokr كتب :
الشكر لله والحمد لله
والحمد لله على كل حال

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

تحياتى لك
وتمنياتى لك التوفيق

بانتظارك إنشاء الله


RE: نقل البيانات من ملف csv الي الداتا جريد فيو - elgokr - 25-09-18

مرحباً اخى الغالي

اسف اولاً على التاخير بسبب يادوب جالس على جهازى
بالمرفقات السورس + برنامج للاختبار
السورس (2015)

مع برنامج الاختبار ملف من نوع csv
يحتوى على عدد 10 قيم من البيانات
لكل قيمة مكرر 5 مرات يتم اختبار التشابق من حيث التاريخ + نص الرسالة
ليبقي الناتج للعرض هما 2 من الـ 10 الموجود بالملف

تم معالجة التاريخ ليعرض طبقاً لما طلب وهو

التاريخ | اسم اليوم | الوقت | صباحاً - مساءاً

اتمنى الان ان السورس يكون ملخص كل ما تريده
الكود مسيط وبدون تعقيد وبدون اكواد مبالغ بها

محتوى كود الفورم كاملاً ...
كود :
Public Class Form1
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       DataGridView1.Rows.Clear()
       DataGridView1.Columns.Clear()
       Dim OFD_ As New OpenFileDialog
       Dim RdVal As IO.StreamReader
       Dim TxVal As String
       Dim SpVal As String()
       OFD_.DefaultExt = "csv"
       OFD_.FileName = Nothing
       OFD_.InitialDirectory = Application.StartupPath
       OFD_.Filter = "File [CSV]|*.csv"
       OFD_.Title = "Select file"
       If OFD_.ShowDialog() <> DialogResult.Cancel Then
           RdVal = IO.File.OpenText(OFD_.FileName)
           TxVal = RdVal.ReadToEnd()
           RdVal.Close()
           TxVal = TxVal.Replace(vbNewLine, ",")
           SpVal = TxVal.Split(",")
       Else
           Exit Sub
       End If

       DataGridView1.ColumnCount = 5
       For ii As Integer = 0 To 4
           DataGridView1.Columns(ii).Name = SpVal(ii)
       Next

       DataGridView1.Columns(0).Width = 30
       DataGridView1.Columns(1).Width = 240
       DataGridView1.Columns(2).Width = 100
       DataGridView1.Columns(3).Width = 50
       DataGridView1.Columns(4).Width = 750

       For i As Integer = 1 To Val(SpVal.Length / 5) - 1
           For ii As Integer = 0 To DataGridView1.RowCount - 1
               If DataGridView1.Rows(ii).Cells(1).Value = SpVal(Val(i * 5) + 1) And DataGridView1.Rows(ii).Cells(4).Value = SpVal(Val(i * 5) + 4) Then GoTo GoNextNow_
           Next
           Dim row As String() = New String() {SpVal(Val(i * 5)), SpVal(Val(i * 5) + 1), SpVal(Val(i * 5) + 2), SpVal(Val(i * 5) + 3), SpVal(Val(i * 5) + 4)}
           DataGridView1.Rows.Add(row)
GoNextNow_:
       Next

       DataGridView1.Refresh()
       DataGridView1.SelectAll()

       For ii As Integer = 0 To DataGridView1.RowCount - 1
           DataGridView1.Rows(ii).Cells(1).Value = DataGridView1.Rows(ii).Cells(1).Value.ToString.Replace(" at", Nothing)
           Dim SpDate As String() = DataGridView1.Rows(ii).Cells(1).Value.ToString.Split(Space(1))
           DataGridView1.Rows(ii).Cells(1).Value = SpDate(1) & SpDate(0) & SpDate(2) & SpDate(3)
       Next
   End Sub
End Class

الادوات المستخدمة عدد [ 1 ] Button1 و [ 1 ] DataGridView

تحياتى لك
وتمنياتى لك التوفيق