1 ضمیمه
تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
سلام دوستان ، وقتتان بخیر
یک فایل متنی با پسوند txt داریم با این فرمت :
فیلد1(6) $ فیلد2(7) $ فیلد3(30) $ فیلد4(30) $ فیلد5(15) $ فیلد6(3) $ فیلد7(2) $ فیلد8(10) $ فیلد9(40)
(اعداد داخل پرانتز تعداد کاراکتر های فیلد را مشخص می کند )
به طور مثال :
174023$1034235$علیزاده $حسین $علی $مرد$63$123 $Hoseinu@yahoo.com
$8613451$316432عسگری $احمد $هاشم $مرد$65$1335 $ Ha4323@gmail.com
$7874564$126765حلوایی $نرگس $غلام $زن $66$5432789654$Nar-ha@yahoo.com
.
.
.
می خواهم این اطلاعات را تبدیل کرده و وارد بانک اطلاعاتی کنم . (یعنی کاربر خودش فایل متنی را انتخاب کنه و برنامه اون را تبدیل کنه) تعداد سطر های این فایل متنی متغیر بوده هر بار بین 100 تا 400 خط است .
به نظر شما از چه روشی و چگونه این کار را انجام بدم که هم سرعت خوبی و هم دقت خوبی برای این کار داشته باشه .
فایل نمونه متنی را پیوست می کنم . (فایل را که باز کردید یک بار Ctrl+Shift راست صفحه کلید را بزنید تا متن درست نمایش داده شود)
باتشکر از این که راهنمایی می کنید .
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
400 خط متن چیزی نیست که نگران سرعت پردازشش باشید ، فرمت فایلی هم که دادید چندان پیچیده نیست ، توسط یک TStringList و توابع Copy و PosEX تو یک حلقه متن رو Parse کنید و داخل همون حلقه هر خطی رو که پردازش کردید داخل بانکتون درجش کنید .
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
آقا مجتبی عزیز ممنون از راهنمایی تون .
میشه یک نمونه بزارید تا بتونم از اون الگو بگیرم و برنامه را پیاده سازی کنم .
ممنون.
1 ضمیمه
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
می تونید از خاصیت Delimiter شیء ای مثل StringList استفاده کنید ، یک نمونه ضمیمه کردم ، موفق باشید ...
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
ممنون Mahmood_N جان
با کدام ورژن نوشته شده من با ورژن 7 باز کردم اما مثل اینکه کامل باز نشد .
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
با ورژن 2010 ، چیز خاصی داخلش نیست ، چه مشکلی پیش اومد ؟
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
موقع باز کردن خطاهای زیر را داد :
Error Reading form
OpenBtn.DoubleBuffered
OpenBtn.parentDoubleBuffered
Bitbtn1.DoubleBuffered
Bitbtn1.parentDoubleBuffered
موقع اجرا هم به این خط ایراد گرفت :
نقل قول:
Application.MainFormOnTaskbar := True;
که البته اون خط را حذف کردم و برنامه اجرا شد اما با همون فایلی که در پست اول ضمیمه کردم تست کردم خطای زیر را می دهد
نقل قول:
'ï»؟174023' is not a valid integer value.
من فکر کنم درست اون Section ها را جدا نمی کنه . نظر شما چیه ؟
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
درحالت عادی وقتی اون فایل متنی که در پست اول ضمیمه کردم را اجرا کنم باید یک بار Ctrl+Shift سمت راست صفحه کلید را یک بار بزنیم تا اطلاعات درست نمایش داده شود فکر کنم وقتی متن را درونStringList لود می کنیم اولا همین مشکل را دارد و بعد هم متن های فارسی بصورت ؟ لود میشه این مشکل ها را چطوری حل کنیم ؟:متفکر:
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
آقا محمود مشکل حل شد .
Encoding فایل متنی را از UTF8 به Ansi تغییر دادم .
حالا چطوری باید تشخیص داد که Encoding فایل متنی چیه و اون را به Ansi تبدیل کرد ؟:متفکر:
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
سلام
دو تا مشکل بوجود اومده :
1- متن های فارسی وقتی چند قسمتی باشه هر کدام توی یک فیلد میشینه . یعنی مثلا یه نام خانوادگی مثل یوسف علی پور مردانی زاده ، نام یوسف درست در فیلد مربوطه قرار می گیره اما فامیلش توی چهار تا فیلد مختلف قرار می گیره در صورتی که باید علی پور مردانی زاده توی یک فیلد قرار بگیره .
2- حلقه ی درست اجرا نمیشه یعنی پس از اینکه آخرین فیلد از خط اول را خواند به جای اینکه به خط بعدی بره خطای زیر را میده :
نقل قول:
---------------------------
Project1
---------------------------
List index out of bounds (52)
---------------------------
OK
---------------------------
لازم به ذکر است که 52 فیلد در یک خط قرار دادم و تعداد خط ها هم تقریبا 200 خط میشه .
به نظر شما مشکل کجاست ؟:متفکر:
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
مشکل دوم حل شد چون مقدار فیلد آخر خالی بود مشکل داشت که اون را هم کدش را بهینه کردم اما هنوز مشکل اول که در پست قبلی گفتم پا برجاست :متفکر::متفکر::متفکر::متفکر:
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
عبارت جدا کننده (Delimiter) درست عمل می کنه . عبارت های جدا شده (DelimitedText) درست تشخیص داده میشه اما تکه عبارت های جدا شده را بصورت واحد فرض نمی کنه یعنی وقتی یک فاصله بین دو کلمه در یک قسمت وجود داشته باشه هر کدام را یک قسمت جدا تشخیص می دهد مشکل اینجاست
بطور مثال :
12009$999999$هاشم $رفیعی زاده اراکی $مرد
در این جا رفیعی را یک قسمت ، زاده را یک قسمت و اراکی را یک قسمت دیگر در نظر می گیره در صورتی که باید باهم باشند .
این مشکل را چطوری حل کنم ؟:متفکر:
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
نقل قول:
نوشته شده توسط
hamid-nic
عبارت جدا کننده (Delimiter) درست عمل می کنه . عبارت های جدا شده (DelimitedText) درست تشخیص داده میشه اما تکه عبارت های جدا شده را بصورت واحد فرض نمی کنه یعنی وقتی یک فاصله بین دو کلمه در یک قسمت وجود داشته باشه هر کدام را یک قسمت جدا تشخیص می دهد مشکل اینجاست
بطور مثال :
12009$999999$هاشم $رفیعی زاده اراکی $مرد
در این جا رفیعی را یک قسمت ، زاده را یک قسمت و اراکی را یک قسمت دیگر در نظر می گیره در صورتی که باید باهم باشند .
این مشکل را چطوری حل کنم ؟:متفکر:
StrictDelimiter شیئی رو که از TStringList مشتق کردید با True مقدار دهی کنید ، مثلا :
var
Str: TStringList;
begin
Str:= TStringList.Create;
try
Str.Delimiter:= '$';
Str.StrictDelimiter:= True;
Str.DelimitedText:= '$Sample Text $Man $+9891244566 $www.barnamenevis.org';
ShowMessage(Str.Text);
finally
Str.Free;
end;
end;
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
ممنون آقامجتبي الان پشت سيستمم نيستم . امتحان كرده و نتيجه را اعلام مي كنم .
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
آقای تاجیک من از دلفی 7 استفاده می کنم و این خصیصه در دلفی 7 نیست . چه راهی پیشنهاد می کنید تا به نتیجه برسم ؟
نقل قول: تبدیل اطلاعات یک فایل متنی (txt) و وارد کردن آنها به بانک اطلاعاتی
به جای اون از تکه کد زیر استفاده کردم :
s2.DelimitedText := '"' + StringReplace(S1.Strings[I], s2.Delimiter, '"' + s2.Delimiter + '"', [rfReplaceAll]) + '"';
جواب داد به نظرتون مشکلی داره ؟:متفکر: