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

جایگزینی کاراکتر در فایل

0 امتیاز

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

fstream f("test.txt",ios::app | ios::out | ios::in);
	char c;
	int pos=f.tellg();
	cout<<pos<<endl;
	while(pos>=0)
	{
		f.read(&c,sizeof(char));
		if(c>=97 || c<=122)
			c-=32;
		f.write(&c,sizeof(char));
		pos--;
	}

 

سوال شده خرداد 13, 1393  بوسیله ی maryam (امتیاز 338)   12 33 44
سلام
یه نظرناچیز دارم گفتم شاید به کارتون بیاد
 نظرم  اینه که برای مشخص کردن حروف کوچک و بزرگ بهتره که از کارکتر به جای عدد استفاده کنیم به این دلیل که در سیستمهای متفاوت مقدار عددی کاراکترها متفاوته و امکان داره نرم افزار در این سیستم ها  برخلاف انتظاری که ما داریم عمل کنه و مشکل ساز بشه برای مثال در شرط if میتونید به جای عدد 97 از'a'  و به جای عدد 122 از'z' استفاده کنید همچنین c رو منهای 'a'-'A' کنید.

یه راهنمایی از شما می خواستم، ممنون میشم اگر خط اول برنامتون رو به من توضیح بدید که چکاری انجام میده
طبیعیه که انتهای فایل اضافه میشه چون داری از ios::app استفاده می کنی .
این مقدار عددی کد اسکی کاراکتر ها هستن که  توی همه ی سیستم ها یکی هستن . ولی خب برای خوانایی بیشتر بهتره همون 'a' استفاده بشه .
خب وقتی ios::app رو برمیدارم اصلا چیزی داخل فایل نوشته نمیشه.
خط اول یه فایل رو باز میکنه در سه حالت نوشتن،خواندن و اضافه کردن به انتهای فایل.
سلام
یک نکته و یک راهنمایی از یک کتاب معتبر
نکته: کدهای عددی نویسه ها در کامپیوترهای مختلف ممکن است متفاوت باشد.
راهنمایی: برای مقایسه نویسه ها از خود کدهای ASCII مانند if(ch==65) استفاده نکنید، بلکه ثابتهای نویسه مربوط به آنها را در این گونه مقایسه ها به کار ببرید مانند if(ch=='A').
از این که راهنماییم کردین از شما تشکر می کنم. ممنون
والا من اولین باره میبینم ممکنه کاراکتر اسکی فرق کنه !!. آخه کد های اسکی استاندارد هستن از اسمشم مشخصه Ascii مخفف American Standard Code for Information Interchange. هستش
اون کتابه ( که این جوری که مشخصه زیادم معتبر نیست ) درست میگه بهتره 'A' استفاده بشه به دلیل خوانایی بیشتر ! نه بخاطر این که ممکنه کد فرق کنه  .
سلام
صفحه  354 - کتاب دایتل و دایتل -  ترجمه دکتر مرتضی صاحب الزمانی
================================================================
نکته قابلیت حمل 5-6
-------------------------------------------------------------------------------------------------------------------
کدهای عددی نویسه ها در کامپیوتهای مختلف ممکن است متفاوت باشند.

نکته قابلیت حمل 5-7
-------------------------------------------------------------------------------------------------------------------
برای مقایسه از خود کدهای ascii مانند if(ch=='65') استفاده نکنید؛ بلکه ثابتهای نویسه مربوط به آنها را در ین گونه مقایسه ها به کار ببرید مانندif(ch=='A') .

در تلاش برای استاندارد کردن کدهای نویسه ها،  "" بیشتر سازندگان کامپیوتر"" ، دستگاه های خود را برای یکی از دو نظام کدگذاری رایج یعنی ascii, ebcdic طراحی کرده اند. ascii مخفف  " کد استاندارد آمریکایی برای مبادله اطلاعات " و ebcdic مخفف " کد تبادلی دهدهی کد شده به صورت دودویی توسعه یافته " است.     ""نظامهای کد گذاری دیگری نیز وجود دارند""  اما این دو نظام، رایج تر از بقیه می باشند.
امکانش نیست که دوباره نویسی نکنین یعنی کاراکتر رو سر جای خودش فقط تغییر بدید

1 پاسخ

0 امتیاز
بدون استفاده از رشته و فایل کمکی راهی برای جذف کردن یا جایگزین  کردن وجود نداره !

اگر فایل خیلی بزرگه میشه خط به خط خوند عملیات رو روش انجام داد داخل یک فایل موقت ذخیره کرد نهایتا فایل موقت رو جانشین کرد .
پاسخ داده شده خرداد 14, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
دیدم خب ؟
من جوابشو نفهمیدم.برای حذف کردن گویا یه راه گفته.می خواستم ببینم شما فهمیدید چی گفته
خب همین چیزیه که من گفتم
By far the simplest approach is to read the file and write the data to a temporary file skipping the data to deleted and then copying the temporary back over the original. I know you prefer not to use a temporary but that is the easiest way to go
اگر دلیل خاصی برای استفاده نکردن از رشته  وجود نداره کل  فایل رو بصورت کامل بخون بعد چیزایی که میخوای روداخلش عوض کن بعد دوباره داخل فایل بنویس
...