![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте, нужна помощь, не могу создать программу, в которой необходимо считать из внешнего файла 9 чисел(записанных через пробел в строку), и сформировать на форме массив (3х3) этих чисел, проблема в том что я не понимаю как из файла со строкой чисел сделать массив...
как открывать файл понятно, но вот как обработать нет. наведите на мысль пожалуйста... |
|
#2
|
||||
|
||||
|
TStrings
property Delimiter property DelimitedText |
|
#3
|
|||
|
|||
|
Цитата:
а как из этого сделать массив 3х3? |
|
#4
|
||||
|
||||
|
На форму добавить поле Memo и диалог открытия файлов OpenDialog. Ну и кнопку, вот ее обработчик:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
mass : array [0..2] of array [0..2] of integer;
i,j : integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not EOF(F) do
begin
for i := 0 to 2 do
for j := 0 to 2 do
Read(F, mass[i][j]);
end;
end;
for i := 0 to 2 do
for j := 0 to 2 do
Memo1.Lines.Add('mass [' + IntToStr(i) + ']' + '[' + IntToStr(j) + ']' + ' = ' + IntToStr(mass[i][j]));
end; |
| Этот пользователь сказал Спасибо orion_asm за это полезное сообщение: | ||
Archer666 (05.05.2013)
| ||
|
#5
|
|||
|
|||
|
Цитата:
спасибо, помогло ![]() а как реализовать вывод в Label в виде таблицы 3х3? |
|
#6
|
||||
|
||||
|
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
mass : array [0..2] of array [0..2] of integer;
i,j : integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not EOF(F) do
begin
for i := 0 to 2 do
for j := 0 to 2 do
Read(F, mass[i][j]);
end;
end;
for i := 0 to 2 do
for j := 0 to 2 do
StringGrid1.Cells[i,j] := IntToStr(mass[i][j]);
end;
end.![]() Последний раз редактировалось orion_asm, 05.05.2013 в 16:25. |
| Этот пользователь сказал Спасибо orion_asm за это полезное сообщение: | ||
Archer666 (05.05.2013)
| ||
|
#7
|
|||
|
|||
|
Цитата:
точно, так и сортировать потом проще большое спасибо! ![]() |
|
#8
|
|||
|
|||
|
orion_asm, а как можно отсортировать? по возрастанию например..
|
|
#9
|
||||
|
||||
|
Я делал на TFileStream и TMemoryStream подобия n-мерных массивов.
|
|
#10
|
||||
|
||||
|
В секции implementation добавляешь такое: (SgSort взят и частично изменен с cyberforum.ru)
Код:
implementation
// Процедура сортировки StringGrid
procedure SgSort(aSg : TStringGrid; const aCol : Integer; aCompare : TStringListSortCompare = nil);
var
SlSort, SlRow : TStringList;
i, j : Integer;
begin
SlSort := TStringList.Create;
for i := aSg.FixedRows to aSg.RowCount - 1 do begin
SlRow := TStringList.Create;
SlRow.Assign(aSg.Rows[i]);
SlSort.AddObject(aSg.Cells[aCol, i], SlRow);
end;
if Assigned(aCompare) then SlSort.CustomSort(aCompare)
else SlSort.Sort;
j := 0;
for i := aSg.FixedRows to aSg.RowCount - 1 do begin
SlRow := Pointer(SlSort.Objects[j]);
aSg.Rows[i].Assign(SlRow);
SlRow.Free;
Inc(j);
end;
FreeAndNil(SlSort);
end;
// Сортировка по возрастанию
function CompNumAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer;
var
N1, N2 : Extended;
begin
N1 := StrToFloatDef(aSl[aIndex1], 0);
N2 := StrToFloatDef(aSl[aIndex2], 0);
if N1 < N2 then Result := -1
else if N1 > N2 then Result := 1
else Result := 0;
end;
// По убыванию
function CompNumDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer;
var
N1, N2 : Extended;
begin
N1 := StrToFloatDef(aSl[aIndex1], 0);
N2 := StrToFloatDef(aSl[aIndex2], 0);
if N1 > N2 then Result := -1
else if N1 < N2 then Result := 1
else Result := 0;
end;Код:
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
mass : array [0..2] of array [0..2] of integer;
i,j : integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not EOF(F) do
begin
for i := 0 to 2 do
for j := 0 to 2 do
Read(F, mass[i][j]);
end;
end;
for i := 0 to 2 do
for j := 0 to 2 do
begin
StringGrid1.Cells[i,j] := IntToStr(mass[i][j]);
end;
// Сортируем все столбцы по возрастанию
SgSort(StringGrid1, 0, CompNumAsc);
SgSort(StringGrid1, 1, CompNumAsc);
SgSort(StringGrid1, 2, CompNumAsc);
end;
end.Последний раз редактировалось orion_asm, 30.07.2013 в 04:58. |