PDA

View Full Version : سوال در مورد فایلها در پاسکال



Mehran NZ
چهارشنبه 30 خرداد 1386, 02:04 صبح
دوستان شرمنده بخشی رو برای پاسکال پیدا نکردم فکر کردم بهترین جا برای مطرح کردن این سوال همین جاست :متفکر:
سوال من اینه که به چند روش می شه فایلهای متنی رو در پاسکال باز کرد؟
من یه فایل متنی دارم و و مثلا می خوام وسطش یه مطلبی رو بنویسم یا چیزی رو حذف کنم ولی می خوام بعقیه اطلاعاتم که در فایل هستش از بین نره
reset که فقط می خونه
append هم اخرفایل مطلب اضافه می کنه
rewrite هم کل محتویات فایل و پاک می کنه و دوباره می نویسه

خواهشا کمک کنید :چشمک:

arshia_
چهارشنبه 30 خرداد 1386, 07:45 صبح
یه روش ساده البته برای فایلهایی که زیاد حجم نداره مفیده

با فرمان rewrite یه فایل جدید بساز
با فرمان reset فایل قبلی رو برای خوندن باز کن
حالا تمام قسمتهای فایل رو یکی یکی توی فایل جدید کپی کن و فقط تغییرات مورد نظر رو هم اعمال کن.مثل حذف یک متن یا اضافه کردن متن به محل مورد نظر
حالا می تونی فایل قدیمی رو ببندی و فایل جدید رو با همون اسم ذخیره کنی

vcldeveloper
چهارشنبه 30 خرداد 1386, 10:47 صبح
Reset هم فایل رو برای خوندن و هم نوشتن باز می کنه

Mehran NZ
چهارشنبه 30 خرداد 1386, 15:21 عصر
مرسی دوستان عزیز برم ببینم چیکار می کنم
راستی در مورد پاسکال سوالهام و همین جا بپرسم دیگه اره؟!

Mehran NZ
چهارشنبه 30 خرداد 1386, 15:54 عصر
امتحان کردم نشد
عرشیا جان اگه از روش شما بخوام برم اونوقت مثلابرای ساخت یک کتابخانه که هر وقت user بخواد یک کتاب رو حذف کنه باید یک فایل جدید هم باهاش بوجود بیادکه چندان جالب نیست

جناب علی کشاورز عزیز فکر نکنم reset این کار وانجام بده چون وقتی می خوام با reset روی فایل بنویسم error زیر رو میده توجه داشته باش که فایلم متنی هستش نه باینری
Runtime error 105 at 0001:0055
اینم متن برنامه در ضمن برای پاسکال تحت داس هم همین پیام رو میداد



uses wincrt;
var
f:text;
begin
assign(f,'c:\1.txt');
reset(f);
writeln(f,'example');
close(f)
end.

dkhatibi
چهارشنبه 30 خرداد 1386, 18:08 عصر
باید فایل موردنظر وجود داشته باشد. در غیر این صورت پیام خطا می دهد. با دستور Fileexists وجود فایل را چک کنید.
اگر نخوای از روش عرشیا بری فایلی از رکورد ایجاد کن و با seek فایل را ئیمایش و تغییرات را اعمال کن.

Hamid.Kad
چهارشنبه 30 خرداد 1386, 18:22 عصر
دستور Reset فایلهای از نوع Text را فقط بصورت خواندنی باز میکنه.
بجای دستور f:text از دستور f:file استفاده کنید.

Mehran NZ
چهارشنبه 30 خرداد 1386, 19:04 عصر
باید فایل موردنظر وجود داشته باشد. در غیر این صورت پیام خطا می دهد. با دستور Fileexists وجود فایل را چک کنید.
اگر نخوای از روش عرشیا بری فایلی از رکورد ایجاد کن و با seek فایل را ئیمایش و تغییرات را اعمال کن.

dkhatibi جان این و می دونستم برادر مشکل این نیست البته اون کد و تا حالا ندیده بودم کد جالبی هستش ممنون


دستور Reset فایلهای از نوع Text را فقط بصورت خواندنی باز میکنه.
بجای دستور f:text از دستور f:file استفاده کنید.

حمید جان اخه موضوع اینه که من گیر دادم به فایل متنی می خوام ببینم فایل متنی رو هم می شه بصورت هم خواندنی و هم نوشتنی باز کرد یا نه

arshia_
شنبه 02 تیر 1386, 08:28 صبح
با توجه به اینکه شما از فایل متنی مثل یک بانک استفاده می ئکنی پس فکر میکنم شما یک ساختار یکسان در تمام داده ها داری دقیقا مثل رکوردهای یک بانک
اگر اینطور است می توانی یه کار دیگه انجام بدهی
با استفاده از طول هر رکورد و فرمان seek در فاسل حرکت کنی تا بتونی اطلاعات رو ویرایش یا حذف کنی
البته باید نوع فایل رو از متنی به بی نوع تغییر بدی
چون فایل متنی مناسب کار باحجم بالای اطلاعات نیست
اگر کار فقط در حد یک پروژه دانشجویی است می تونی از روش قبلی کمک بگیری
البته می شه به جای ایجاد یه فایل جدید ابتدا همه مقادیر رو توی حافظه رم فراخونی کرد و بعد از تغییرات و حذف موارد مورد نظر یا اضافه کردن اطلاعات در اون در نهایت دوباره در فایل بازنویسی کرد
در این روش تمام کارها در حافظه رم انجام می شه
کار سرعت بالایی داره ولی محدودیت شما در اندازه محدود حافظه است(البته برای کارهای کوچک مناسب است)

dkhatibi
شنبه 02 تیر 1386, 17:14 عصر
البته باید فایلی از نوع رکورد را یک فایل متنی گرفت؟

Mehran NZ
یک شنبه 03 تیر 1386, 00:58 صبح
با توجه به اینکه شما از فایل متنی مثل یک بانک استفاده می ئکنی پس فکر میکنم شما یک ساختار یکسان در تمام داده ها داری دقیقا مثل رکوردهای یک بانک
اگر اینطور است می توانی یه کار دیگه انجام بدهی
با استفاده از طول هر رکورد و فرمان seek در فاسل حرکت کنی تا بتونی اطلاعات رو ویرایش یا حذف کنی
مشکل من دقیقا همین حذف کردنه چون نمی تونم یک فایل متنی رو بصورت هم خواندنی و هم نوشتنی باز کنم که این مشکل بوجود اومده وگرنه روی پیمایشش بحثی ندارم
یعنی اصلا در زبان پاسکال نمی شه یه فایل رو هم خواندنی و هم نوشتنی باز کرد؟واقعا خیلی عجیبه
دوستان اگه پاسکال همچین امکانی نداره بگید تا دیگه حساب کار دستم بیاد و نوع فایل رو اجبارا عوض کنم

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



البته باید فایلی از نوع رکورد را یک فایل متنی گرفت؟

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

Mehran NZ
یک شنبه 03 تیر 1386, 01:21 صبح
راستی عرشیا جان من الان پست دومت و با دقت بیشتری خوندم و به این نتیجه رسیدم که اینکار بیشتر از یک بار امکان پذیر نیست چرا؟
فرض کن من یک برنامه کتابخانه نوشتم که کاربر هر وقت بخواد نام کتاب رو توش وارد کنه و هر وقت بخواد با وارد کردن نام داده اون داده ها رو پاک کنه تا اینجا که بحثی نیست
این چیزی که شما گفتی کاربر فقط یک بار می تونه داده ها رو پاک کنه نه بیشتر چون ادرس فایلی که باید خونده بشه همون بار اول با دستور rewrite عوض می شه و حتی بعد از اون دیگه نمی شه داده ها رو خوند گرفتی که چی شد؟
البته شاید من اشتباه می کنم اگه می شه بیشتر از یک بار اینکار و انجام داد خواهشا توضیح بده
بازم ممنونم

arshia_
یک شنبه 03 تیر 1386, 08:20 صبح
مشکلی نیست
اولین کاری که می کنی اینه که تمام اطلاعات توی فایل رو به حافظه انتقال می دی
بعد تا زمانی که برنامه باز است تمام کارها رو توی حافظه رم انجام می دی
اگر کاربر قصد خروج از برنامه رو داشت مقادیر رو با فرمان rewrite می نویسی در فایل و برنامه رو می بندی
این روش محدودیت تعداد دفعات نداره ولی روش خوبی هم نیست و بیشتر به درد پروژه دانشجویی می خوره ...برای کارهای دیگه باید از دستورات seek استفاده کرد تا نیازی به لود اطلاعات اضافی در رم نباشه.کام حرکت رو هم می تونی طول رکورد بگیری که باید ثابت باشه

Mehran NZ
یک شنبه 03 تیر 1386, 17:07 عصر
عرشیاجان گفتم که بهت اگه منظورت اینه که داده ها رو توی یه ارایه بریزیم و روش کار کنیم
اینجا توضیح دادم

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


اگرم روش دیگه ای هستش خوب توضیح بده ببینم چیکار می شه کرد

arshia_
دوشنبه 04 تیر 1386, 13:59 عصر
چرا طول مشخصی ندارن؟
شما حداکثر طول مجاز رو در نظر بگیر
مگه می شه یه کتاب یا شماره اون طول نا مشخص داشته باشه؟
طول شماره کتاب رو بگیر مثلا 15
اسم رو بگیر 200 کارکتر
=====
در مورد روش دیگه بهتره این کارو بکنی:

شما بگو اصلا جریان این سوال دقیقا چیه؟
سوال رو کامل برای ما اینجا بنویس و تمام نکات رو بگو تا راه حل درست رو به شما انتقال بدهیم

Mehran NZ
سه شنبه 05 تیر 1386, 00:15 صبح
اقا سوال من یه جملست جوابشم یک کلمست نه بیشتر نه کمتر
ایا در پاسکال می شه فایل متنی رو بصورت هم خواندنی و هم نوشتنی باز کرد یا نه؟!

ealvandi
سه شنبه 05 تیر 1386, 00:24 صبح
ببینید دستور append جواب میده ؟

Mehran NZ
سه شنبه 05 تیر 1386, 00:37 صبح
ببینید دستور append جواب میده ؟
نه نمی شه از قرار معلوم راهی نداره دوستان خودم نوع فایل و عوض می کنم ممنون از اینکه وقت گذاشتید:افسرده:

ealvandi
سه شنبه 05 تیر 1386, 00:39 صبح
ضمنان کاربرد دستور seek در فایلهای غیر متنی است.

kemeya
پنج شنبه 04 مرداد 1386, 17:39 عصر
سلام . خوبید من برنامه نویسی با پاسکال رو تازه شروع کردم و می خواستم اگه می شه بهم کمک کنید. چند تا برنامه دارم که براتون می زنم اگه ممکنه بهم کمک کنید .
برنامه ای بنویسسد که دو تا عدد صحیح را به عنوان شمارنده روز و ماه از ورودی گرفته و تعیین کند تاریخ مشخص شده توسط این دو عدد و چندمین روز سال بوده و چند روز به پایان سال مانده است.
2- یک عدد رو از ورودی گرفته ارقام آن را جدا کرده . مجموع ارقام انها را چاپ کند (البته تعداد ار قام معلوم نیست ) .
3-می خواستم برنامه این دو تا از اشکال رو برام بنویسی . البته خودمیه مقدار روش کار کردم ولی خوب نیاز یه کمک دارم .
1-
1234
567
89
10
http://forum.p30world.com/images/statusicon/user_online.gif http://forum.p30world.com/images/buttons/report.gif (http://forum.p30world.com/report.php?p=1354395) http://forum.p30world.com/images/misc/progress.gif

vcldeveloper
جمعه 05 مرداد 1386, 06:27 صبح
سلام . خوبید من برنامه نویسی با پاسکال رو تازه شروع کردم و می خواستم اگه می شه بهم کمک کنید. چند تا برنامه دارم که براتون می زنم اگه ممکنه بهم کمک کنید .
خودتون شروع کنید به نوشتن، هر جا که به مشکل برخوردید، مشکل خودتون و کاری که برای رفع آن کردید را توضیح بدید تا دوستان بهتون کمک کنند، نه اینکه ازشون بخواید برنامه رو براتون بنویسند!

موفق باشید.