PDA

View Full Version : گفتگو: گفتگو درباره ي الگوريتم ساخت يك فايل جديد



Restlesa
یک شنبه 06 شهریور 1390, 12:43 عصر
سلام بر همگي دوستان عزيز برنامه نويس
مي خوام يه پسوندي به نام auc ايجاد كنم كه كارايي شبيه به پسوند mdb داشته باشه يعني يك پسوند پايگاه داده اي اما نه اكسس و يا ديگر پايگاه ها داده اي رايج كه مي شناسيد
مي خوام اين پسوند پايگاه داده اي تنها با برنامه خودم باز بشه كه با اين عمل مشكلي ندارم و مشكلم روي طراحي الگوريتم اين پسوند هستش كه منو مجبور به زدن اين تاپيك كرده
از دوستان خواهش مي كنم كه نظرات و دانستي هاي خودشونو در اين زمينه براي من و ساير دوستان عزيز قرار بدن تا با هم بتونيم يه پسوند جديد كامل ايراني بسازيم

setroyd
یک شنبه 06 شهریور 1390, 13:40 عصر
خوب تا اینجاش که کاری نداره ! از طریق رجیستری میشه کاری کرد پسوند مورد نظر با برنامه ی شما باز بشه ولی درست کردن این چیزی که شما میخوای خیلی مشکله شدنیه ولی به سختی !

Restlesa
یک شنبه 06 شهریور 1390, 13:47 عصر
مي دونم دوست عزيز به همين دليل اين تاپيك رو زدم
اينم اضافه كنم كه دقيقا كارايي پسوند MDB رو نمي خوام. يه چيزي شبيه به اون باشه كافيه

setroyd
یک شنبه 06 شهریور 1390, 14:14 عصر
اخه این کارو کسی براش وقت نمیزاره بهت قول میدم . شما بیا بانکت رو کد کن اینجوری بهتره البته اگه برای پروژه میخوای ولی اگه هدفت ایجاد یه همیچین چیزی هست که هیچی .

MMR_1344
یک شنبه 06 شهریور 1390, 14:41 عصر
با زيان ويژوال بيسيك فكر ميكنم ايجاد يك بانك با مشخصاتي ك بانك اكسس داره فكر كنم خيلي سخته نميدونم شايد هم بشه موفق باشي

setroyd
یک شنبه 06 شهریور 1390, 15:32 عصر
نشدنی وجود نداره ! ولی سخت میشه این کارو کرد

Restlesa
دوشنبه 07 شهریور 1390, 11:46 صبح
اخه این کارو کسی براش وقت نمیزاره بهت قول میدم . شما بیا بانکت رو کد کن اینجوری بهتره البته اگه برای پروژه میخوای ولی اگه هدفت ایجاد یه همیچین چیزی هست که هیچی .
چه طوری باید این کارو بکنم ؟؟؟؟
میشه بیشتر توضیح بدی ؟؟؟

setroyd
دوشنبه 07 شهریور 1390, 14:46 عصر
کد کن یعنی کاراکترهارو به ascii تبدیل کن و با کاراکترهای دیگه ترکیب کن تو انجمن هست هست یه سرچ کن میبینی .

returnx
دوشنبه 07 شهریور 1390, 18:38 عصر
شما بگو دقیقا میخوای تو این فایلت چه مقادیری ذخیره بشه تا ، بشه براش یک الگوریتم مناسب ساخت تا یک Format یکپارچه داشته باشه...
مثلا باید ببینین آیا میخواین قابلیت ذخیره جداول ، ارتباطات و... داشته باشه یا نه...
ساختن یک فرمتی شبیه MDB کار نسبتا سختی هست ، هیچ ربطی هم به زبانی که باهاش کد میزنید نداره ،الگوریتم های سختی داره...

Restlesa
سه شنبه 08 شهریور 1390, 12:49 عصر
اولا تشكر مي كنم كه حرف دوست خوبمون Setroyd رو نزديد و هي نگفتين سخته سخته
بزاريد خيلي ساده بيان كنم. شما در پايگاه داده يك جدول مي سازيد و داخل جدولتون هم فيلدهاي مورد نيازتون رو مي سازيد و اون جدول و همين طور فيلدها رو به قسمت هاي مورد نظر برنامه تون وصل مي كنيد و مقاديري كه مد نظرتون هستش رو توش ذخيره مي كنيد.
من مي خوام همچين چيزي رو با برنامه ام شبيه سازي كنم. يعني جدولي كه با برنامه ي خودم بسازم و قابليتي شبيه به جداول ايحاد شده در پايگاه داده داره البته با پسوند auc

setroyd
سه شنبه 08 شهریور 1390, 22:05 عصر
عزیزم گفتم سخته ولی گفتم میشه مثل دوست عزیزمون که گفتن ! شما اگه بگی برای چه منظور میخوای این رو بسازی من شاید بهتر بتونم کمکت کنم ؟

pcdownload.bloghaa.com
چهارشنبه 09 شهریور 1390, 15:02 عصر
برای همچین کاری چندتا روش هست که من یکیشو بهت میگم.
استفاده از آرایه:
یک آرایه دوبعدی دینامیک باید بسازیم که به صورت عادی نمیشه ساخت و باید از روش زیر استفاده کنید:


private type data
record() as string
end type
dim DB() as data

بعد با استفاده از redim preserve و کارای دیگه اطلاعاتو توش پر میکنیم و یکجا ذخیره میکنیم داخل فایل.
این روش برای بانک های نسبتا کوچیک کاربرد داره و برای بانک های بزرگ الگوریتم های خاصی برای اینکار هست.

_behnam_
چهارشنبه 09 شهریور 1390, 23:12 عصر
سلام !
منم با دوستان موافقم کار شدن نداره اما وقت گیره
اما بلاخره باید از یجا شروع کنیم نه اینکه فقط بیایم تو تاپیک بگیم کار سختیه اما میشه :لبخند:
من خودم به این فکر کردم که چطور این کارو میشه کرد راستش ساده ترین و ابتدایی ترین روشی که به ذهنم رسید این بود که از کدهای HTML الگو بگیرم
مثلا توی فایل دیتابیس ما هر کدوم از قسمت هارو مثل کدهای HTML مشخص کنیم
اینجوری

نام دیتابیس
<db="frist database">

</db="frist database">

تیبل ها
<table="users">

</table="users">

<table="name">
</table="name">

Column های تیبل
<column="Number">
<column="Frist name">
<column="Last name">

و فیلدها
<Fields>

</Fields>

حالا مثلا ما یک دیتابیس داریم به اسم MyDB که 1 تیبل داره به اسم Users و توی تیبل 4 تا Columns هست به نام های Frist name , LastName , Tel ,Number
که اسم من و 2 تا از دوستام توشه

<db="frist database">

<table="users">

<columnsTable="users">

<column="Number">
<column="Frist name">
<column="Last name">
<column="Tel">

</columnsTable="users">

<Fields>
<column="Number" Field="1" column="Frist name" Field="Behnam" column="Last name" Field="Eslamirad" column="Tel" Field="00980000000">
<column="Number" Field="2" column="Frist name" Field="adib" column="Last name" Field="Izad bakhsh" column="Tel" Field="00980000000">
<column="Number" Field="3" column="Frist name" Field="Amir" column="Last name" Field="kazemi" column="Tel" Field="00980000000">
</Fields>

</table="users">
<db="frist database">


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

Restlesa
شنبه 12 شهریور 1390, 01:57 صبح
آقا بهنام از الگوریتمی که پیشنهاد کردی خیلی سپاس گزارم اما به نظر من این الگوریتم که پیشیده و در هم برهم و زمان گیره
به نظرم روش ذکر شده در پست 12 بهتر باید باشه
کسی هست که بیشتر در رابطه با این روش توضیح بده ؟؟؟

vbhamed
شنبه 12 شهریور 1390, 10:10 صبح
سلام

براي اين كار خود ويژوال بيسيك يك راه داره و اونم استفاده از فايلهاي رندوم و ركورد ها است
در نمونه زير يك جدول با ستونها تعريف شده و در يك فايل نوشته ميشه
البته در اين روش در هر فايل يك جدول ميشه ذخيره كرد
اگر نياز به جداول پدر و فرزند بود مثل بانك اطلاعاتي اكسس، فيلدهايي براي كليد خارجي و كليد اصلي بايد تعريف بشه و اطلاعات با توجه به اونها در فايل اصلي و فرزند درج بشه
براي جستجو و مرتب سازي و ايندكس و ... هم كه بايد به كتابهاي ساختمان داده مراجعه كنيد

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

Option Explicit

Private Type rec

Id As Long
Name As String * 20
Family As String * 35
Address As String * 100
Tel As Long

End Type

Dim x(100) As rec

Private Sub Form_Load()

x(0).Id = 100
x(0).Name = "Reza"
x(0).Family = "Mohammadi"
x(0).Address = "Address"
x(0).Tel = "22222222"
'.
'.
'.

Open "c:\ss.txt" For Random As #1 Len = Len(x(0))

Put #1, 1, x(0)
Put #1, 2, x(0)
Put #1, 3, x(0)

Close


End Sub

Restlesa
شنبه 12 شهریور 1390, 13:00 عصر
ممنونم آقا حامد
ولی یه سوال دیگه هم دارم. میشه در رابطه با جستجو و ایجاد یک رکورد جدید و همین طور حذف رکورد مورد نظر هم یه توضیح بدی ؟؟؟

vbhamed
شنبه 12 شهریور 1390, 17:01 عصر
سلام

جستجو در حالت غير مرتب به صورت ترتيبي يعني بايد يكي يكي ركوردها رو بخوني و جستجو كني اما اگر مرتب باشن با استفاده از جستجوي باينري با سرعت فوق‌العاده مي‌توني جستجو كني
بعد از دستور Put يك عدد وجود داره كه شماره ركورد هست، اگر به اضافه 1 كني يك ركورد جديد ثبت ميشه، تعداد ركودهاي فعلي هم ميشه
Lof(1)/Len(rec)
ضمنا اگر اول به آخر فايل بري و اون عدد رو هم نزاري باز هم ركورد جديد ثبت ميشه، آخر فايل رفتن هم اينه
Seek #1,Lof(1)/Len(rec)

براي حذف دو تا راه داري
1 - فايل جديد ايجاد كني
2 - همه ركوردها غير از ركوردي كه بايد حذف بشه رو توي اون بنويسي
3 - فايل قديمي رو پاك كني
4 - فايل جديد رو به نام فايل قديمي تغيير نام بدي

روش 2
1 - تو ستونها يك ستون تحت عنوان مثلا Vaziat (وضعيت) داشته باشي
2 - ركورد مورد نظر رو پيدا كني
3 - ستون وضعيت اون رو 1 كني يعني اين ركورد پاك شده هست
4 - تو ساير كارهاي برنامه از ستونهايي كه وضعيت اونها 1 هست صرفنظر كني
5 - در مواقع بيكاري يا به دلخواه كاربر ركوردهاي با وضعيت 1 رو طبق روش اول پاك كني

روش دوم سريعتره و كاريه كه تو بانكي مثل اكسس هم استفاده ميشه، متد CompactDatabase هم عمل 5 رو انجام ميده

Restlesa
شنبه 12 شهریور 1390, 22:38 عصر
به عنوان آخرین درخواست میشه لطف کنی و برنامه Advanced URL Catalog رو دانلود کنی و مورد بازبینی قرار بدی و بهم بگی که آیا با این روشی که گفتی میشه کارایی این برنامه رو پیداسازی کرد یا نه ؟؟؟

vbhamed
یک شنبه 13 شهریور 1390, 00:26 صبح
سلام

خودتون كارش رو توضيح بديد تا ببينيم چيه، ولي سؤال اينكه اصلا شما چرا نمي خواي از بانك استفاده كني ؟

Restlesa
یک شنبه 13 شهریور 1390, 10:56 صبح
كاشكي دانلودش مي كردين و خودتون كارايي شو ميديدين
كارايي اين برنامه به اين صورته كه آدرس سايت هايي رو كه در اينترنت پيدا مي كنيد و براتون جالب و مهم هستش رو در خودش ذخيره و طبقه بندي مي كنه و يه امكان جالب و مهم ديگه اي هم كه داره اينه كه روي آدرس سايت هاتون كه در اين برنامه ذخيره كردين مي تونيد كلمه عبور و همين طور رمز عبور قرار بدين كه فقط خودتون بتونيد به اون آدرس دسترسي داشته باشين
علت اينكه نمي خوام از بانك اطلاعاتي استفاده كنم اين هستش كه مي خوام يه فايلي داشته باشم كه تنها با برنامه ي خودم باز بشه و دليل ديگه اي هم كه دارم اينه كه من اين پروژه رو براي آخر ترمم مي خوام و مي خوام امكاناتي رو داشته باشه كه ساير برنامه هايي كه هم كلاسي هام ارائه مي كنن نداشته باشن و دليل بعد هم اين هستش كه دوست دارم كه اين كار رو ياد بگيرم و بتونم در برنامه هاي ديگه ام مورد استفاده قرار بدم

vbhamed
پنج شنبه 17 شهریور 1390, 12:25 عصر
دليل بعد هم اين هستش كه دوست دارم كه اين كار رو ياد بگيرم و بتونم در برنامه هاي ديگه ام مورد استفاده قرار بدم

سلام

فقط اين دليلتون قابل قبوله
براي فايلهاي بانك اطلاعاتي هم مي‌تونيد پسورد بزاريد البته هر چند زياد امن نيست و قابل پيدا كردنه
ولي كار بهتر اينه كه از همون بانك استفاده كنيد و چيزهايي كه تو بانك مي‌نويسيد رو به صورت كد شده بنويسيد اينطوري كسي نمي‌تونه بفهمه محتويات واقعي چيه
قادعتا با بانك امكانات بيشتري هم ميشه اضافه كرد

اما در هر حال كاري كه شما مي‌خواين انجام بدين با فايلها كاملا قابل انجامه

returnx
پنج شنبه 17 شهریور 1390, 15:29 عصر
كاشكي دانلودش مي كردين و خودتون كارايي شو ميديدين
كارايي اين برنامه به اين صورته كه آدرس سايت هايي رو كه در اينترنت پيدا مي كنيد و براتون جالب و مهم هستش رو در خودش ذخيره و طبقه بندي مي كنه و يه امكان جالب و مهم ديگه اي هم كه داره اينه كه روي آدرس سايت هاتون كه در اين برنامه ذخيره كردين مي تونيد كلمه عبور و همين طور رمز عبور قرار بدين كه فقط خودتون بتونيد به اون آدرس دسترسي داشته باشين
علت اينكه نمي خوام از بانك اطلاعاتي استفاده كنم اين هستش كه مي خوام يه فايلي داشته باشم كه تنها با برنامه ي خودم باز بشه و دليل ديگه اي هم كه دارم اينه كه من اين پروژه رو براي آخر ترمم مي خوام و مي خوام امكاناتي رو داشته باشه كه ساير برنامه هايي كه هم كلاسي هام ارائه مي كنن نداشته باشن و دليل بعد هم اين هستش كه دوست دارم كه اين كار رو ياد بگيرم و بتونم در برنامه هاي ديگه ام مورد استفاده قرار بدم
خوب شما که خیلی راحت با یک فایل Random میتونید ایمکارو انجام بدید ، بدون مشکل ، خیلی هم پیچیده نیست...
زمانی که من گفتم این کار خیلی سختیه ، من ته ذهنم این برداشت رو داشتم که شما باید یک Format بسازید که قابلیت ذخیره n فیلد دلخواه رو با n نوع خاص ذخیره کنه و بتونه n تا جدول بسازه و ارتباطت ها رو نگه داری کنه و همینطور مقادیر هر Record رو...
شما با یک فایل random خیلی ساده میتونید برنامتون رو پیاده کنید...