ورود

View Full Version : جایگزینی کاراکتر



amirali44
یک شنبه 18 آذر 1386, 19:03 عصر
باسلام .
من یک برنامه می خواستم بنویسم که نمی توانم . می خواهم که راهنمایی کنید
1- دریک فایل متنی باید یکسری کاراکترها را درتمام فایل بشناسد وبه کاراکترهای دیگرکاری نداشته باشد من می خواهم مثلا در خط فلان ازیک فایل کارکترهای عددی راکه می خواهم بشناسه وبا دیگرکاراکترهاکاری نداشته باشه و این کاررا برایم بکنه که مثلا 123 456 789 را به 789 456 123تبدیل کنه یعنی هم کاراکترهای مورد نظر(فرض کنیداعداد صفر تا نه هستند) را درهرجای فایل که بودند بشناسه و هم انها اگر پشت سرهم با فاصله یا نقطه از هم جداشدن هر کدام را یک قطعه بداند که بعد قطعه ها را همانطور که می بینیداز اخر به اول در در همان نقطه ازفایل ثبت کند وجلورودوفایل را در اخرببندد/
این نمای کلی برنامه است که :
1- من نمی دانم بهش چطوری بگویم فقط این کارکترها ؟
2- چطوری بگویم تمام فایل را بخوان خصوصا زمانی که قرارباشه درmemoکاربشه ؟
3- کاراکترفاصله ونقطه چطوری بیان می شود ؟
4- درهمین محلی که هستی ثبت کن چطوری گفته می شود؟
5- برای اینکه دسته کاراکترهای انتخابی ازاخر به اول نوشته بشن مثلا 12 34 56بشود
56 34 12 ایده ارایه متغیر ازنوع string خوبه. که بعد اندیسها را از اخر به اول در فایل ثبت کنم ؟

arshia_
دوشنبه 19 آذر 1386, 08:16 صبح
سوال شما بیشتر به مرتب سازی با هوش مصنوعی شبیه است تا جایگزینی کارکتر.
در مورد خواندن فایل و مرتب سازی هیچ مشکلی وجود نداره می شه به راحتی با توابعی که می نویسی این کار رو انجام داد
اما اینکه بازه انتخابی شما مشخص نیست کار رو مشکل می کنه
یعنی مشخص نیست آیا مقادیر پی در پی هستند یا با فاصله و نقطه و....
اگر این کار رو حل کنی بعد می تونی به راحتی بقیه کار رو انجام بدهید.

amirali44
دوشنبه 19 آذر 1386, 18:55 عصر
در این فایل دسته ای از اعداد تشکیل یک واحد می دهند که خود ان واحد از قطعه هایی که با فاصله ونقطه معلوم می شود مشخص می شود .
پس مقادیر پی درپی هستند و با رسیدن به اولین عدد بررسی می کندکه ایا بعدازان عدداست اگربودکه این کارراادامه می دهد ولی اگر نقطه یا فاصله بود ان را یک قطعه درپیش خود نگاه می دارد بعد ادامه می دهد تا به کاراکتری( یا بهتربگویم انچه که درمتن است ) می رسدکه دیگر نه عدداست نه نقطه ونه فاصله ان موقعه می بیند این واحد چند قطعه شده بعد
قطعه ها را ازاخر به اول درهمان محل می نویسد. مثلا $$$12 34 45 @@@ رابه $$$ 45 34 12 @@@ تبدیل می کند

dkhatibi
دوشنبه 19 آذر 1386, 19:50 عصر
فایل را خط یه خط بخوانید.
موقعیت اولین رقم را پیدا کنید ساده ترین روش خواندن کاراکتر به کاراکتر فایل با دستورات کار با رشته است مثل Copy.
در صوذتیکه کاراکتر یافته شده عدد است کاراکتر بعدی را بخون اگر عدد بود به همین ترتیب و کاراکترهای عددی خوانذه شده را در یک متغیر Temp ذخیره کن.
کاراکترهای قبلی خوانده شده را در فایل بنویس.
ترتیب کاراکترهای جدید را معکوس کن و اون هم به فایل اضافه کن.
این فرایند را تکرار نمایید.

amirali44
دوشنبه 19 آذر 1386, 19:59 عصر
بسیار متشکر ولی لینها به زبان ادمیزاد است . من فقط copy را به زبان ماشین می دانم. با تشکر

dkhatibi
دوشنبه 19 آذر 1386, 23:08 عصر
باز کردن فایل خط به خط خوندن حلقه توابع طول رشته و ... را چی؟
بک کم ور برید.

Mahmood_M
سه شنبه 20 آذر 1386, 09:36 صبح
سلام دوست عزیز ...
خوندن این مقاله میتونه کمی کمکتون کنه :
مقاله : دستکاری رشته ها (http://barnamenevis.org/forum/showthread.php?t=70145)


- من نمی دانم بهش چطوری بگویم فقط این کارکترها ؟
2- چطوری بگویم تمام فایل را بخوان خصوصا زمانی که قرارباشه درmemoکاربشه ؟
3- کاراکترفاصله ونقطه چطوری بیان می شود ؟
4- درهمین محلی که هستی ثبت کن چطوری گفته می شود؟
5- برای اینکه دسته کاراکترهای انتخابی ازاخر به اول نوشته بشن مثلا 12 34 56بشود
56 34 12 ایده ارایه متغیر ازنوع string خوبه. که بعد اندیسها را از اخر به اول در فایل ثبت کنم ؟
دو تا سئوال اولتون زیاد واضح نیست ...
3. کارکتر فاصله و نقطه هم مثل سایر کارکترها یک کارکتر مستقل هستند ...
4. وقتی از اول تا آخر یک رشته دارید پیمایش میکنید ، هر لحظه باید با استفاده از طول رشته ( Length ) و تعداد حروفی که پیمایش کردید ، مکان فعلی رو بدست بیارید ...
5. در این مورد دلفی یک تابع داره ( ReverseString ) که حروف یک رشته رو برعکس می کنه ، یک راه که به نظرم میرسه ( البته شاید منطقی نباشه ) اینه که شما هربار که به یک فاصله ( یا هرچیزی که قسمتهای متن شما رو جدا میکنه ) رسیدید قسمت قبل از اون رو با یک کارکتر جدا کنید ، و در یک متغیر ثبت کنید که کارکتر جایگزین شده مربوط به کدام قسمت از کل رشته هست ، بعد میتونید رشته های جایگزین شده رو برعکس کنید و بعد دوباره کارکتر های جایگزین شده رو با کاکرترهای اصلی عوض کنید ...

یک مثال میزنم :

فرض کنید رشته ای داریم با مقدار : " 12 34 " و میخوایم که به " 34 12 " تبدیل بشه ...

از ابتدا پردازش رو شروع میکنیم و وقتی که به کارکتر فاصله رسیدیم ، مقدار اول رو با کارکتر ( مثلا ) " 1 " جایگزین میکنیم و بعد میریم سراغ قسمت بعدی رشته و وقتی به کارکتر فاصله بعدی رسیدیم یا اینکه به پایان رشته رسیدیم ، قسمت پردازش شده رو با کارکتر " 2 " جایگزین میکنیم ...
حالا رشته ما به این صورت شده : " 1 2 " ( بینشون باید فاصله بزارید )
حالا تابع ReverseString رو اجرا میکنیم و مقدار رشتمون رو بهش میدیم تا اون رو برعکس کنه که در نهایت میشه این : " 2 1 " ، حالا کارکتر جایگزین شده با " 1 " رو دوباره با اون عوض میکنیم و همین طور قسمت جایگزین شده با " 2 " رو ...
در این صورت جای قسمتهای رشته ما عوض شده ...

کمی روش فکر کنید به راحتی می تونید این کار رو انجام بدید ( البته خیلی راحت نیست ! )

امیدوارم مفید بوده باشه ...

موفق باشید ...