![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
такие пироги, подгрузка файла с данными,запись их в двумерный массив, затем вывод всего на StringGrid, но все идет через одно место, кое что набросал но не уверен,массив в файле по идеи 200 на 200, то бишь 40000 значений,но может и меняться,еще хотел попросить помощи в заполнении массива не с начала данных а скажем с 5 строчки.
Код:
var
Form1: TForm1;
Mass: array of array of real;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
F : textfile;
i,j,m,n : integer;
begin
if OpenDialog1.Execute then
AssignFile(f,OpenDialog1.FileName);
RESET(F);
SetLength(mass,m,n);
I:=0 ;
j:=0;
i := 0;
while not Eof(f) do begin
Inc(i);
SetLength(mass, i + 1);
j:= 0;
while not Eoln(f) do begin
Inc(j);
SetLength(mass[i], j + 1);
Read(f, mass[i, j]);
end;
ReadLn(f);
end;
CloseFile(f);
For i:=1 to m-1 do
For j:=1 to n-1 do
begin
StringGrid1.Cells[i,j]:=floattostr(mass[i,j]);
end;
end;
end. |
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
||||
|
||||
|
Проще кинуть рабочий код, чем описывать, что не так. Вот сравните:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Mass: Array of Array of Real;
F: TextFile;
m,n: integer;
begin
if not OpenDialog1.Execute then Exit;
AssignFile(F, OpenDialog1.FileName);
Reset(F);
m := 0; n := 0;
SetLength(Mass, m, n);
while not Eof(F)
do begin
m := Length(Mass);
SetLength(Mass, m + 1);
while not EoLn(F)
do begin
n := Length(Mass[m]);
SetLength(Mass[m], n + 1);
Read(F, Mass[m, n]);
end;
ReadLn(f);
end;
CloseFile(f);
StringGrid1.FixedCols := 0; StringGrid1.FixedRows := 0;
StringGrid1.ColCount := 1; StringGrid1.RowCount := Length(Mass);
for m := 0 to Length(Mass) - 1
do begin
if StringGrid1.ColCount < Length(Mass[m])
then StringGrid1.ColCount := Length(Mass[m]);
for n := 0 to Length(Mass[m]) - 1
do StringGrid1.Cells[n, m] := FloatToStr(Mass[m,n]);
end;
end; |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Qlimax (08.03.2013)
| ||
|
#4
|
||||
|
||||
|
А что касается считывания с 5 строчки файла данных, то просто вызовите ReadLn(f) 5 раз перед началом заполнения массива и все.
|
|
#5
|
|||
|
|||
|
да,m и n это размер массива по идеи, в StringGrid хочу подгружать чтобы проверять правильность загрузки массива, меня больше интересует правильно ли он подгружаеться, еще в файле думаю указывать ряд значений, таких как размерность массива, можно ли сделать так чтобы он брал из файла размер массива, т.е. в 1 строчке написано допустим 200 200, он её считывает и создает массив 200 на 200, а со 2 строчки документа начинает заполнять его данными ?
|
|
#6
|
||||
|
||||
|
Можно и так, но вообще хранить так данные как они у вас хранятся, очень непрактично. Даже простая операция перехода на нужную позицию данных в файле выглядит стрёмновато. Намного быстрее и эффективнее содать типизированный файл и работать уже с ним. Это и быстрее и удобнее.
|
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
||||
|
||||
|
Не, так не пойдет, это-же текстовый файл.
|
|
#9
|
||||
|
||||
|
Цитата:
Вот что получилось. |
|
#10
|
|||
|
|||
|
Страдалецъ, спасибо большое за помощь, но он катает все в одномерный массив
,смотрел пошагово он менять значение n а m оставляет таким же.Alegun, благодарю за помощь, кое что вытащил для себя из твоей програмки но при попытке загрузить туда свой фал ругаться на меня) " invalid numeric input " |
|
#11
|
||||
|
||||
|
Цитата:
|
|
#12
|
|||
|
|||
|
понял) спасибо) это отличный пример вывод на грид, но без записи в массив, а вывод в грид мне нужен чисто для проверки )
|
|
#13
|
||||
|
||||
|
Цитата:
Код:
var
Mass: Array of Array of Real;
procedure TForm1.Button2Click(Sender: TObject);
var
f: TextFile;
i,b,c,d: integer;
str: string;
begin
AssignFile(f,OpenDialog1.FileName);
Reset(f);
Readln(f, c);
Readln(f, d);
SetLength(mass,c,d);
for i:= 0 to c do for b:= 0 to d do
begin
Readln(f,str);
mass[i,b]:= StrToFloat(str);
end;
CloseFile(f);
end; |
|
#14
|
|||
|
|||
|
тэк..поковырялся с кодом, понял что идет не так, массив в файле имеет вид:
1.0005 2.04 2.006 2.448 4.55 6.55 2.45 2.564 5.6541 3.2118 6.154 8.55 ... и т.д. а программа понимает разделитель только энтер как я понял,как ей описать понятие пробела? и может проще писать в статический массив ибо как описать то что одна строка всего 200 значений? ) |
|
#15
|
||||
|
||||
|
Цитата:
З.Ы. Лучше поздно, чем никогда. ![]() |