![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Страдалецъ, спасибо большое за помощь, но он катает все в одномерный массив
![]() 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
|
||||
|
||||
![]() Цитата:
З.Ы. Лучше поздно, чем никогда. ![]() Я не понял Вашего вопроса, но всё же Вам на него отвечу! |