Fa كار با فايل متنى

ali guard

Member
سلام دوستا ميشة با بيلدر اين كاركرد مسلن من يك فايلى تيكست دارم كة تيكست يك ديكشنرى هست نويشتة هاش اين جورى هست

PHP:
Weekly = هةفتةنامة(رؤذنامة)، ياخود هةفتانة(بؤ روداويَك كة هةفتانة ردوودةدات)

ميخواهم اين تيكست بكونم با دوو تيكست يكى كليمةهاى انطليسى يكى ترجومشن در اين تيكست ما بين هردوو كليمةى مسلن فارسى اينطليسى يك = دارد ميخواهم از اونجا جوداكنم يانى قبل از مساوى بشة تيكست يك باد از مساوى بشة تيكس دوو كسى ميدونة كمك كند ممنونم
 

msnv

Well-Known Member
سلام دوستا ميشة با بيلدر اين كاركرد مسلن من يك فايلى تيكست دارم كة تيكست يك ديكشنرى هست نويشتة هاش اين جورى هست

PHP:
weekly = هةفتةنامة(رؤذنامة)، ياخود هةفتانة(بؤ روداويَك كة هةفتانة ردوودةدات)
ميخواهم اين تيكست بكونم با دوو تيكست يكى كليمةهاى انطليسى يكى ترجومشن در اين تيكست ما بين هردوو كليمةى مسلن فارسى اينطليسى يك = دارد ميخواهم از اونجا جوداكنم يانى قبل از مساوى بشة تيكست يك باد از مساوى بشة تيكس دوو كسى ميدونة كمك كند ممنونم

سلام علیکم
خیلی متوجه منظورتون نشدم، غلط املایی زیادی داشت اگر ممکنه کمی واضحتر بفرمائید
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
اگر اشتباه نکنم و خوب متوجه شده باشم میخواین متن این متغیر Weekly رو به دو تا تکست تبدیلش کنید که یکیشون انگلیسی هست و یکی معنیش که فارسی مثلا Book = کتاب حالا میخواین هر کدوم رو بر اساس مساوی = که بین این دو قرار داره جدا کنید که اگه فارسیش رو بخواین میشه کتاب و انگلیسی Book , درسته ؟
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
کدش رو براتون نوشتم فکر کنم همونی هست که میخواین :
کد:
Dictionary$ = 'Book = کتاب'
SearchEqual = POS(=,Dictionary$)- 2
GetEnglish$ = StrCopy(Dictionary$,1,SearchEqual)
SearchEqual = POS(=,Dictionary$)+ 2
LenDictionary = LEN(Dictionary$) - SearchEqual + 2
GetPersian$ = StrCopy(Dictionary$,SearchEqual,LenDictionary)
MessageEx("","GetEnglish$")
MessageEx("","GetPersian$")
 

ali guard

Member
دستت درد نكنت منظورم من اين هست يك فايلى ديكست دارم كة يك ديكشنرى هست جندين خط هست ميخواهم بخش اينطليزى و فارسى جودا بكنم دوو فايل يكيشو فارسى يكيشون اينطليزى
 

evil_gates

اين نيز بگذرد ...
دوست عزيز
توصيه نميكنم از اين روش استفاده كنيد. از پلاگين SQLite استفاده كنيد. و يك table حاوي دو تا فيلد بسازيد. تو هر ركورد مي تونيد عبارت انگليسي و معادل فارسي اون رو وارد كنيد. عمليات بازيابي اطلاعات هم به راحتي تو اين پلاگين انجام ميشه.

اما اگه اصرار داريد حتما از فايل متني استفاده كنيد پيشنهاد ميكنم بين معادل فارسي و انگليسي هر خط از يك كاراكتر خاص مثل # استفاده كنيد. بعد با استفاده از توابع آرايه‌اي ميتونيد دوتا كاراكتر رو از هم تفكيك و معادلش رو بدست بياريد مثلا:
کد:
string$ = 'hello#سلام#'
english$ = GetArrayItem(string$,'#',1)
persian$ = GetArrayItem(string$,'#',2)
Message("","english$")
Message("","persian$")
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
اگه میخواین متن خط 1 فایل تکست شما که مثلا اینه #کتاب#Book رو از فایل تکستتون بگیرین و انگلیسی و فارسیش رو جدا کنید با توصیه و کد جناب evil_gates میشه این :
کد:
PathDictionary$ = 'C:\Dictionary.txt'
LineText = 1
GetLine$ = StrFromFile(PathDictionary$,LineText,1)
GetEnglish$ = GetArrayItem(GetLine$,'#',1)
GetPersian$ = GetArrayItem(GetLine$,'#',2)
MessageEx("","GetEnglish$")
MessageEx("","GetPersian$")
 

ali guard

Member
سلام هنوز منضورم نفهميدن من ميخواهم يك برنامة بسازم كة اين فايل جودا كند بزند تو دو تا تيكست جودا جودا
 

پیوست ها

  • sd.txt
    648 بایت · بازدیدها: 11

evil_gates

اين نيز بگذرد ...
سلام هنوز منضورم نفهميدن من ميخواهم يك برنامة بسازم كة اين فايل جودا كند بزند تو دو تا تيكست جودا جودا

دوست عزيز
اين كد تمام مقاديري كه تو فايل متني sd خودتون ثبت كرديد رو تفكيك و تو دو تا فايل en و fa وارد ميكنه:
کد:
source$ = '<SrcDir>\sd.txt'
enfile$ = '<SrcDir>\en.txt'
fafile$ = '<SrcDir>\fa.txt'
For i=1 To NOL(source$)
  str$ = StrFromFile(source$,i,1)
  str$ = str$ + '='
  en$ = GetArrayItem(str$,'=',1)
  retval = StrToFile(enfile$,en$,TRUE,TRUE)
  fa$ = GetArrayItem(str$,'=',2)
  retval = StrToFile(fafile$,fa$,TRUE,TRUE)
Next i
 

loo30fer

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

پیوست ها

  • DemoDictionary.rar
    2 کیلوبایت · بازدیدها: 19
آخرین ویرایش:

ali guard

Member
دوست عزيز
اين كد تمام مقاديري كه تو فايل متني sd خودتون ثبت كرديد رو تفكيك و تو دو تا فايل en و fa وارد ميكنه:
کد:
source$ = '<srcdir>\sd.txt'
enfile$ = '<srcdir>\en.txt'
fafile$ = '<srcdir>\fa.txt'
for i=1 to nol(source$)
  str$ = strfromfile(source$,i,1)
  str$ = str$ + '='
  en$ = getarrayitem(str$,'=',1)
  retval = strtofile(enfile$,en$,true,true)
  fa$ = getarrayitem(str$,'=',2)
  retval = strtofile(fafile$,fa$,true,true)
next i
خيلى ممنون دستت درد نكوند اين بو كة ميخستم ولى يك لوطف ميشة اين كد توزيح بديد
 

evil_gates

اين نيز بگذرد ...
خيلى ممنون دستت درد نكوند اين بو كة ميخستم ولى يك لوطف ميشة اين كد توزيح بديد

دوست عزيز
خط اول اين كد آدرس فايل txt شما رو بدست مياره و تو متغير $source ميريزه (همون فايلي كه متن فارسي و انگليسي با هم هست)

خط دوم يك آدرس براي فايل انگليسي به نام en در نظر ميگيره و تو متغير $enfile ميريزه

خط سوم هم يك آدرس براي فايل فارسي به نام fa در نظر ميگيره و تو متغير $fafile ميريزه

خط بعدي شروع حلقه ماست كه ميگه از i=1 تا ($Nol (source تكرار بشه. تابع Nol تعداد خطوط فايل متني موردنظر رو بر ميگردونه

مثلا اگه تو فايل source شما 10 خط وجود داشته باشه Nol اون برابر 10 ميشه پس حلقه ما از 1 تا 10 تكرار خواهد شد.

تو خط بعدي با تابع StrFromFile خطي رو از فايل متني ميخونيم و تو متغير $str ميريزيم

شكل كلي اين دستور به اين صورت هست:
کد:
str$ = StrFromFile(path$,x,y)
تو كد بالا $path مسير فايل موردنظر شما. x شماره خطي كه قصد داريد بدست بياريد و y تعداد خطوطي كه قصد داريد بدست بياد هست. پس:
کد:
str$ = StrFromFile(source$,i,1)
ميخواد بگه انتخاب كن فقط 1 خط از محل خط شماره i فايل $source و چون اين دستور تو حلقه هست به ازاي هربار چرخش حلقه مقدار i يك واحد اضافه ميشه پس تو چرخش حلقه به ترتيب از خط اول تا خط آخر فايل متني شما خط به خط انتخاب ميشه و تو متغير $str ثبت ميشه

تو دستور:
کد:
  str$ = str$ + '='
به انتهاي رشته بدست اومده كه تو متغير $str ذخيره شده يك كاراكتر = رو اضافه ميكنيم پس نتيجه چيزي شبيه به اين خواهد شد:
=سلام=hello

کد:
en$ = GetArrayItem(str$,'=',1)
چون تو فايل متني اول متن انگليسي و بعد كاراكتر مساوي و بعد متن فارسي قرار داره پس با GetArrayItem و تعيين يك علامت جداكننده مثل = ميتونيم بگيم تمام رشته ما رو تا اولين علامت = انتخاب كن و تو متغير $en بريز كه نتيجه ميشه بدست اومدن متن انگليسي خط موردنظر شما

تو خط بعدي با دستور StrToFile و مقدار متغير $en رو تو فايل $enfile ثبت ميكنيم

همين كار رو براي عبارت فارسي هم تكرار ميكنيم و اينبار با دستور GetArrayItem رشته قبل از دومين علامت = كه همون متن فارسي هست رو بدست مياريم و تو متغير $fa ميريزيم و مقدار اين متغير رو هم تو خط بعدش به فايل فارسي ارسال ميكنيم

در پايان هم حلقه رو با Next i ميبنديم
 

ali guard

Member
سلام دوستاتن دوو تا سول دیگه‌ دارم گفته‌ همین تایپك ببورسم بیهتر هست تا تایپك كامل بشه‌
1- ج طورلا بتوانم در یك فایل txt كه‌ دارم میسلی همون تیكست بالا ابلود كردم اگر توی كاراكتر های یك ردیف مسلن مساوی = توش نبود حزف كنم
2 - جطور میشه‌ هر ردیفی كه‌ خالی هست باك كنم یانی ردیف های كه‌ با اینتر اضافه‌ شوداست هیجی توش نیست
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
فکر کنم این تاپیک که قبلا من ایجاد کرده بودم و سوالاتی در این رابطه را پرسیدم بودم بتونه کمکتون کنه اینم لینک تاپیکش : http://forum.majidonline.com/showthread.php?t=143681
برای حذف مسای هم داخل یک متغیر میتونید از این کد استفاده کنید :
کد:
Text$ = 'Hello = سلام'
Search = POS('=',Text$)
If (Search <> 0) Then
  Text$ = StrDel(Text$,Search,1)
End
ضمنا تو تاپیکی که لینکش رو براتون قرار دادم دستوری قرار داده شده که یک لاین فایل رو میشه با یک متن دیگه تغییر داد ولی اگه میخواین به کل یک لاین حذف بشه باید Hex 0D 0A مربوط به اون لاین رو حذف کنید چون این Hex باعث میشه لاین ایجاد بشه برای اینکار هم فکر کنم پلاگین Filemanager بتونه کمتون کنه و بشه باهاش اون لاین رو حذف کرد البته تست نکردم :-?
 

ali guard

Member
سلام در اون تایپك جوابم نبود میخواهم خط با طوری كامل باك كنم برای سوالی بادی میخواهم هر خط مساوی توش نبود با طور كامل اونو هم باك كم ممنون
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
یک نمونه براتون پیوست کردم که هر جواب هر دو سوال شماست ضمنا برای حذف کامل هر لاین بدون پلاگین و تنها با استفاده از چندتا تابع خود بیلدر پیادش کردم و برای سوال دومتون فقط تو نمونه ای که گذاشتم کامل نیست چون در صورت نبود = در یکی از اونها متن اون لاین رو خالی میکنه ولی حذف نمیشه چون دارم روی چیزی کار میکنم و زود باید تحویل بدم وقت نکردم روش کار کنم ولی اگه به مثال قسمت حذف لاین به صورت کامل دقت کنید با توجه به توضیحات کاملی که برای هرکدوم نوشتم متوجه نحوه کار میشین و خودتون میتونید درستش کنید ولی اگه در آخر نتونستین اشکالی نداره بگین براتون درستش میکنم :wink:
 

پیوست ها

  • DemoSearch&RemoveLine.rar
    1.1 کیلوبایت · بازدیدها: 26

evil_gates

اين نيز بگذرد ...
جناب loo30fer روش پردردسري رو براي انجام منظورتون انتخاب كرديد. اين روش براي فايلهاي با تعداد خطوط كم ممكنه خوب باشه اما براي فايلهاي طولاني و همينطور فايلهايي كه در طي كاركرد كاربر دچار تغييرات و حذف و اضافه خطوط ميشن فرايند انجام كار رو مختل خواهد كرد.

جناب ali guard برداشت من از سوالات شما اينه كه قصد داريد به نوعي به يك بانك اطلاعاتي مبتني بر فايل txt برسيد. توصيه ميكنم سراغ پلاگين SQLite بريد و تا كارتون راحت تر و اصولي تر انجام بشه.

حذف كردن يك خط از فايل متني نميتونه ايده خوبي براي جلوگيري از فرايند جستجو در فايل و پيدا كردن كلمات مشابه يك ديكشنري انگليسي به فارسي باشه

موفق باشيد
 

loo30fer

کاربر متخصص مولتی مدیا بیلدر
جناب loo30fer روش پردردسري رو براي انجام منظورتون انتخاب كرديد. اين روش براي فايلهاي با تعداد خطوط كم ممكنه خوب باشه اما براي فايلهاي طولاني و همينطور فايلهايي كه در طي كاركرد كاربر دچار تغييرات و حذف و اضافه خطوط ميشن فرايند انجام كار رو مختل خواهد كرد.
بله حرفتون کاملا درسته جناب Evil_gates ولی چون پستهای قبلی جناب Ali_guard رو دیده بودم حس کردم که زیاد نمیتونه فایل سنگینی باشه با این حال تو پست قبلی بهشون پیشنهاد دادم که با پلاگین Filemanager متن اون لاین رو همراه با هگز 0D 0A مربوطشش حذف کنن ولی گفتم یک روش بدون استفاده از پلاگین رو براشون قرار بدم شاید به کارشون بیاد :-?
 

ali guard

Member
جناب loo30fer روش پردردسري رو براي انجام منظورتون انتخاب كرديد. اين روش براي فايلهاي با تعداد خطوط كم ممكنه خوب باشه اما براي فايلهاي طولاني و همينطور فايلهايي كه در طي كاركرد كاربر دچار تغييرات و حذف و اضافه خطوط ميشن فرايند انجام كار رو مختل خواهد كرد.

جناب ali guard برداشت من از سوالات شما اينه كه قصد داريد به نوعي به يك بانك اطلاعاتي مبتني بر فايل txt برسيد. توصيه ميكنم سراغ پلاگين SQLite بريد و تا كارتون راحت تر و اصولي تر انجام بشه.

حذف كردن يك خط از فايل متني نميتونه ايده خوبي براي جلوگيري از فرايند جستجو در فايل و پيدا كردن كلمات مشابه يك ديكشنري انگليسي به فارسي باشه

موفق باشيد
سلام دوست عزیز من با نتیجه‌ی كارم رسیدم من این كار برای این میخواستم الان میكم
من دارم یك دیكشنری مینویسم میخواهم یك دیتای دیكشنری بیدا كنم كه‌ حاوی خیلی كلیمات باشد ولی بیدا نمیكنم الان تنو نیت یكیكی بیدا میكنم مسلن یك فایلی دیكست بیدا كه‌ دم كه‌ 2000 كلیمه‌ومعنا دارد میخاستم كوردی و انگلیزیش از هم جوداكنم با همون روشی كه‌ شوما كمكم كردید خوب در ان تیكست در برخی جاها سه‌ر نویشته‌ هست كه‌ میخواستم هر لاینی مساوی ندارد باك بشه‌ برای باك كردن همین بود . در برخی جاها هم فاصیله‌ توش بود كه‌ باك كردن یك خط خالی برای اون خاستم الان اینو دروست كردم باروشی كه‌ جناب loo30fer معرفی كرد با یكم تغیرات دروست كردم

مخصوصا ان تغیر دادم
کد:
CHR(13) + CHR(10)
با این شكل
کد:
CHR(10) + CHR(13)
این كدی هست كه‌ كامل كردم تمامی خطهای خالی تیكست باك میكند كه‌ اینتر اضافه‌ شوداست
کد:
source$ = '<SrcDir>\y.txt'
For i=1 To NOL(source$)
str$ = StrFromFile(source$,i,1)
If (str$='') Then
Line = i
*** Get Text to >> Line = 2 << + Char Enter
GetTextLine$ = StrFromFile(source$,Line,1) + CHR(10) + CHR(13)
*** Get Number Line File >> Path$ = 'C:\File.txt' <<
GetLineFile = NOL(source$)
*** Get All Text File >> Path$ = 'C:\File.txt' <<
GetTextAllLine$ = StrFromFile(source$,1,GetLineFile)
*** Change Text GetTextLine$ In Text Empty '' To GetTextAllLine$
GetTextAllLine$ = StrChange(GetTextAllLine$,GetTextLine$,'')
*** Save Text GetTextAllLine$ To File Path$ = 'C:\File.txt' <<
Save = StrToFile(source$,GetTextAllLine$,FALSE,FALSE)
Else
End
Next i
 
آخرین ویرایش:

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

بالا