اذهب الي المحتوي
أوفيسنا

استيراد ملف txt الى اكسس باستخدام الكود


mmkibsi
إذهب إلى أفضل إجابة Solved by أبو إبراهيم الغامدي,

الردود الموصى بها

لدي  بيانات مستخرجة من نظام اوراكل في ملفات txt لكن البيانات الموجودة غير منتظمة 
احتاج طريقة اليه لاستيراد البيانات في جدول
هل بإمكان احد اعانتي فانا محتاج الطريقة في شغلي مع العلم ان البيانات تزيد عن 50 الف صف

مرفق لكم  ملف مضغوط يحتوي عل الملفات txt المطلوب العمل عليها 

البيانات.rar

رابط هذا التعليق
شارك

أهلا بك..

أعتذر إليك إن كنت أحزنتك.

في هذه المشاركة سوف أحاول مع من يتبرع من الزملاء من قراءة واستخلاص البيانات من الملفات النصية، وكيف يمكن وضع المحددات التي تساعد على ذلك..

الملف النصي: IAS_Out_Cs_Detail.txt

* من الممكن جعل البيانات في جدول واحد.. يخض هذا الإجراء لصاحب العلاقة..! لكني لا أشجع عليهلكونه يتسبب في وجود كم كبير من البيانات المتكررة!

- يتكون هذا الملف من ثالث طبقات من البيانات وكل طبقة منها يمكن أن تكون في جدول خاص، وهذا من الناحية الفنية أرتب لكنه مكلف من ناحية الشفرة!

-- الطبقة الأولي: بيانات مركز التكلفة.

-- الطبقة الثانية: بيانات أوامر الصرف.

-- الطبقة الثالثة: بيانات بنود أوامر الصرف.

* كيف يمكن استخلاص البانات؟

- بما أننا سنذهب إلى تقسيم البيانات إلى ثالث طبقات، فسوف نقوم بعمل التالي.

-- إيجاد محدد فريد لكل طبقة (وليس للبيانات)

-- تحويل البيانات في كل طبقة إلى مصفوفة بيانات وفقاً لمنط تكراري منتضم؛ إن أمكن (المصفوفة تسهل ضبط البيانات،لكن ليست شرطاً في المعالجة)

-- إرسال البيانات إلى جدول البيانات

* قراءة البيانات من الملف النصي

هناك العديد من الطرق لقراءة البيانات من الملف النصي، من أسهلها التعليمة التالية

Sub IAS_Out_Cs_Detail()
   Dim i As Integer
   Dim row, cols, col
   
   '-- open text file
   Open App_Path & "IAS_Out_Cs_Detail.txt" For Input As #1
    
   '-- read data from text file
   Do Until EOF(1)
      '-- read text file line by line
      Line Input #1, row
   Loop
   Close #1
End Sub

  

- أرجو التكرم يالذهاب لملف تعليمات VBA لمعرفة مدلولات هذه التعليمة 

*معالجة البيانات

ستكون معالجة البيانات كما في الشفرة التالية

Sub IAS_Out_Cs_Detail()
   Dim i As Integer
   Dim row, cols, col
   
   '-- open text file
   Open App_Path & "IAS_Out_Cs_Detail.txt" For Input As #1
    
   '-- read data from text file
   Do Until EOF(1)
      '-- read line by line
      Line Input #1, row
      '-- make condition for each layer
      '-- first layer
      If row Like "مركز*" Then
         cols = Split(row, ":")
         For Each col In cols
            Debug.Print col
         Next
         Debug.Print String(100, "+")
      
      ElseIf row Like "الحساب*" Then
         cols = Split(row, ":")
         For Each col In cols
            Debug.Print col
         Next
         Debug.Print String(100, "=")
     
      Else
         cols = Split(row, vbTab)
         For Each col In cols
            Debug.Print col
         Next
         Debug.Print String(100, "-")
      End If
      
   Loop
   Close #1
End Sub

- يوجد في هذا الملف بيانات خارجة عن الصف، سأتطرق لطريقة معالجتها عند رفع المثال

* نقل البيانات للجداول 

التعليمات الخاصة بتقل البيانات للجداول سأشير إليها عند رفع المثال

  • Like 5
رابط هذا التعليق
شارك

13 ساعات مضت, أبو إبراهيم الغامدي said:

قراءة واستخلاص البيانات من الملفات النصية، وكيف يمكن وضع المحددات التي تساعد على ذلك

وانا سأوضح قصد اخوي ابو ابراهيم ، ولكن بالنظر في الملف بطريقة اخرى ، ليست الشفرة ، وانما استيراد البيانات الى جدول مؤقت ، وباستعلامات إلحاقية 🙂


- عملت برنامج اكسس جديد ، ثم استوردت من ملف النص IAS_Out_Cs_Detail.txt ، ثم نتابع طريقة الاكسس التلقائية لإستيراد الملف الى جدول جديد tbl_tmp ، وبدون تنظيف ،

- عملت نسخ لجميع بيانات الجدول والصقتها في صفحة اكسل ، حتى يكون التحليل سهل :

  1. الحقول الصفراء والبرتقالية والمربع الاحمر ، هي معلومة واحدة ، اي ان جميع هذه الحقول لسجل واحد (رجاء المتابعة لشرح هذا) ،
  2. الحقول الصفراء متكررة مرتين ، فمثل ما قال اخوي ابو ابراهيم ، ممكن جعلها في جدول مستقل ، وفي الكود اشار اليه (If row Like) ("مركز*"Then ) ،
  3. الحقول البرتقالية كذلك ممكن جعلها في جدول مستقل (ElseIf row Like) ("الحساب*" Then) ، ونلاحظ بأن الحقول ابتداءً من field16 لسنا بحاجة اليها ، لأنها موجودة في المربع الاحمر ، وهذا ما اشار اليه اخوي ابو ابراهيم لما قال: "يوجد في هذا الملف بيانات خارجة عن الصف" ،
  4. والبيانات في المربع الاحمر هي للجدول الثالث ، وهذا الجدول يجب ان يحتوي على "رقم سجل" للجدول الاول ، و "رقم سجل" للجدول الثاني :

image.png.c35a70e64a119e237b5a451e9e3743a0.png

.

14 ساعات مضت, أبو إبراهيم الغامدي said:

هناك العديد من الطرق لقراءة البيانات من الملف النصي

وبهذه الطريقة ، نعمل استعلام الحاقي لبيانات كل جدول ، واستعمال المعايير المناسبة لتنظيف البيانات قبل ادخالها للجدول 🙂

 

طريقة العمل تكون :

1. الاكسس يعمل اول جدول تلقائيا ، ونطلب منه ان لا يستورد الحقول التي لا حاجة لنا بها ، ثم في نهاية نطلب منه حفظ طريقة الاستيراد :

image.png.674213c01fc2b9c12568b572bb265b0e.png

.

2. نعمل استعلام الحاقي لكل جدول (قد نحتاج الى 3 استعلامات او اكثر) ، وتنظيف البيانات بإستخدام المعايير المناسبة ،

3. ثم عمل كود ليقوم بعمل 1 (طبها الاستيراد سيكون من نفس اسم الملف ولن يتغير ، فلابد لنا من عمل طريقة لهذه النقطة) و 2 🙂

 

وطبعا كود اخوي ابو ابراهيم جاهز وانظف واسهل للفهم 🙂

 

جعفر

  • Like 3
  • Thanks 1
رابط هذا التعليق
شارك

45 دقائق مضت, biskra said:

على الرابط التالي ممكن كود مهم يساعد على تحويل النص الى جدول في الأكسس،

https://saplsmw.com/Import_a_text_file_as_a_table_in_MS_Access_using_VBA

أهلا بك..

نحن لدينا أفكاراً وإبداعاً وحيلاً كما للآخرين!  

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

1 ساعه مضت, biskra said:

على الرابط التالي ممكن كود مهم يساعد على تحويل النص الى جدول في الأكسس

وهنا يأتي الابداع ، كل مبرمج يتفنن في عمله 🙂

للتجربة ، قمت بإستخدام الكود من الرابط ، ونتيجة الجدول كانت غير صحيحة/كاملة :

image.png.f8ed3a9817bc8f3a9e7163fb477a3af2.png

.

لذا ، فهذا الميدان يا حميدان ، تستطيع الاستفادة من ذاك الكود وتطوعه لحاجتك ،

 او بالتحليل تفهم ملف النص ، وتشارك في كود يعمل 🙂

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

2 ساعات مضت, jjafferr said:

وبهذه الطريقة ، نعمل استعلام الحاقي لبيانات كل جدول ، واستعمال المعايير المناسبة لتنظيف البيانات قبل ادخالها للجدول 🙂

لا عدمنا أفكارك ولا كلت أناملك أ. جعفر،،   

2 ساعات مضت, jjafferr said:

وطبعا كود اخوي ابو ابراهيم جاهز وانظف واسهل للفهم 🙂

طبعا كود اخوك ابو ابراهيم  أكثرا تعقيدا..

ما يحرني أنك تتحدث وكأنك جالس بجانبي!

  • Like 2
رابط هذا التعليق
شارك

اخوكم مبتدء في الاكسس واتعلم بصعوبة

حاولت اعمل بكود الأخ أبو إبراهيم الغامدي ولكني فشلت في استيراد البيانات وترتيبها في أعمده 

فاذا تكرمتم ارجوا ان احد يضعه في ملف أكسس جاهز للاستيراد كما عمل @أبو إبراهيم الغامديفي مشاركة سابقة فله الشكر

فيسهل علي نسخ النموذج

رابط هذا التعليق
شارك

9 ساعات مضت, mmkibsi said:

حاولت اعمل بكود الأخ أبو إبراهيم الغامدي ولكني فشلت في استيراد البيانات وترتيبها في أعمده 

فاذا تكرمتم ارجوا ان احد يضعه في ملف أكسس جاهز للاستيراد كما عمل @أبو إبراهيم الغامديفي مشاركة سابقة فله الشكر

فيسهل علي نسخ النموذج

أعتذر عن التأخير..

لن تعمل الشفرة لأنها ناقصة وهذه تكملتها

Sub IAS_Out_Cs_Detail()
   Dim rs As DAO.Recordset
   Dim i As Integer
   Dim row, cols, col
    
   '-- data variables
   Dim cntr_id, cntr_name, acnt_no, iss_no, iss_typ, iss_date, crr_typ, gtotal
   
   '-- open rs to add records
   With CurrentDb
      Set rs = .OpenRecordset("IAS_Out_Cs_Detail", dbOpenDynaset)
      .Execute "delete * from [" & rs.Name & "]"
   End With
   
   '-- open text file
   Open App_Path & "IAS_Out_Cs_Detail.txt" For Input As #1
    
   '-- read data from text file
   Do Until EOF(1)
      
      '-- read line by line
      Line Input #1, row
      
      '-- make condition for each layer
      
      '-- first layer
      If row Like "مركز*" Then
         cols = Split(row, vbTab)
         cntr_id = Right(cols(0), 4)
         cntr_name = cols(1)
      
      '-- second layer
      ElseIf row Like "الحساب*" Then
         cols = Split(row, vbTab)
         acnt_no = Split(cols(0), ":")(1)
         iss_no = Split(cols(1), ":")(1)
         iss_typ = Split(cols(2), ":")(1)
         iss_date = Split(cols(3), ":")(1)
         crr_typ = cols(13)
         gtotal = cols(14)
         
      '-- third layer
      Else
         cols = Split(row, vbTab)
         rs.AddNew
         rs(0) = cntr_id
         rs(1) = cntr_name
         rs(2) = acnt_no
         rs(3) = iss_no
         rs(4) = iss_typ
         rs(5) = iss_date
         rs(6) = crr_typ
         rs(7) = gtotal
 
         For i = 0 To UBound(cols) - 2
            rs(i + 8) = cols(i)
         Next
         rs.Update
      End If
   Loop
   Close #1
   Set rs = Nothing
End Sub

وهذا المرفق بعد التعديل

Import Data from oracle Report.zip

  • Like 3
رابط هذا التعليق
شارك

9 ساعات مضت, أبو إبراهيم الغامدي said:

أعتذر عن التأخير..

لن تعمل الشفرة لأنها ناقصة وهذه تكملتها


Sub IAS_Out_Cs_Detail()
   Dim rs As DAO.Recordset
   Dim i As Integer
   Dim row, cols, col
    
   '-- data variables
   Dim cntr_id, cntr_name, acnt_no, iss_no, iss_typ, iss_date, crr_typ, gtotal
   
   '-- open rs to add records
   With CurrentDb
      Set rs = .OpenRecordset("IAS_Out_Cs_Detail", dbOpenDynaset)
      .Execute "delete * from [" & rs.Name & "]"
   End With
   
   '-- open text file
   Open App_Path & "IAS_Out_Cs_Detail.txt" For Input As #1
    
   '-- read data from text file
   Do Until EOF(1)
      
      '-- read line by line
      Line Input #1, row
      
      '-- make condition for each layer
      
      '-- first layer
      If row Like "مركز*" Then
         cols = Split(row, vbTab)
         cntr_id = Right(cols(0), 4)
         cntr_name = cols(1)
      
      '-- second layer
      ElseIf row Like "الحساب*" Then
         cols = Split(row, vbTab)
         acnt_no = Split(cols(0), ":")(1)
         iss_no = Split(cols(1), ":")(1)
         iss_typ = Split(cols(2), ":")(1)
         iss_date = Split(cols(3), ":")(1)
         crr_typ = cols(13)
         gtotal = cols(14)
         
      '-- third layer
      Else
         cols = Split(row, vbTab)
         rs.AddNew
         rs(0) = cntr_id
         rs(1) = cntr_name
         rs(2) = acnt_no
         rs(3) = iss_no
         rs(4) = iss_typ
         rs(5) = iss_date
         rs(6) = crr_typ
         rs(7) = gtotal
 
         For i = 0 To UBound(cols) - 2
            rs(i + 8) = cols(i)
         Next
         rs.Update
      End If
   Loop
   Close #1
   Set rs = Nothing
End Sub

وهذا المرفق بعد التعديل

Import Data from oracle Report.zip 49.45 kB · 3 downloads

شكراً جزيلاً اعنتني بمجهود رائع...

هل بالامكان تستكمل باقي الملفات اذا تكرمت يا وفي

رابط هذا التعليق
شارك

في 17‏/3‏/2021 at 18:02, أبو إبراهيم الغامدي said:

أعتذر عن التأخير..

لن تعمل الشفرة لأنها ناقصة وهذه تكملتها


Sub IAS_Out_Cs_Detail()
   Dim rs As DAO.Recordset
   Dim i As Integer
   Dim row, cols, col
    
   '-- data variables
   Dim cntr_id, cntr_name, acnt_no, iss_no, iss_typ, iss_date, crr_typ, gtotal
   
   '-- open rs to add records
   With CurrentDb
      Set rs = .OpenRecordset("IAS_Out_Cs_Detail", dbOpenDynaset)
      .Execute "delete * from [" & rs.Name & "]"
   End With
   
   '-- open text file
   Open App_Path & "IAS_Out_Cs_Detail.txt" For Input As #1
    
   '-- read data from text file
   Do Until EOF(1)
      
      '-- read line by line
      Line Input #1, row
      
      '-- make condition for each layer
      
      '-- first layer
      If row Like "مركز*" Then
         cols = Split(row, vbTab)
         cntr_id = Right(cols(0), 4)
         cntr_name = cols(1)
      
      '-- second layer
      ElseIf row Like "الحساب*" Then
         cols = Split(row, vbTab)
         acnt_no = Split(cols(0), ":")(1)
         iss_no = Split(cols(1), ":")(1)
         iss_typ = Split(cols(2), ":")(1)
         iss_date = Split(cols(3), ":")(1)
         crr_typ = cols(13)
         gtotal = cols(14)
         
      '-- third layer
      Else
         cols = Split(row, vbTab)
         rs.AddNew
         rs(0) = cntr_id
         rs(1) = cntr_name
         rs(2) = acnt_no
         rs(3) = iss_no
         rs(4) = iss_typ
         rs(5) = iss_date
         rs(6) = crr_typ
         rs(7) = gtotal
 
         For i = 0 To UBound(cols) - 2
            rs(i + 8) = cols(i)
         Next
         rs.Update
      End If
   Loop
   Close #1
   Set rs = Nothing
End Sub

وهذا المرفق بعد التعديل

Import Data from oracle Report.zip 49.45 kB · 10 downloads

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

رابط هذا التعليق
شارك

3 ساعات مضت, mmkibsi said:

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

نعم! جميعها قد أُسس لها إجراء، لكن بدأت فيها بالأسهل في التطبيق!

أرجو أن تتحقق من مواضع البيانات وعناوينها لأن الأخيران فيهما انحراف!

Import Data from oracle Report.zip

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

في ٢٢‏/٣‏/٢٠٢١ at 12:28, أبو إبراهيم الغامدي said:

نعم! جميعها قد أُسس لها إجراء، لكن بدأت فيها بالأسهل في التطبيق!

أرجو أن تتحقق من مواضع البيانات وعناوينها لأن الأخيران فيهما انحراف!

Import Data from oracle Report.zip 107.47 kB · 1 download

يوجد خطأ في المرفق

الخطأ2.png

رابط هذا التعليق
شارك

  • أفضل إجابة
3 ساعات مضت, mmkibsi said:

يوجد خطأ في المرفق

جرب نسخة 2003 من المرجح أنها تعمل!

Import Data from oracle Report.zip

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information