الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شي محير بالـ StreamReader ارجو المساعده

بدأه Mejo Magic في 15 فبراير 2012 · 21 رد · 1,137 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا مشكلتي بالـ StreamReader حيرتني وهي عن طريق الميثود ReadLine()

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

الداتا بيس فيها 231 عامود ادخل فيها الداتا

البرنامج مفروض يدخل بقاعدة البيانات حوالي 400,000 سطر وماهي هنا المشكلة

وملف التكست حجمة فوق الـ 500MB

المشكله هنا هي انو لمى اقلل عدد الاسطر في ملف التكست الى 200MB البرنامج يقرا سطر كامل من دون اي خطأ

لكن لمى يكون فوق الـ 500MB البرنامج يقرا سطر لكن مو كال ويتنج بعد كذا Error اللي هو ExceptionOutOfRange لان راح يحاول يقرا من substring غير موجود ليضعه بقاعدة البيانات

ماني عارف ليه الـ ReadLine لمو يكون حجم ملف التكست 200MB يكون شفال وفوق الـ 500MB يعطي خطأ

ارجو المساعده اخواني

#2

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

أخي ممكن الكود لو سمحت ...

وهل الملف الي حجمه 500 م.ب يحتوي في آخره على سطور فارغه ؟؟

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#3

ليس من المنطقي ان يتم تحميل 500 ميجا في الرمات لذلك يعطي ExceptionOutOfRange

#4
عاشق للبرمجة كتب:

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

أخي ممكن الكود لو سمحت ...

وهل الملف الي حجمه 500 م.ب يحتوي في آخره على سطور فارغه ؟؟

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

KARIMSOFT كتب:

ليس من المنطقي ان يتم تحميل 500 ميجا في الرمات لذلك يعطي ExceptionOutOfRange

كلامك صحيح اخوي انو مو منطق بس راح تتفاجئ لو اقولك انو استطيع القرائة من نفس الملف اللي حجمة يزيد عن 500MB واستخرج منه بيانات واضعها بقاعدة البيانات

بس مسموح لي لحد 200 عامود ولمى يوصل للعمودي 201 يعطي الاكسبشن

واللي محيرني هو اني كنت اتوقع اني احصل OutOfMemoryException لكن اتفاجئ بـ OutOfRangeException

الواضح انو الـ StreamReader لمى يوصل للاندكس تبع العامود 201 لايكمل القرائه بالتالي ينزل سطر جديد ويتفاجئ ان الاندكس اللي محدده غير موجود بملف التكست :(

اتمنى اي حل او خط سير امشي عليه لجل احل هذي المشكله

تم تعديل هذه المشاركة بواسطة Mejo Magic في 16 فبراير 2012 في 02:12

#5

انظر الرابط

c# read text file with Schema.ini file no Delimited

الرابط الخاص بي

الرابط الخاص بي

#7
KARIMSOFT كتب:

انظر الرابط

c# read text file with Schema.ini file no Delimited

الرابط الخاص بي

الرابط الخاص بي

يعطيك الف عافيه اخوي على الروابط

راح ادرسهم وارد لك

تحياتي

TareqVB كتب:

لو امكن الكود الذي تستخدمه

تفضل اخوي هذا المشروع كامل هنا RapidShare

البرنامج راح يرسل كل الملفات للداتا بيس من غير مشكله بس لو تسوي لوب وتخلي عدد الاسطر 400.000 سطر ويكون بحجم 500MB راح يعطيك الخطأ

#8

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

Debug.Assert(xx.Length > 2304)

فاذا وجد سطر اقل ستظهر رسالة خطأ .

ايضا حاول ان تتبع الكود Debug وان تعرف اين تحدث المشكلة بالضبط .

وبالنسبة OutOfMemoryException ف streamreader بشكل عام لاعلاقة له بالذاكرة حيث ان القراءة من ملف .

#9
TareqVB كتب:

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

Debug.Assert(xx.Length > 2304)

فاذا وجد سطر اقل ستظهر رسالة خطأ .

ايضا حاول ان تتبع الكود Debug وان تعرف اين تحدث المشكلة بالضبط .

وبالنسبة OutOfMemoryException ف streamreader بشكل عام لاعلاقة له بالذاكرة حيث ان القراءة من ملف .

اول شي اخوي مشكور لتجاوبك للمشكله

وبالنسبة للكود اللي كتبته ياليت تقولي وين بالضبط لاني مبتدئ بعالم البرمجة وإن شاء الله نتوسع اكثر واكثر على يد المنتدى

يعطيك الف عافية

#11

اخوي طارق انا وضعة الكود بعد سطر line = streamReader.readLine()q

لجل يتحقق من الـ Length وطلع لي هذا المسج ؟

post-251717-021346100 1329505267_thumb.j

المرفقات
Exception.JPG

تم تعديل هذه المشاركة بواسطة Mejo Magic في 17 فبراير 2012 في 22:01

#12

جربي هذا المشروع يمكن ان يكون يحتاج الي ضبط ملف Schema.ini بعض الشيء هذا هول المسول عن تقسيم النص ويجب ان يكون اسمه Schema.ini وان يكون اوله اسم الملف النصي

DAOmasterVP1.rar

#14
KARIMSOFT كتب:

جربي هذا المشروع يمكن ان يكون يحتاج الي ضبط ملف Schema.ini بعض الشيء هذا هول المسول عن تقسيم النص ويجب ان يكون اسمه Schema.ini وان يكون اوله اسم الملف النصي

للاسف اخوي الطريقة برضو ماهي نافعه بحيث سويت كل اللي مطلوب ومارضى

#15

جربي هذا المشروع يمكن ان يكون يحتاج الي ضبط ملف Schema.ini بعض الشيء هذا هول المسول عن تقسيم النص ويجب ان يكون اسمه Schema.ini وان يكون اوله اسم الملف النصي

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

DAOmasterVP2.rar

#16
TareqVB كتب:

يعني يوجد عندك سطر قصير وهذا ما يجعل SubString تعطي خطأ .

لذا تأكد من هذا السطر بطريقة ما .

لا اخوي للاسف كان ودي كلامك صح والدليل انو زي ماذكرت فوق

لمى اقلل حجم الملف الى 200MB البرنامج يقرا كل الاندكس اللي بـ Substring لكن لمى يكبر الحجم لـ 500MB لايستطيع ان يكمل القرائه الا الى نقطه معينة فقط وباقي السطر يحذف

دورة كثير على حل بالنت لكن للاسف من غير فايده

مدري كيف الناس اللي تقرا من mainframe تتعامل مع الملفات الكبيره هذي وتحطها بالداتابيس

تم تعديل هذه المشاركة بواسطة Mejo Magic في 18 فبراير 2012 في 18:46

#18
TareqVB كتب:

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

ممكن تقولي اخوي الملف اللي جبته انت هو نفس فورمات ملفي انا يعني كررت السطر 400.000 الف سطر بملف التكست

لان للعلم السطر الواحد عندي ياخذ ثلاث سطور

بمعنى انه لم يتم استخدام زر الادخال ؟

#19

كررت السطر الموجود في الملف الموجود في مشروعك السابق حتى وصل الملف الى حجم 500 ميجا.

القصد ان حجم الملف لايؤثر على القراءة منه وهو غير محدود بعدد معين .

#20
KARIMSOFT كتب:

جربي هذا المشروع يمكن ان يكون يحتاج الي ضبط ملف Schema.ini بعض الشيء هذا هول المسول عن تقسيم النص ويجب ان يكون اسمه Schema.ini وان يكون اوله اسم الملف النصي

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

معليش اخوي بس الكود غريب علي شوي ياليت لو شرح بسيط بالـ sqlstet

"SELECT * INTO [A] FROM [Text;Database=" & sPath & ";].[" & Replace("temp.txt", ".", "#") & "]"

تم تعديل هذه المشاركة بواسطة Mejo Magic في 19 فبراير 2012 في 20:02

#21

اول شيء انشاء ملف Schema.ini به توصيف البيانات وطول الحقول ويوضع في نفس مسار الملف النصي ويكون اول سطر بدخلة اسم الملف النصي

ثانيا جعل الاكسس يقوم بعمل تحميل الملف النصي وبوجود Schema.ini سيقسمه الي حقول

هذا الكود يقوم بعمل اداراج جدول جديد اسمه A من خلال قرائت الملف النصي و Text;Database نوع المل الذي سيتم قراءتة وsPath مسار الملف

"SELECT * INTO [A] FROM [Text;Database=" & sPath & ";].[" & Replace("temp.txt", ".", "#") & "]"

في النهاية اعتقد ان هذة الطريقة اسرع بكثير

#22

ممكن بس المشروع لو سمحت , لانه اللي بالمنتدى مش شغال عندي . استخدم فيجوال 2010 .

تحياتي

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…