Помощь - Поиск - Пользователи - Календарь
Полная версия: TXT to StringGrid
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Desktop_4
Файл например содержит:

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



Надо этот файл загрузить в StringGrid не трогая FixedRows/Cols...

Есть процедура:

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;



Но грузится первая строка в одну ячейку.
Как правильно загрузить из файла в StringGrid ?
И как сделать проверку соотвецтвия формату файла который загружается ?
Ozzя
Этот пример файла реальный?
Потому что, ты сначала грузишь кол-во строк и кол-во столбцов из файла.
А в файле этого нет.
Цитата
10
10
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

По твоему коду файл должен быть таким.
И ты читаешь полностью всю строку, разбивай ее.
Desktop_4
Да если добавить 10 10 то грузиться
но в 1-у ячейку одну строку...
Как разбить строку ?
Desktop_4
А есть какой небуть простой способ разбиение слов для этой матрицы ?
volvo
Так достаточно просто?

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;

Desktop_4
Да. Спасибо !

А как сделать проверку что бы если вначале открывающевася файла нету
N
N
(Где N там число)
То выводили ошибку про то что файл не коректен. ?
volvo
Можно, например, читать не число, а строку:


...
// Get number of columns
Readln(f, s);
iTmp := StrToIntDef(s, -1);
if iTmp = -1 then { <--- Если условие выполнено, то прочитанная строка содержит не одно число }
...

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.