IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> TXT to StringGrid
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Файл например содержит:

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 ?
И как сделать проверку соотвецтвия формату файла который загружается ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


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

По твоему коду файл должен быть таким.
И ты читаешь полностью всю строку, разбивай ее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Да если добавить 10 10 то грузиться
но в 1-у ячейку одну строку...
Как разбить строку ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Разбиение на слова. Все способы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


А есть какой небуть простой способ разбиение слов для этой матрицы ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Так достаточно просто?

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;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Да. Спасибо !

А как сделать проверку что бы если вначале открывающевася файла нету
N
N
(Где N там число)
То выводили ошибку про то что файл не коректен. ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Можно, например, читать не число, а строку:


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

 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.10.2020 23:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name