Fa ویرایش خط به خط فایل تکست

MVGM_Soft

Active Member
قصد دارم یک برنامه mmb ساده درست کنم که یک فایل تکست با محتوای زیر بهش بدم:
کد:
matn_yek
matn_di
matn_se
matn_4
matn_5
matn_6
و برنامه به انتهای هر خط یک taiid اضافه کنه و روی همون فایل قبلی یا با یه اسم دیگه همونجا ذخیره کنه
اگر امکانش باشه که چک کنه که جلوی اون خط taiid نوشته شده یا نه و اگر شده دیگه اضافه نکنه که چه بهتر
اگر هم نشد مشکلی نیست
حقیقتش نه سرچ کردم و نه دنبالش گشتم
شرمنده اگر تکراریه
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
ببینید، MMB برای کار با فایل سه تا تابع داره، StrToFile - StrToLine - StrFromFile
پس با این توابع میتونید محتوای فایل متنی رو بخونید و اطلاعاتی رو در اون ذخیره کنید (و یا یک فایل جدید ایجاد کنید)

در کنار این، چند تابع هم برای کار با String ها وجود داره

روش کار میتونه این باشه که:

  1. تعداد خطوط فایل متنی رو بخونه (توسط تابع NOL)
  2. یک حلقه که به تعداد خط های فایل متنی اجرا میشه
  3. هر خط از فایل در یک متغیر لود بشه (تابع StrFromFile)
  4. چک کنید که آیا متن مورد نظر؛ مثلاً Taeid در انتهای متن وجود داره ؟ ( توسط تابع StrCopy شش کاراکتر آخر متن رو بخونید که اگر برابر متن مورد نظر بود یعنی وجود داره)
  5. اگر متن مورد نظر وجود نداشت، به محتویات خط اضافه بشه (جمع متغیر ساده)
  6. در این چرخه پس از اتمام تغییرات، در هر بار اجرای حلقه، خط ها به ترتیب پشت سر هم قرار بگیرن که در انتهای کار حلقه، در یک فایل متنی ذخیره بشن (توسط تابع StrToFile)
 

MVGM_Soft

Active Member
ممنون از توضیحتون
خوب این چیزایی رو که شما فرمودید بصورت تئوری متوجه شدم که باید چیکار کنم اما در عمل هنوز مشکل دارم
امکانش هست براتون یک مثال بزنید؟
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
متاسفانه MMB در دسترس ندارم که مثال براتون تهیه کنم، گرچه توضیحات بسیار واضح هست
مثلاً اول چک کنید که فایلتون چند خط داره:
کد:
File$ = '<SrcDir\File.txt'
NumOfLines = NOL(File$)
حالا یک حلقه ایجاد کنید که به تعداد خط ها اجرا بشه:
کد:
[COLOR=Blue]For[/COLOR] i=[COLOR=Red]1[/COLOR] [COLOR=Blue]To[/COLOR] NumOfLines
[COLOR=Green]   **\\ CODES[/COLOR]
[COLOR=Blue]Next[/COLOR] i

اگر توضیحات مربوط به توابعی که عرض کردم رو در راهنمای MMB و یا کتاب جامع MMB (که لینکش در انجمن موجود هست) مطالعه بفرمایید، خیلی راحت میتونید کدها رو بنویسید.
 

MVGM_Soft

Active Member
من تا اینجا تونستم پیش برم:
کد:
NumOfLines = NOL(OpenFile$)
For i=1 To NumOfLines
  ReturnStr$=StrFromFile(OpenFile$, i, 1)
  filter$='@'
  POS=POS(filter$, ReturnStr$)
  If (POS=0) Then
    yahoo$='@yahoo.com'
  Else
    yahoo$=''
  End
  ReturnStr$=ReturnStr$ + yahoo$
  DisplayValue("Text1","ReturnStr$")
Next i
ولی توی Text1 فقط خط آخر با تغییرات انجام شده نمایش داده میشه
یعنی دقیقا الان من نتونستم کاری کنم که هر خط که تغییرات روش انجام داده میشه ذخیره بشه و خط بعدی کارش شروع بشه و در خط بعدی ذخیره بشه
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
به این روش عمل کنید:
کد:
NumOfLines = NOL(OpenFile$)
For i=1 To NumOfLines
  ReturnStr$ = StrFromFile(OpenFile$, i, 1)
  Filter$ = '@'
  POS = POS(Filter$, ReturnStr$)
  If (POS = 0) Then
    Yahoo$ = '@yahoo.com'
  Else
    Yahoo$ = ''
  End
  ReturnStr$ = ReturnStr$ + Yahoo$
  Output$ = Output$ + ReturnStr$ + CHR(13)+CHR(10)
Next i
DisplayValue("Text1","Output$")
تو این مثال شما چون ایمیل معتبر فقط میتونه حاوی یک کاراکتر "@" باشه، استفاده از تابع POS صحیح هست، اما در موارد دیگه، مثل موردی که موضوع سوالتون بود (آخرش Taeid باشه)، چون ممکنه خود متن شامل اون کاراکترها باشه (و معتبر هم باشه)، بهتره که بجای POS چک کنید که دقیقاً هر خط به اون کاراکترهای موردنظر ختم شده باشه (با StrCopy میتونید اینکار روانجام بدید)، اما تو این کد استفاده از POS درست هست.

البته تو این کد یک خط اضافه میشه که خالی هست، چون ما به هر خط کاراکتری رو اضافه میکنیم که به سطر بعدی بره، و برای اخرین خط هم این عمل انجام میشه که باعث میشه یک خط خالی اضافه بشه، که براحتی میتونید اون خط اخر رو حذف کنید و بعد فایل رو ذخیره کنید.
 

جدیدترین ارسال ها

بالا