View Full Version : مشکل ذخیره حروف فارسی در فایل تکست - دلفی نسخه xe6
idehrayan
جمعه 05 دی 1393, 21:28 عصر
سلام به همه اساتید
من میخوام متن چندتا edit رو توی فایل تکست ذخیره کنم ولی حروف فارسی بصورت ؟؟؟؟؟ در میاد
لازمه بگم فایل رو بصورت یونیکد هم ذخیره کردم همچنین از تابع
utf8encode استفاده کردم و در ادامه
متن داخل ادیت رو داخل متغیری از نوع widestring و UnicodeString ریخته و ذخیره کردم بازهم جواب نداد.
در ضمن من از دلفی نسخه xe6 استفاده میکنم در صورتی که قبلا در نسخه دلفی 7 اینچنین مشکلی نداشتم
ممنون میشم اساتید راهنمایی کنن
یوسف زالی
شنبه 06 دی 1393, 11:35 صبح
سلام.
تابعی که باهاش ذخیره می کنید رو بگذارید.
idehrayan
شنبه 06 دی 1393, 13:39 عصر
سلام از لطف شما متشکرم
فکر کنم مشکل از تنظیمات ویندوز باشه چون تو یه سیستم دیگه چک کردم ذخیره سازی بدون مشکل انجام میشه
; (' ||' +t1:=('||'+sh_date.OutDate+' || '+t1+' | '+t2+' | '+t4+' | '+t5+' | '+t6
; ('AssignFile(s,'aaza.txt
;(Append(s
;(Writeln(s,t1
;(CloseFile(s
یوسف زالی
شنبه 06 دی 1393, 14:15 عصر
هیچ وقت با دستورات فسیل کار نکنید.
var
TextList: TStringList;
.
.
TextList := TStringList.Create;
.
.
TextList.Add('one');
TextList.Add('two');
TextList.Add('three');
.
.
TextList.SaveToFile('SomeWhere');
.
.
TextList.Destroy;
می تونید از استریم ها هم استفاده کنید.
برای Append کردن هم راه زیاده.
idehrayan
شنبه 06 دی 1393, 16:10 عصر
اقا ممنون
ولی بازهم درست نشد درضمن در این روش هربارکه اطلاعاتی در فایل ذخیره میکنم اطلاعات قبلی حذف میشه.من میخوام خروجی در فایل txt بصورت زیر ذخیره بشه
تاریخ کد نام نام پدر ش.ش مبلغ
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــ
|1393/10/05 |100 | محمد رضایی | حسن | 123132 | 5000000 ||
|1393/10/05 |120 | رضا حسنی | قاسم | 87787 | 8000000 ||
.
.
.
درضمن ایا روشی هست که مقادیر هر سطر دقیقا زیر هم ذخیره بشه من از یه حلقه for استفاده میکنم که خروجیش مطلوب نیست. مثلا اگه طول پیشفرض نام رو ۱۲ کارکتر در نظر بگیریم از حلقه زیر استفاده میکنم
;' '+for i := Length(text2) to 12 do text2:=text2
یوسف زالی
شنبه 06 دی 1393, 18:18 عصر
من دقیقا بهتون گفتم چکار کنید.
برای Append کردن هم می تونید فایل رو قبلش بخونید.
TestList.LoadFromFile
البته روش بهترش استفاده از استریمه که بی خود فایل رو دوباره نخونید.
برای فایل های کم حجم در حد کیلو بایت، همین جواب می ده.
idehrayan
شنبه 06 دی 1393, 18:34 عصر
سلام وقت بخیر
از اینکه وقت میزارین و سوالات من پاسخ میدین متشکرم
من نمی خوام این فایل رو با برنامه خودم بازش کنم در واقع قراره فایل با Notepad باز بشه
من میخوام بنا به درخواست دوستان علاوه بر اینکه نتیجه عملیات در فایل اکسس ذخیره میشه در فایل متنی هم ذخیره شه
مشکل من اینه که وقتی فایل رو با notepad باز میکنم حروف فارسی بصورت ؟؟؟؟؟ در میاد البته تو سیستم های دیگه تست کردم ذخیره سازی بدون هیچ مشکلی انجام میشه فقط تو سیستم خودم این مشکل هستش
یوسف زالی
شنبه 06 دی 1393, 20:52 عصر
دوست عزیز، دقیقا راهنمایی کردم. دقت نمی کنید.
یک بار دیگه مطالب رو بخونید، و اگر دنبال روش استریم هستید، در همین سایت بگردید دنبال TFileStream
Mask
یک شنبه 07 دی 1393, 00:02 صبح
پیرو صحبتهای استاد خودم
با توضیحاتی که دوست عزیزمون دادند، به نظرم مشکل ایشون ، در نوع ذخیره سازی هست.
برای رفع چنین مشکلاتی با فارسی ، باید فایلتون رو Unicode ذخیره کنید.
مثال:
procedure TForm1.Button1Click(Sender: TObject);var
SL: TStringList;
encode: TEncoding;
begin
SL := TStringList.Create;
try
if FileExists('c:\test.txt') then
SL.LoadFromFile('c:\test.txt');
SL.Append('----------------------------------------------------------');
SL.Append('|1393/10/05 |100 | محمد رضایی | حسن | 123132 | 5000000 ||');
SL.Append('|1393/10/05 |120 | رضا حسنی | قاسم | 87787 | 8000000 ||');
SL.SaveToFile('c:\test.txt', encode.Unicode);
finally
SL.Free;
end;
end;
به قول استاد خودم :برای مقدار زیاد دیتا ، استفاده از استریم رو پیشنهاد میکنم.
موفق باشید.
idehrayan
دوشنبه 08 دی 1393, 07:59 صبح
سلام
طبق فرمایش اساتید محترم mask , you-see
با استفاده از کد بالا مشکلم حل شد .که ازشون کمال تشکر را دارم.
ببخشید ایا روشی هست که خروجی حالت جدول باشه تقریبا یه چیزی شبیه جدول بالا. یعنی هر عنوانی دقیقا از یک مکان خواصی شروع بشه و اگه طولش از یه مقداری بشتر بود کات شه من از حلقه زیر استفاه کردم ولی مشکلم حل نشد
;' '+for i := Length(text2) to 12 do text2:=text2
مثلا اگه text2 مساوی محمد باشه 8 فضای خالی به انتهای اون اضافه میکنه
یوسف زالی
دوشنبه 08 دی 1393, 14:36 عصر
Text := leftstr(Text + dupestring(' ', 8), 8)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.