PDA

View Full Version : سوال: استفاده از tstringlist به شکل public



iamehsan56
یک شنبه 06 بهمن 1392, 17:54 عصر
سلام
من از یه database یه سری ip رو می خونم و توی یه stringlist قرار می دم و واسه هر کدوم یه index می ذارم .به شکل زیر



List := TStringList.Create;

List.Add('192.168.1.1=1');
List.Add('192.168.1.2=2');
List.Add('192.168.1.3=3');
List.Add('192.168.1.4=4');



این جوری هر وقت بخوام می تونم با کد زیر هر جای برنامه index مربوط به اون ip رو در بیارم . بنابراین باید
این stringlist رو public تعریف کنم .


List.Values['192.168.1.4']


اما می خوام بدونم free کردن stringlist رو کجا قرار بدم تا امن باشه . این دو جا رو من فکر می کنم
1.من این لیست رو تو برنامه referesh هم می کنم . در این مواقع لازم که free کنم و دوباره create کنم .
2.جای دیگه هم قاعدتا باید موقع close کردن برنامه باشه !

آیا درسته ؟

اصلا کاری که انجام می دم درسته ؟ و یا راه بهتری هم داره ؟

ممنون می شم کمک کنید

Mask
یک شنبه 06 بهمن 1392, 23:24 عصر
بهترین و بهینه ترین راه برای این کار استفاده از آرایه هاست.
اینجوری فقط اندیسها رو تغییر میدید و نیازی به Free کردن نیست.

Felony
دوشنبه 07 بهمن 1392, 06:22 صبح
من از یه database یه سری ip رو می خونم و توی یه stringlist قرار می دم و واسه هر کدوم یه index می ذارم .به شکل زیر
ایندکس ها به همین صورت ساده و Sequential هستند ؟ اگر بله چه نیازی به اندیس دادن هست ؟! ایندکس خود آیتم در StringList رو بگیرید خوب .

ایندکس ها از کجا میان ؟ آیا یه مقداری فیکس اولیه ای دارن یا مثلا فیلد خاصی از جدول بانکتون هستن ( مثلا ID ) ؟


1.من این لیست رو تو برنامه referesh هم می کنم . در این مواقع لازم که free کنم و دوباره create کنم .
برای Refresh کردن نیازی به آزاد کردن و ساخت مجدد شئ نیست ، باید فقط محتویات اون رو پاک کنید ( TStringList.Clear )

در آخر من دلیلی برای اون کارتون نمیبینم ولی اگر قراره یک مقدار Key-Value ذخیره بشه بهترین گزینه استفاده از Dictionary ها هست .

iamehsan56
دوشنبه 07 بهمن 1392, 07:44 صبح
بله ایندکس ها به همین صورت ساده و Sequential هستند . در واقع من در خلال برنامه لازم دارم از روی Ip ایندکسشو به دست بیارم .
موضوع من اساس اینکار یعنی ساختن این لیست هست . که ایا راه بهتری هم هست ؟
و دیگه این که کجا باید free بشه با توجه به public بودن .
در مورد dictionay لطفا کمی توضیح دهید

Felony
دوشنبه 07 بهمن 1392, 09:26 صبح
خب پس چه نیازی به ایندکس دادن دستی هست ؟ خود کلاس TStringList به آیتم هاش ایندکس میده ( از 0 شروع میشه ) :


var
List: TStringList;
begin
List := TStringList.Create;
List.Add('192.168.1.1');
List.Add('192.168.1.2');
List.Add('192.168.1.3');
List.Add('192.168.1.4');
ShowMessage(IntToStr(List.IndexOf('192.168.1.3'))) ;
end;

iamehsan56
دوشنبه 07 بهمن 1392, 09:45 صبح
دوست مهربان . حرف شما درسته .
اما موضوع من چیز دیگه ای هستش .
موضوع من اساس اینکاره یعنی ساختن این لیست هست . که ایا راه بهتری هم هست ؟ یا نه
و دیگه این که کجا باید free بشه با توجه به public بودن .
در مورد dictionay لطفا کمی توضیح دهید ایا در دلفی 7 قابل استفاده است

یوسف زالی
دوشنبه 07 بهمن 1392, 10:30 صبح
چند تا راه دارید، می تونید این کار رو با استفاده از متدهای خاص انجام بدید، و اصل شی شما private باشه، اما اگر به همون روش خودتون دارید ادامه میدید بهتره که در متد های ساخت فرم یا رویدادهاش مثل OnCreate بگذارید و در متد ها یا رویدادهای مخرب مثل OnDestroy هم کار آزاد کردنشون انجام می شه.
دیکشنری ها هم در دلفی 7 ساپورت نمی شند:


Introduced in Delphi 2009, the TDictionary class, defined in Generics

Felony
دوشنبه 07 بهمن 1392, 11:22 صبح
همون رویدادها که یوسف گفت برای ساخت و آزادسازی شئ مناسب هستن ، برای دلفی 7 هم راهی جز استفاده از همین کلاس یا آرایه ها ندارید .

iamehsan56
سه شنبه 08 بهمن 1392, 01:04 صبح
همون رویدادها که یوسف گفت برای ساخت و آزادسازی شئ مناسب هستن ، برای دلفی 7 هم راهی جز استفاده از همین کلاس یا آرایه ها ندارید .

مممنون . اما منظورتون از این که آرایه ها استفاده کنم چیه . چون ارایه برای اساس یه ایندکس عددی پیدا می شه .حال این که من می خوام با داشتن یه رشته ایندکسشو پیدا کنم

یوسف زالی
سه شنبه 08 بهمن 1392, 10:06 صبح
منظور استفاده از آرایه ای از رکورد است.
بهتره در این مورد تحقیق کنید.
array و record
شما همون String list کارت رو راه می ندازه.