PDA

View Full Version : Return Array From Function



FirstLine
سه شنبه 14 بهمن 1382, 14:04 عصر
با سلام
- فکر میکنم توی VB یک تابع Split داشتیم که یک رشته (جمله) دریافت میکرد و نتیجه را یک آرایه برمیگرداند که هر ایندکس آرایه یک کلمه بود، آیا توی دلفی یه همچین چیزی داریم؟
- چجوری میتونم یک تابع بصورت عمومی بنویسم که یک ورودی بصورت رشته دریافت و این ورودی را بر اساس Space خورد کرده و هر کلمه را در یک Index آرایه قرار داده و نتیجه را در یک ارایه برگرداند؟
(در حقیقت من میخوام که یه جمله را بر اساس کلمه های موجود در آن خورد کرده و بر روی هر کلمه کاری انجام دهم)
با تشکر

Delphi-Clinic
سه شنبه 14 بهمن 1382, 14:55 عصر
اینو تست کن.



type

ArrOfStr = array of string;

implementation

function explode(sPart, sInput: string): ArrOfStr;
begin
while Pos(sPart, sInput) <> 0 do
begin
SetLength(Result, Length(Result) + 1);
Result[Length(Result) - 1] := Copy(sInput, 0,Pos(sPart, sInput) - 1);
Delete(sInput, 1,Pos(sPart, sInput));
end;
SetLength(Result, Length(Result) + 1);
Result[Length(Result) - 1] := sInput;
end;

function implode(sPart: string; arrInp: ArrOfStr): string;
var
i: Integer;
begin
if Length(arrInp) <= 1 then Result := arrInp[0]
else
begin
for i := 0 to Length(arrInp) - 2 do Result := Result + arrInp[i] + sPart;
Result := Result + arrInp[Length(arrInp) - 1];
end;
end;

procedure sort(arrInp: ArrOfStr);
var
slTmp: TStringList;
i: Integer;
begin
slTmp := TStringList.Create;
for i := 0 to Length(arrInp) - 1 do slTmp.Add(arrInp[i]);
slTmp.Sort;
for i := 0 to slTmp.Count - 1 do arrInp[i] := slTmp[i];
slTmp.Free;
end;

procedure rsort(arrInp: ArrOfStr);
var
slTmp: TStringList;
i: Integer;
begin
slTmp := TStringList.Create;
for i := 0 to Length(arrInp) - 1 do slTmp.Add(arrInp[i]);
slTmp.Sort;
for i := 0 to slTmp.Count - 1 do arrInp[slTmp.Count - 1 - i] := slTmp[i];
slTmp.Free;
end;