PDA

View Full Version : آموزش: تجربیاتی در رابطه با TStringList و اشیای مشابه



یوسف زالی
سه شنبه 02 مهر 1392, 12:43 عصر
سلام. در اين پست چند تا نکته ي کوچيک در مورد اين شي مي گذارم و اميدوارم به درد دوستان بخوره.

1- استفاده از اين شي براي ليستي از مقادير رشته اي جفت جفت
2- استفاده براي Split کردن يک رشته
3- استفاده براي تهيه ليست بدون تکرار
4- استفاده براي سورت کردن يک سري از اعداد
5- استفاده در مواقعي که نياز داريم اگر رشته تغييري کرد اتفاقي بيفتد
6- استفاده در ارسال پارامتر هاي رشته اي تعداد بالا به متد يا گرفتن خروجي از متد

------------------------------------------------------------------------
1- مقادير رو به اين صورت وارد کنيد:


N1=Data1
N2=Data2
N3=Data3
.
.

و به اين صورت اونها رو بخونيد:


ST.Names[i]
ST.ValueFromIndex[i]


به همين راحتي!
از اين خاصيت مي تونيد براي توليد فايل هايي مثل INI يا جفت هاي پارامتر و ... و جدا کردن اونها از هم استفاده کنيد.


2- متني داريد شبيه اين:


salam;in teste;yousef zalli;

براي جداکردنش:


ST.Text := StringReplace(TXT, ';', #13#10, [rfReplaceAll]);


:))


3- مقدار Duplicate اين شي رو تنظيم کنيد! خيلي ها از وجود اين پراپرتي بي خبرند.


4- نمونه کد رو ببينيد:


var
i, x: integer;
st: TStringList;
begin
st := TStringList.Create;
st.Sorted := true;

for i := 1 to 30 do
begin
x := RandomRange(1, 1000);
st.Add(Format('%20d', [x]));
end;

ShowMessage(st.Text);


for i := 0 to 29 do
begin
x := StrToInt(Trim(st[i]));
ShowMessage(IntToStr(x));
end;


st.Free;
end;



5- براي اين مورد هم به جاي استفاده از رشته، از يک StringList استفاده کنيد. اين شي رويدادي داره به نام OnChange!!!


6- مثال گوياست:


procedure Split(TXT: string; st: TStrings);
begin
st.Text := StringReplace(TXT, ';', #13#10, [rfReplaceAll])
end;

procedure TForm1.Button1Click(Sender: TObject);
var
x: TStringList;
i: integer;
begin
x := TStringList.Create;
Split('salam; in yek test ast; yousef;', x);

for i := 0 to x.Count -1 do
ShowMessage(x[i]);

x.Free;
end;



فعلا همین!

Felony
سه شنبه 02 مهر 1392, 13:44 عصر
2- متني داريد شبيه اين:

salam;in teste;yousef zalli;

براي جداکردنش:

ST.Text := StringReplace(TXT, ';', #13#10, [rfReplaceAll]);

با متدهای خود TStringList هم میشه :


ST.StrictDelimiter:= True;
ST.Delimiter:= ';';
ST.DelimitedText:= 'salam;in teste;yousef zalli;';
;)

Mask
یک شنبه 19 آبان 1392, 19:58 عصر
پیرو صحبتهای دوست عزیزم You-See
برای استفاده از پروپرتی Duplicates حتما باید قبلش پروپرتی Sorted رو True کنید.

یوسف زالی
یک شنبه 19 آبان 1392, 20:18 عصر
نکته خیلی خوبی رو اشاره کردی.
ممنون.
مستندات:


function TStringList.AddObject(const S: string; AObject: TObject): Integer;
begin
if not Sorted then
Result := FCount
else
if Find(S, Result) then
case Duplicates of
dupIgnore: Exit;
dupError: Error(@SDuplicateString, 0);
end;
InsertItem(Result, S, AObject);
end;