PDA

View Full Version : مقید کردن یک String List به یک Grid



Nima NT
جمعه 13 آذر 1388, 14:18 عصر
با عرض سلام و وقت به خیر خدمت دوستان و اساتید گرامی
بنده سوالی داشتم و امیدوارم که دوستان محبت کرده و بنده رو راهنمایی بکنند ، بنده میخواستم که یک String List رو که ساختاری مشابه زیر داره رو در یک String Grid نمایش بدم ، ولی متاسفانه نمیدونم چطوری.
این String List به شکل زیر هست ....

Name = Reza
Family = Mardan Poor
Age = 33
حالا چیزی که بنده میخوام این هست که مثلا" هر کدوم از این اطلاعات به صورت مجزا در یک فیلد و در مجموع در یک رکورد باشن ، که نهایتا" به صورت زیر باشه که در فیلد اول Name = Reza قرار بگیره و در فیلد دوم Family = Mardan Poor قرار بگیره و الی آخر.

ممنون میشم لطف کرده و راهنمایی کنید.
با تشکر.

vcldeveloper
جمعه 13 آذر 1388, 17:41 عصر
type
TPersonalRec = record
FirstName,
LastName,
Age : string;
end;

TPersonalRecEnumerator = record
private const
FRecFieldCount = 3;
private
FIndex: Integer;
FList: TStringList;
public
constructor Create(AList: TStringList);
function GetCurrent: TPersonalRec; inline;
function MoveNext: Boolean; inline;
property Current: TPersonalRec read GetCurrent;
end;

TPersonalStringList = class(TStringList)
public
function GetEnumerator: TPersonalRecEnumerator;
end;

{ TPersonalRecEnumerator }

constructor TPersonalRecEnumerator.Create(AList: TStringList);
begin
FList := AList;
FIndex := -1 * FRecFieldCount;
end;

function TPersonalRecEnumerator.GetCurrent: TPersonalRec;
begin
Result.FirstName := FList.ValueFromIndex[FIndex];
Result.LastName := FList.ValueFromIndex[FIndex+1];
Result.Age := FList.ValueFromIndex[FIndex+2];
end;

function TPersonalRecEnumerator.MoveNext: Boolean;
begin
Result := FIndex < FList.Count - FRecFieldCount -1;
if Result then
Inc(FIndex,FRecFieldCount);
end;

{ TPersonalStringList }

function TPersonalStringList.GetEnumerator: TPersonalRecEnumerator;
begin
Result := TPersonalRecEnumerator.Create(Self);
end;

{TForm1}

procedure TForm1.Button1Click(Sender: TObject);
var
PersonalList : TPersonalStringList;
PersonalRec: TPersonalRec;
begin
PersonalList := TPersonalStringList.Create;
try
PersonalList.LoadFromFile('C:\Test.txt');
for PersonalRec in PersonalList do
begin
StringGrid1.Cells[1,StringGrid1.RowCount-1] := PersonalRec.FirstName;
StringGrid1.Cells[2,StringGrid1.RowCount-1] := PersonalRec.LastName;
StringGrid1.Cells[3,StringGrid1.RowCount-1] := PersonalRec.Age;
StringGrid1.RowCount := StringGrid1.RowCount + 1;
end;
finally
PersonalList.Free;
end;
end;