Файл например содержит:
0 0 1 0 0 1 0 0 0 0
0 0 0 1 0 0 1 0 1 0
1 1 1 0 0 0 0 0 1 0
0 0 1 0 1 1 0 1 1 0
0 0 1 0 1 0 1 1 1 1
1 0 1 1 1 1 1 0 1 0
0 1 0 1 1 1 1 1 0 0
1 1 1 1 0 0 1 1 1 1
1 0 0 1 0 1 0 0 1 1
0 0 0 0 1 0 0 0 1 1
procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName) ;
var f: TextFile; iTmp, i, k: Integer;
strTemp: String ;
begin
AssignFile(f, FileName) ;
Reset(f) ;
with StringGrid do
begin
// Get number of columns
Readln(f, iTmp) ;
ColCount := iTmp;
// Get number of rows
Readln(f, iTmp) ;
RowCount := iTmp;
// loop through cells & fill in values
for k := FixedRows to RowCount - 1 do begin
for i := FixedCols to ColCount - 1 do
begin
Readln(f, strTemp) ;
Cells[i, k] := strTemp;
end ;
end ;
CloseFile(f) ;
end ;
end;
Этот пример файла реальный?
Потому что, ты сначала грузишь кол-во строк и кол-во столбцов из файла.
А в файле этого нет.
Да если добавить 10 10 то грузиться
но в 1-у ячейку одну строку...
Как разбить строку ?
http://forum.pascal.net.ru/index.php?showtopic=6972
А есть какой небуть простой способ разбиение слов для этой матрицы ?
Так достаточно просто?
procedure LoadStringGrid(sg: TStringGrid; const FileName: TFileName);
var
f: TextFile; iTmp, i, k, p: Integer;
s: String ;
begin
AssignFile(f, FileName);
Reset(f);
with sg do begin
// Get number of columns
Readln(f, iTmp);
ColCount := iTmp + FixedCols;
// Get number of rows
Readln(f, iTmp);
RowCount := iTmp + FixedRows;
k := fixedrows;
while not eof(f) do begin
readln(f, s);
s := s + ' ';
i := fixedcols;
repeat
p := pos(' ', s);
if p > 0 then begin
cells[i, k] := copy(s, 1, p - 1);
inc(i);
delete(s, 1, p);
end;
until p = 0;
inc(k);
end;
end;
CloseFile(f);
end;
Да. Спасибо !
А как сделать проверку что бы если вначале открывающевася файла нету
N
N
(Где N там число)
То выводили ошибку про то что файл не коректен. ?
Можно, например, читать не число, а строку:
...
// Get number of columns
Readln(f, s);
iTmp := StrToIntDef(s, -1);
if iTmp = -1 then { <--- Если условие выполнено, то прочитанная строка содержит не одно число }
...