PDA

View Full Version : encoding ANSI



barnamenevis76
پنج شنبه 27 دی 1397, 12:52 عصر
با سلام
تبدیل یک فایل txt به کد پیج ansi (مانند کاری که notepad انجام میده ) آیا در VFP امکان پذیره .
یک فایل txt داریم که وقتی تو vfp باز میشه متن فارسی رو درست نشان نمیده ولی وقتی با notepad اون رو باز می کنیم و با encoding ansi ذخیره می کنیم مشکل نمایش تو vfp حل میشه.

farhad_shiri_ex
جمعه 28 دی 1397, 11:18 صبح
با سلام
تبدیل یک فایل txt به کد پیج ansi (مانند کاری که notepad انجام میده ) آیا در VFP امکان پذیره .
یک فایل txt داریم که وقتی تو vfp باز میشه متن فارسی رو درست نشان نمیده ولی وقتی با notepad اون رو باز می کنیم و با encoding ansi ذخیره می کنیم مشکل نمایش تو vfp حل میشه.

اگر تکست فایل تون خروجی یک بانک اطلاعاتی که می تونید با دستور CPCONVERT خروجی code page را تغییر بدید!
اگر هم که یک فایل متنی ساده فارسی هست که اگر بخواهید تو وی فاکس برنامه ای بنویسید که بایت های 8بیتی را از 128 کاراکتر به 256 کاراکتر تبدیل کنه! شدنی اما یکم سخت میشه!
اگر حتما نمی خواهید که داخل برنامه خودتون باشه که از Convertor های آماده استفاده کنید

barnamenevis76
یک شنبه 07 بهمن 1397, 13:09 عصر
اگر تکست فایل تون خروجی یک بانک اطلاعاتی که می تونید با دستور CPCONVERT خروجی code page را تغییر بدید!
اگر هم که یک فایل متنی ساده فارسی هست که اگر بخواهید تو وی فاکس برنامه ای بنویسید که بایت های 8بیتی را از 128 کاراکتر به 256 کاراکتر تبدیل کنه! شدنی اما یکم سخت میشه!
اگر حتما نمی خواهید که داخل برنامه خودتون باشه که از Convertor های آماده استفاده کنید
ممنون از شما .
مشکل من حل شد . البته با شئی word !



strSrcFile = "c:\utf8.txt"
strDstFile = "c:\ansi.txt"
strFind = "~"
strReplace = ","
objWord = CreateObject("Word.Application")
RC = objWord.Documents.Open(strSrcFile)


objWord.Selection.Find.Text = strFind
objWord.Selection.Find.Replacement.Text = strReplace
objWord.Selection.Find.Forward = 1
objWord.Selection.Find.Format = 0
objWord.Selection.Find.MatchCase = 0
objWord.Selection.Find.MatchWholeWord = 0
objWord.Selection.Find.MatchWildcards = 0
objWord.Selection.Find.MatchSoundsLike = 0
objWord.Selection.Find.MatchAllWordForms = 0


RC = objWord.ActiveDocument.SaveAs(strDstFile,2)
RC = objWord.Application.Quit

farhad_shiri_ex
یک شنبه 07 بهمن 1397, 15:41 عصر
ممنون از شما .
مشکل من حل شد . البته با شئی word !



strSrcFile = "c:\utf8.txt"
strDstFile = "c:\ansi.txt"
strFind = "~"
strReplace = ","
objWord = CreateObject("Word.Application")
RC = objWord.Documents.Open(strSrcFile)


objWord.Selection.Find.Text = strFind
objWord.Selection.Find.Replacement.Text = strReplace
objWord.Selection.Find.Forward = 1
objWord.Selection.Find.Format = 0
objWord.Selection.Find.MatchCase = 0
objWord.Selection.Find.MatchWholeWord = 0
objWord.Selection.Find.MatchWildcards = 0
objWord.Selection.Find.MatchSoundsLike = 0
objWord.Selection.Find.MatchAllWordForms = 0


RC = objWord.ActiveDocument.SaveAs(strDstFile,2)
RC = objWord.Application.Quit




البته این روش یک بدی داره! اگر شی COM آفیس WORD در دسترس نباشه! برنامه تون از کار میوفته!
چون سالها قبل همچنین کاری کرده بودیم برای دریافت از اکسل و از شی اکسل آبجکت ساخته بودیم بعدها در نسخه های ویندوز بالاتر و آفیس های به روز برنامه کار نمیکرد!
به نظرم موقتا شاید تاثیر مثبتی داشته باشه کاری کردید ولی مطمنا در طولانی مدت قابل نگهداری نیست و وابستگی بسیار زیادی ایجاد کردید بهتره روی یک کانورتور ساده با یک زبان مثل سی پلاس پلاس فکر کنید به راحتی DLL کنید واستفاده کنید خیلی هم قابلیت نگهداری نرم افزار را بالا بردید

barnamenevis76
دوشنبه 08 بهمن 1397, 09:17 صبح
البته این روش یک بدی داره! اگر شی COM آفیس WORD در دسترس نباشه! برنامه تون از کار میوفته!
چون سالها قبل همچنین کاری کرده بودیم برای دریافت از اکسل و از شی اکسل آبجکت ساخته بودیم بعدها در نسخه های ویندوز بالاتر و آفیس های به روز برنامه کار نمیکرد!
به نظرم موقتا شاید تاثیر مثبتی داشته باشه کاری کردید ولی مطمنا در طولانی مدت قابل نگهداری نیست و وابستگی بسیار زیادی ایجاد کردید بهتره روی یک کانورتور ساده با یک زبان مثل سی پلاس پلاس فکر کنید به راحتی DLL کنید واستفاده کنید خیلی هم قابلیت نگهداری نرم افزار را بالا بردید
خدا خیرتون بده .ممنون از راهنماییتون و هشداری که دادید .
منظورتون از شی com رو متوجه نشدم .
برنامه ای که دارم کارم می کنم با فایلهای docx هم سروکار داره و قاعدتا همیشه باید office روی کلایت نصب شده باشه .
با دستور (STRCONV(cExpression, 11 هم تست کردم و جواب داد.



11
Converts UTF-8 characters in cExpression to double-byte characters.




gnFileHandle = FOPEN("c:\utf8.txt")
nSize = FSEEK(gnFileHandle, 0, 2)
= FSEEK(gnFileHandle, 0, 0)
cString = FREAD(gnFileHandle, nSize)
= FCLOSE(gnFileHandle)
p1=strconv(cString,11)
gnErrFile = FCREATE('c:\ansi.txt')
=FWRITE(gnErrFile,p1)
=FCLOSE(gnErrFile)

farhad_shiri_ex
شنبه 13 بهمن 1397, 10:40 صبح
منظورتون از شی com رو متوجه نشدم .

COM تکنولوژی قدیمی تر از NET. مایکروسافت بود! و به این علت که وی فاکس هم با همین تکنولوژی کار میکرد. بنابراین می تونست با کتابخانه هایی که با COM توسعه داده می شدند را استفاده کنه! مثل Active-X , DLL , .... هایی که اغلب با زبان ویژوال سی نوشته می شدند.!


با دستور (STRCONV(cExpression, 11 هم تست کردم و جواب داد.

به نظر من این روش خیلی امن تر هست و وابستگی به کتابخانه های آفیس را هم نخواهد داشت.
و البته چون با توابع سطح پایین C فایل را باز میکنید. معمولا روی تمام معماری های پردازش گرها نباید مشکلی داشته باشید.
نکته ای که وجود داره! همانطور که عرض کردم به علت اینکه از توابع سطح پایین استفاده کردید بنابراین اگر به هر علتی تا قبل از دستور fclose شما خطایی رخ بده! و چون مدیریت خطا را انجام ندادید فایلی که باز شده دیگه بسته نخواهد شد!
بنابراین بهتره که حتما مدیریت خطا ها را انجام بدید حالا یا با Try...Catch ویا با بلاک های شرطی