![]() |
|
[VB.NET] مشروع قاموس - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (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] مشروع قاموس (/showthread.php?tid=35332) الصفحات:
1
2
|
RE: مشروع قاموس - kiki - 23-06-20 اتذكر كوني ذكرت فقط وضع المسافة بعد فقط وليس قبل والمسافة يتم وضعها فى Function وكذلك فى الحدث لـ BtnTranslate_Click وتكون المسافة بعد جملة التعريف فقط ليس اكثر انظر اخى الفاضل Doctor GME الامر بكل بساطة وسهولة جداً وبدون اى تعقيد تعال عند كود الـ Function واجعله بهذا الشكل كود : Function GetExactSubtitles(ByVal content As String) As Stringانا لم اذكر ماذا قمت به وما التغيير البسيط أو باصح الاضافة البسيطة التى تمت فى الكود بالاعلى حتى اجد منك ردك التالى بتوضيح بما تم فى الكود من التعديل وما فكرتها حتى اكون على يقين ان الاستخدام للكود ليس كا نسخ ولصق فقط وكذلك لتفيد الزائر للموضوع هنا بما هو التعديل ليتم عمل نجاح الكود فى الترجمة الان كل ما عليك فعله هو ان تجعل كود حدث الزر بهذا الشكل كود : ArabicTextbox.Text = GetExactSubtitles(EnglishTextbox.Text & Space(1))وهو نفس الكود الذى قمت بتوضيحه فى ردي السابق الان يمكنك الاختبار تعدد الكلمات فى السطر الواحد وايضاً تعدد الاسطر والكلمات RE: مشروع قاموس - asemshahen5 - 23-06-20 محاولة من محاولاتي ليست ناجحة 100% لكنها بداية جيدة و تحتاج الكثير من التنقيح و الشروط لتصبح ناجحة . RE: مشروع قاموس - سعود - 24-06-20 RE: مشروع قاموس - Doctor GME - 27-06-20 أخى kiki شكراً لمجهودك الكبير وعذراً على تأخرى فى الرد لانشغالى فى تجريب الكود هناك مشكلة بسيطة ظهرت لم أفهم سببها هذا هو أحد السجلات فى قاعدة البيانات: عند البحث عن ?now تخرج النتيجة بلا مشاكل ولكن عند البحث عن ?know مثلاً تخرج النتيجة هكذا: الآن؟k مثل المشكلة الأولى تماماً وكأن ؟ تلغى ما تم تعديله بالكود ولا تتقيد بوجود مسافات هذا هو الكود النهائى: كود : Imports System.Data.OleDbولم أضف كما تلاحظ سوى الجزء الخاص بالاستبدال فى هذا السطر لأطابق قاعدة البيانات: كود : content = content.Replace(vbNewLine, " * ").Replace(" ?", "?")فما هى اقتراحاتك أخى asemshahen5 محاولة جيدة ولكن لا يمكن إضافة قاعدة البيانات لكود البرنامج فالمفترض أنها تحتوى على ملايين الصفوف RE: مشروع قاموس - kiki - 28-06-20 لا عليك اخى Doctor GME فالامر بسيط جداً ويجب عليك ان تفهم شياً مهماً عندما نتحدث عن الترجمة يعنى يجب ان تعتبر ان لكل حرف او رمز مقاماً بمعنى عندما نقول now فهى كلمة وعندما اقول know فهى كلمة وايضاً واهمهما عندما اقول كلاً من ؟ و & و ) و ( فكل منهم كلمة لهما قيمة عكسية فعلياً زيها زى اى كلمة تكتب كما هو فى now و know فالتالى هو عند اضافة البيانات فى قاعدة البيانات نكتب التالى now know ? & ( ) وتكون قيمتها فى العربي التالى الآن أعرف ؟ ) ( لاحظ الاختلاف بين كل ما ذكر وملاحظة الاختلاف اولاً كون كل رمز هو مستقراً بنفس قيمة الكلمة وايضاً ستقرر من تكرارها وعدم توقعات المستخدم كيف يستخدمها اذا بدون مسافة او بمسافة واحدة او اكثر وما شبه خليني اعطي مثالاً لتتاكد الامر انت تقول قمت بعمل now? الى هنا وجميل طيب تعال كده وخليها بهذا الشكل now?. أو now?.. أو now?, أو now?._ لا تقول انك هتخمن كل حاجة قد يكتبها وتكتبها وتشجلها بقاعدة البانات بينما قيمة واحدة فقط تعفى كل هذا طيب الان بعد انهاء مشكلة عدم اعطاء كل رمز قيمته كا كلمة مستقلة وعلمنا كيفية الحل ما هو الكود الذى سيضاف على الكود الحالى لتجنب مشكلة مثل اذا كتب المستخدمة مثل ؟ بعد الكلمة بدون مسافةوما شبه بكل سهولة وبساطة تامة تتذكر هذا السطر من ردي السابق كود : content = content.Replace(vbNewLine, " * ")كل ما ستفعله هو التالى مثلاً يا تكرار السطر ليكون اسفل منه هذا الشكل كود : content = content.Replace("?", " ?")أو تغيير السطر ليصبح بهذا الشكل كود : content = content.Replace(vbNewLine, " * ").Replace("?", " ?")وتاتى على الكود المعاكس اللى بالاسفل وهو كود : content = content.Replace(" * ", vbNewLine)وتعمل الامر نفسه وهو كالتالى كود : content = content.Replace(" * ", vbNewLine).Replace(" ؟", "؟")انتبه لتغير شكل ؟ عن الاعلى لان الان اصبح مترجم للعربية ستقوم بتطبيق الامر على هذا النحو الى اى رمز لديك كما ذكرته بالاعلى ساترك انت من تقوم بالباقى حتى توضح الصورة كاملتاً معاك وتعتاد على الامر RE: مشروع قاموس - Doctor GME - 05-07-20 أخى kiki جربت ما اقترحته كثيراً ولكن المشكلة كما هى بعد تعديل كل ما اقترحته حاولت ترجمة كلمة now ونجحت ولكن know تعطى نفس الخطأ الآنk فى حين nowk تنجح ولا يتم ترجمتها لعدم وجودها فى قاعدة البيانات والسبب واضح طبعاً بسبب هذا السطر كود : content = content.Replace(row.Item("English") & Space(1), row.Item("Arabic") & Space(1))فهو يشترط وجود مسافة بعد الكلمة فقط ولذلك عند نقل حرف k بعد الكلمة ولم يجد البرنامج مسافة بينهما لم تتم الترجمة فى حين قبلها لم تمثل مشكلة وترجم البرنامج جزء من الكلمة فقط كل ما أريده هو وضع شرط أن يسبق الكلمة المترجمة مسافة جديدة أو سطر جديد أو بداية الفقرة (أى لا يسبقها سطر جديد ولكنها أول كلمة فى الفقرة) يمكننى أن أجعلها مثلاً هكذا: كود : content = content.Replace(Space(1) & row.Item("English") & Space(1), row.Item("Arabic") & Space(1))ولكن كما هو واضح هذا يشترط وجود مسافة فقط ولكن لا يحقق المطلوب فلو كانت الكلمة فى بداية سطر جديد أو فى بداية الفقرة كما أوضحت سيحدث نفس الخطأ قمت بإرفاق البرنامج النهائى لو أردت أن تجربه بنفسك وشكراً لمجهودك |