# فناوری جاوا > برنامه‌نویسی جاوا > Java ME : نگارش میکرو جاوا > خبر: يه مثال خوب براي تازه كارهايي مثل خودم

## rashid1368

سلام به همه بروبچ
اين شايد دومين برنامه من باشه كه كاملش مي كنم
اين برنامه شايد همه اون چيزايي كه برنامه نويساي تازه كارمثل خودم احتياج دارند رو در خودش داره. ارتباط با فايل، كار با rms ، خواندن و نوشتن و جستجو در rms  و شايد از همه مهم تر فارسي نويسي. 
راستي يادم رفت بگم اين برنامه *ديكشنري* هست.
براي ذخيره داده هاي فارسي در rms از يك رمزگذار رمز گشا كه خودم نوشتم استفاده كردم
 :چشمک: 
البته شايد بهينه نباشه ولي براي شروع كار به نظر خودم خوبه
_فايل اولي سورس برنامه هست در netbeans 6_
فايل دوم يه سري اصلاحات هست كه در برنامه با كمك mic_r_c داده ام. البته لايبرري فونت فارسي رو هم گذاشتم كه بايد در پوشه resource در netbeans قرارش بدبد.
*كلمات رو تا 50 تا اضافه كردم. مي تونين در فايل text درون پوشه ببينيد.*




> *بچه ها سلام
> اين هم اصلاحيه آخر برنامه هست. الان 3410 كلمه در اين ديكشنري هست. يعني تمام كلماتي كه با حرف a شروع مي شوند. جستجو هم ديگه در rms نيست. تو دو برنامه قبلي اگه تعداد كلمات200 تا ميشد ديگه برنامه كار نميداد. 
> البته بگم كه بهينه بهينه نيست . ولي جستجوش بدك نيست. در فايل انجام ميشه. برنامه فايل سومه كه الحاق شده.
> سرعت پايينه البته از سرعت دو برنامه قبلي بهتره*

----------


## rashid1368

با سلام
اين برنامه يه سري مشكلات داره كه البته مشكلات برنامه نويسي از طرف من هست
ممنون مي شم اگه دوستان مشكلات برنامه رو بگن.
البته توي نمايش معني كلمات انگليسي رو نشون نمي ده. كه شايد از فونت باشه . در اين مورد اگه كسي مي تونه كمك كنه

----------


## mic_r_c

سلام
این برنامه تقریبا ساخت یافته، و میشه گفت خوبه.
ولی هنوز خیلی باید کار کنی_!_ هنوز ایندکسینگی که با هم صحبتشو کردیم رو اعمال نکردی و این برنامه تا 100 کلمه، نهایتا، نمیتونه جواب بده.

بازم خیلی کارت درسه.

----------


## mic_r_c

سلام،
مشکله شما اینجاست: :چشمک: 
rs.enumerateRecords(search_text, RecordComparator.EQUIVALENT, true);

چون شما با null قرار دادن comparator برای فیلتر شرط نمی ذارین، یعنی اگر من a وارد کنم، rashid رو نشون میده چون توش a داره. و این طوری بهش میگین دقیقا باید معادل a باشه.
از روش شما برای ساخت منو ی کلمات نظیر استفاده می کنند.

اینم یه error دیگه: که البته باید 2 تا فونت رو در نظر بگیرین. به نسبت فونت فارسی و کلمه gsmaria و کیبورد توجه کن_!_

----------


## rashid1368

> سلام،
> مشکله شما اینجاست:
> rs.enumerateRecords(search_text, RecordComparator.EQUIVALENT, true);
> 
> چون شما با null قرار دادن comparator برای فیلتر شرط نمی ذارین، یعنی اگر من a وارد کنم، rashid رو نشون میده چون توش a داره. و این طوری بهش میگین دقیقا باید معادل a باشه.
> از روش شما برای ساخت منو ی کلمات نظیر استفاده می کنند.
> 
> اینم یه error دیگه: که البته باید 2 تا فونت رو در نظر بگیرین. به نسبت فونت فارسی و کلمه gsmaria و کیبورد توجه کن_!_


ممنون از اين كه كمكم مي كنين.
درسته . ارور اولي رو خودم هم متوجه شدم و از همين راه حلش كردم. ولي ارور دومي رو نمي فهمم منظورتون چيه.
يه چيز ديگه هم اينكه اين فونت هاي فارسي كلمات انگليسي رو نشون نمي دن. من يه كم ور رفتم ولي نشد. اگه مي تونين در اين مورد هم كمكي بكنين.

----------


## mic_r_c

سلام،
در مورد error دومی فعلا ذهنت رو درگیر نکن
برای اینکه متن انگلیسی رو به همراه فارسی نمایش بدی از سیستم فارسی نویسی که توی وبلاگمه استفاده کن.

----------


## rashid1368

> سلام،
> در مورد error دومی فعلا ذهنت رو درگیر نکن
> برای اینکه متن انگلیسی رو به همراه فارسی نمایش بدی از سیستم فارسی نویسی که توی وبلاگمه استفاده کن.


با سلام.
ممنون مي شم اگه شما دوست عزيز قسمتي رو كه بايد معني كلمه نشون داده بشه رو توسط برنامه خودتون درست كنين.
اين يه درخواست از يه برنامه نويسه كه اميدوارم شما دوست برنامه نويس كمك كنين.
البته بگم كه من يكي دو روزي تلاش كردم براي اين كار ولي نتونستم.

----------


## mic_r_c

سلام،
اگر بخوای من یه برنامه تحت ویندوز برات مینویسم که فایل ترجه فارسی رو برات به همین شکل تبدیل کنه و عملیا چاپش رو هم برات توضیح میدم. البته توضیحات خیلی کاملی رو تو وبلاگم دادم ها!

----------


## rashid1368

> سلام،
> اگر بخوای من یه برنامه تحت ویندوز برات مینویسم که فایل ترجه فارسی رو برات به همین شکل تبدیل کنه و عملیا چاپش رو هم برات توضیح میدم. البته توضیحات خیلی کاملی رو تو وبلاگم دادم ها!


سلام و ممنون.
شما منظورت به سواليه كه من پرسيدم يا برنامه آخر كه اصلاحيه اش رو گذاشته ام.
اگه منظورتون به سوال منه كه ارتون خواستم قسمت چاپ معني رو با فونتي كه خودتون درست كرديد نمايش بديد، ممنون ميشم اگه كمك كنين.
*يه چيز ديگه اين كه مي دونم برنامه آخري كه گذاشتم خيلي خوب نيست. ولي شما گفته بوديد تا 100 كلمه بيشتر جواب نمي ده و بايد از ايندكسينگ استفاده كرد. و درست مي گفنيد.
من يه جورايي از hashing استفاده كردم.با كمك C#‎ برنامه اي نوشتم كه به روش hashing كلمات رو مرتب مي كنه. بعد تو برنامه از همين روش استفاده كردم.* 
سرعتش خوب خوب نيست ولي بدك نيست براي 3410 كلمه.

----------


## mic_r_c

سلام،
من نگفتم تا 100 کلمه، اگرهم گفتم احتمالا اشتباه کردم.
من گفتم تا 200 - 300 کیلو بایت. یعنی تقریبا 500 تا 600 کلمه. در ضمن باز هم میگم بستگی به گوشی و برنامه داره. اگر حجم زمان اجرا ی کلاس های دیگه هم بالا باشه، 200 - 300 کیلویه و الا من تا 2 مگابایت هم تو K750 فایل لود کردم. تو ویندوز موبایل که 10 مگ هم لود کردم.
 فکر می کرد چون تو ویندوز موبایله، حتما با دات نت نوشتنش  :قهقهه:

----------


## ASedJavad

سلام آقا رشید.
من هرچی نسخه نهایی برنامت رو بررسی کردم چیزی حالیم نشد.
میتونی یه کم الگوریتمشو توضیح بدی؟
کلا در مورد ایندکسینگ هرچی خوندم هیچی نفهمیدم
ممنون

----------


## mohsen22

سلام دوست عزیز . با تشکر  فراوان از کار مفیدتون . می خواستم ببینم چگونه میتوان همه لغتهای وارد شده در فایل en.text رو به صورت یک لیست با قابلییتcomand action در اورد؟

----------


## marijooon

ممنون دوست عزیز

----------


## mohsen22

عذر میخوام فایل شماره 3  (maxrms) هم فونت فارسی رو موقع ترجمه لغت نادرست و به صورت تکه تکه نشون میده. شما میدونین مشکل کجاست؟

----------


## mohsen22

سلام . میشه خواهش کنم سوال منو جواب بدین؟

----------


## rashid1368

> سلام . میشه خواهش کنم سوال منو جواب بدین؟


سلام دوست عزیز
الان داخل دانشگاه هستم و یه کمی هم درسا سنگین شده
این که می بینید دیربه دیر میام داخل سایت برای همین هست

این که می بینید که فارسی رو درست نشون نمی ده به خاطر این هست که این برنامه رو من روزهای اول که برنامه نویسی موبایل یاد گرفته بودم، نوشتم. ولی الان شما می تونید برید به این تاپیک ها و نسخه های جدیدی رو از فارسی نویس های سورس باز، تفاوت های اون ها و کلا مقایسه ای بین اون ها رو دانلود کنید. اونوقت می فهمید که اشتباه از کجا بوده. و اگر هم متوجه نشدید اشکال نداره. درکل خودتون می تونید برنامه رو به دلخواه تغییر بدید.
چی نوشتم!!!!!!!!!!!
*فارسی نویسی در موبایل*
https://barnamenevis.org/showthread.php?t=205586
*مقایسه بین فونت های سورس باز*
https://barnamenevis.org/showth...=206223&page=3
تاپیک شماره 27 در این زمینه هست.

----------


## rashid1368

> سلام دوست عزیز . با تشکر  فراوان از کار مفیدتون . می خواستم ببینم چگونه میتوان همه لغتهای وارد شده در فایل en.text رو به صورت یک لیست با قابلییتcomand action در اورد؟


اگه منظورتون این باشه که بخوایم یه دیکشنری مثل PMD بسازیم، باید جنبه های زیر رو هم در نظر بگیرید:
1- عملیات ایندکسینگ.... همون کاری که در این دیکشنری شده تا در کمترین زمان ممکن از بین 50000 کلمه، معنی کلمه ما رو نشون بده. اگه یه سرچ در سایت بزنی می تونی این رو پیدا کنی که دوست عزیزمون mic_r_c جواب دادن.
2- این لیست که شما منظورتون هست، یه چیزی تو مایه های برنامه زیر هست. یعنی یه منو با قابلیت اینکه با فشردن کلید انتخاب، برنامه بدونه الان کدوم کلمه در حال انتخاب هست. دراین مورد می تونید برنامه زیر رو نگاه بندازید.(الحاق شده) . و برنامه اوقات شرعی رو هم که ببینی، همین منو درش استفاده  شده.
https://barnamenevis.org/showthread.php?t=211493
3- البته نکته مهم تر این هست که چون کلمات زیاد هستند، همه رو نمی شه با اون برنامه بالایی که برای منو گذاشتم نشون داد. چون این برنامه همه منوهایی که بهش می دیم رو یه جا لود میکنه و این مورد، مسلما مشکل پیش میاره. برای این کار باید هر بار ، کلماتی رو به منو بار کنیم، که باید نشون داده بشه. مثلا در یه صفحه نمایش ، می شه 12 کلمه رو همزمان نشون داد(داخل منو منظورمه). ما باید این 12 تا رو حدس بزنیم و همون ها رو لود کنیم.
البته از این طریق که من در برنامه دیکشنری استفاده کردم این کار یه کم سخت خواهد بود.

باز هم به خاطر تاخیر در جواب دادن معذرت میخوام

----------


## rashid1368

> سلام آقا رشید.
> من هرچی نسخه نهایی برنامت رو بررسی کردم چیزی حالیم نشد.
> میتونی یه کم الگوریتمشو توضیح بدی؟
> کلا در مورد ایندکسینگ هرچی خوندم هیچی نفهمیدم
> ممنون


سلام دوست عزیز
در این ادرس به صورت اجمالی توضیح داده شده
https://barnamenevis.org/showthread.php?t=177607
ولی در کل اگه بخوای یه همچین برنامه ای رو عملی کنی، باید خودت به صورت دستی عملیات ایندکسینگ رو انجام بدی و بعد فایل های متنی ات رو داخل برنامه استفاده کنی.
این دقیقا همون کاری هست که در دیکشنری pmd انجام شده. یعنی اینجور نیست که همه کلمات داخل یه فایل باشند و بعد برنامه نویس های pmd کدی برای ایندکسینگ نوشته باشن. بلکه از قبل این کار رو کردن و همون فایل های ایندکس شده رو داخلشون جست و جو انجام می دن.
انشا الله این ترم که تموم شد، همین کار رو خودم هم انجام می دم . برای تجربه بد نیست.
امیدوارم جوابتون رو داده باشم.

----------


## ASedJavad

سلام
ممنون از جوابتون
من اون لینکی رو که دادین، قبلا خونده بودم
ولی باز هم متوجه روش ایندکس گذاری و ... نشدم
میدونم الان مشغول درس و امتحانای نیم ترم و پروژه ها و این جور چیزایید
ولی اگه یه لطفی بکنید همین برنامه ای ای که اینجا گذشتید رو با حذف موارد اضافه ای مثل اینکد کردن و دیکد کردن و از این جور چیزا یه خورده مفهوم ترش کنید و بذارید خیلی ممنون میشم

----------


## mohsen22

دوست عزیز اقای رشید :
از لطف  شما بسیار سپاسگزارم . راستش من هم مثل شما گرفتارم. (درس و تاهل و کارمندی )
اما از طرفی عاشق j2me هم هستم و این پروژه خیلی برام حیاتیه . ممنون که بی منت ما رو راهنمایی می کنین . لینکهاتون رو به دقت می خونم و امتحان می کنم و سوال هامو می پرسم ممنون میشم اگه باز هم سوال هامو پاسخ  بدهید .

----------


## mohsen22

سلام اقای رشید:
 همه لینک ها رو خوندم اما متاسفانه بر گیج شدن بیشتر من افزود.!
راستش این سورس max rmsبرای چیزی که من میخوام ایده اله فقط دو مشکل داره :

1- فونت ناقص فارسی که خیلی ور رفتم . فونتهای جدیدی که دریافت کرده بودم رو با فونت homa جایگزین کردم بعدعکس های حاوی فونت رو هم جایگزین کردم . نشد که نشد!

2- می خوام علاوه بر خاصیت search خاصیت comand action رو هم داشته باشه  یعنی همه لغات رو از فایل txtدر یک convas جداگانه وارد کنه(حالا هر اندازه که ظرفیت داره )بعد با فشردن هر لغت همون کار search رو انجام بده و معنی رو بیاره .

می دونم سخته و وقت همه کمه اما ممنون اگه ..!

----------


## rashid1368

سلام دوست عزیز
من این چهارشنبه امتحان طراحی الگوریتم دارم.
امتحان رو که دادم ، چشم حتما برنامه رو اونطوری که شما گفتید، میگذارم برای شما.

----------


## mohsen22

سلام رشید جان . امتحان طراحی الگوریتم تون خوب شد ؟ من هم امروز این امتحان رو دارم ! منتظر شما هستم .
مرسی

----------


## mohsen22

تشریف نیاوردید ؟

----------


## rashid1368

سلام دوست عزیز
من دو روز پیش اماده اش کردم ولی چون اینترنت در دسترسم نبود، باید منتظر می موندم تا بیام دانشگاه
این برنامه ، 10 تا کلمه داره که به صورت لیست نشون داده میشه و شما می تونید با انتخاب گزینه مورد نظرتون ، معنی اش رو ببینید.
البته تو این برنامه، از ایندکسینگ استفاده نکردم، ولی حتما سرم که یه کم خلوت شد، اون رو هم انجام می دم
اگه مشکلی داشتید، خوشحال میشم کمک کنم.

----------


## mohsen22

خدا خیرت بده رشید جان - خیلی لطف کردی - بهش ور میرم اگه تونستم توسعش بدم اینجا مطرح می کنم تا همه استفاده کنیم ... 
 مرسی . زنده باشید .

----------


## mohsen22

رشید جان:
 ممکنه فقط بفرمایید برای افزایش تعداد کلمات در همین برنامه فعلی شما،  چه راه چاره ای دارم ؟

----------


## rashid1368

> رشید جان:
>  ممکنه فقط بفرمایید برای افزایش تعداد کلمات در همین برنامه فعلی شما،  چه راه چاره ای دارم ؟


سلام ممنون
اگه توجه کرده باشی، هیچ جست و جویی داخل فایل english.txt انجام نشده..
البته برای این چیزی که شما گفتید، چند تا راه حل خودم دارم، ولی تئوری هستند و برای عملی شدن ، باید روش وقت گذاشته بشه..
1- همونجور که داخل برنامه می بینید، با توجه به اندیسی که از لیست انتخاب شده ، جستجو داخل فایل persian.txt انجام میشه، شما می تونید، طبق فرمول هایی این اندیس رو بدست بیارید و بعد همون عدد رو داخل فایل persian جستجو کنید. مثلا هربارکه کاربر دکمه پایین رو میزنه، شما به شمارنده تون یکی اضافه کنید، بعد اندیسی رو که بدست میارید در شمارنده تون ضرب کنید، و عددی که بدست میاد رو جستجو کنید.
2- کلمه انگلیسی رو که کاربر انتخاب کرده، داخل فایل english.txt جستجو کنید، بعد عددی که داره رو در فایل  persian جستجو کنید و نتیجه رو نشون بدید.

البته هر دو روش های بالا، عیب ها و مزایایی دارن . مثلا اینکه در روش دوم شما باید ایندکسینگ انجام بدید تا بتونید جستجو انجام بدید. 
همچنین، با اینکه سرعت روش اول بیشتره، ولی شما هر دفعه 10 تا کلمه جدید، به لیست اضافه می کنید. یعنی اگه اخرین گزینه لیست انتخاب باشه وشما بخواهید کلمه بعد رو ببینید، باید 10 کلمه جدید بیارید. البته شاید عیب نباشه، ولی در لیست ها ، متداول هست که یکی پایین بره، نه 10 تا. 
در نهایت ، یه چیز دیگه که باید رعایت کنی، در هر دو روش، حجم فایل های txt شما هست. باید یه جوری در نظر بگیری که ......
دیگه خودتون می دونید
حتما این ترم که تموم شد ، روی این برنامه بیشتر کار خواهم کرد.
خوشحال می شم اگه دوستان، برنامه رو توسعه بدن و برای ما هم بگذارن..

----------


## mohsen22

رشید جان: از این که با حوصله و علی رغم گرفتاریتون جواب منو میدید . واقعا ممنون

بله درست فرمودید هر روش برای افزایش تعداد کلمات مزایا و معایبی داره .بسیار برای هر دو روش وقت گذاشتم!.اما نهایتا بهترین روش رو در این یافتم که  کد های مربوطه رو برای هر فایل txt تکرار کنم و خوشبختانه بعد از دو شب بیداری جواب هم  گرفتم ! ان شا الله نتیجه نهایی رو در اختیار دوستان قرار میدم.  

فقط یه سوال . ؟ محدودیت ما برای حجم هر فایل persian .txt چقدره ؟ ....چند kb?
مرسی 
موفق و موید باشد

----------


## rashid1368

سلام مجدد
داخل همون پست های اولی این تاپیک، دوست عزیزمون آقای mic_r_c گفته بودن که 200-300kb هست. ولی فایل های بزرگتر رو هم تونسته بودن باز کنن داخل برنامه هاشون.
به غیر از این محدودیت، به موبایل هم بستگی داره.
من قبلا برای اینکه بتونم تعداد کلمات بیشتری رو برای کلمات فارسی قرار بدم، از یه تابع encoding_decoding استفاده کرده بودم. چون کلمات انگلیسی ، حجم کمتری رو در فایل می گیرن، به صورت معادل نویسی، در فایل persian.txt کلمات فارسی رو به صورت انگلیسی نوشته بودم، بعد برای چاپش تابع رمزگشا رو فراخوانی میکردم و متن بدست امده رو چاپ میکردم
البته با این روش سرعت برنامه ات کمتر می شه و در کل روش خوبی هم نیست.
بهترین کار همونه که شما از ایندکسینگ استفاده کنی.
یا اینکه هر 1000 کلمه رو داخل یه فایل بگذاری. بعد خودت شرط بگذاری که اگه عدد جستجوت، از این مقدار بیشتر بود این فایل رو به حافظه لود کن. یا یه روش مثل این....
منتظر برنامه شما هستیم......

----------


## mohsen22

اقا رشید عذر میخوام . چرا معنی یک لغت رو که بیش از یک کلمه هستش نا درست نشون میده ؟ در صورتی که معنی کلمه رشید رو که بیش از یک کلمه هم هست درس نشون میده !.. این دیگه از اون ایراد هاس مگه نه ؟!!!
میدونین  باید چیکارش کنم ؟
مرسی

----------


## rashid1368

> اقا رشید عذر میخوام . چرا معنی یک لغت رو که بیش از یک کلمه هستش نا درست نشون میده ؟ در صورتی که معنی کلمه رشید رو که بیش از یک کلمه هم هست درس نشون میده !.. این دیگه از اون ایراد هاس مگه نه ؟!!!
> میدونین  باید چیکارش کنم ؟
> مرسی


سلام
این چیزی که شما می گویید واقعا از اون ایرادهاست.
شما برای این که متن تون رو بتونین به درستی به وسیله فونت فارسی این برنامه نشون بدید باید این موارد رو رعایت کنید:
1- فایل متنی که ذخیره می کنید حتما باید utf_8 باشه...
2- برای اطمینان بیشتر برنامه کتاب ساز زرنگار رو دانلود کنید، بعد متنتون رو داخل برنامه بنویسید و ذخیره کنید. بعد از اون ، داخل فایل jar که برنامه زرنگار تولید میکنه، فایل متنی رو پیدا کنید و کپی کنید به مسیر پروژه تون...

ما همچنان منتظر برنامه شما هستیم.

----------


## mohsen22

این هم نتیجه این همه بحث! که مجموعه لغات درس 1 و 2 درس زبان تخصصی کامپیوتر هستش.
هر ایرادی داره به بزرگی خودتون ببخشید چون کار اولمه..

 در پایان از رشید عزیز  که خیلی زحمت کشیدند  بسیار سپاسگذارم. :بوس:

----------

