Войти

Показать полную графическую версию : [решено] Прямая загрузка файла в массив


Tweety_yeah
04-04-2011, 07:41
Есть файл вида:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


Его нужно перенести в массив lvl. Как это сделать наиболее быстрым способом?

if key=32 then
begin
AssignFile(lvl, 'levels/level1.lvl');
Reset(lvl);
While not Eof(lvl) Do
Begin
ReadLn(lvl, s);
for i := 1 to 20 do
for k := 1 to 20 do
begin
level[k,i] := StrToInt(Copy(s,1,pos(' ',s)-1));
s := Copy(s,Pos(' ',s)+1,Length(s));
scan;

end;
End;
CloseFile(lvl);
end;

Пытался сделать так, первое значение записывается и потом выдает ошибку "Is not integer value", как то так.

Delirium
04-04-2011, 07:48
Открываем файл, удаляем все пробелы, ибо там одни 0 и 1 и погнали циклом без всяких поисков пробела.

Tweety_yeah
04-04-2011, 07:49
Открываем файл, удаляем все пробелы, ибо там одни 0 и 1 и погнали циклом без всяких поисков пробела. »
Буду пробовать.

Загрузило, но без переносов на строку вниз, как это сделать?

DedAlex
04-04-2011, 10:00
Для варианта без пробелов
var
level : array [1..20, 1..20] of integer;
lvl : textfile;
s : string;
i, k : byte;
begin
AssignFile(lvl, 'txt.txt');
Reset(lvl);
begin
for i := 1 to 20 do
begin
ReadLn(lvl, s);
for k := 1 to 20 do
level[k,i] := StrToInt(s[k]);
end;
end;
CloseFile(lvl);
end;

Tweety_yeah
04-04-2011, 10:37
Все отлично, спасибо.

Показывает ошибку: I/O error 104, показывая на строку ReadLn(lvl, s);

Delirium
04-04-2011, 13:49
Tweety_yeah, ну а самому дальше развить идею и подумать? Неужели надо абсолютно все разжевать? :)

Delirium
05-04-2011, 02:06
Эээххх, ну не знаю я Дельфи. Ладно, давай посмотрим, что там происходит...


var
level : array [1..20, 1..20] of integer; -- массив 20 на 20
lvl : textfile; -- наш текстовик
s : string; --строковая переменная, в которой будет текущая строка из файла
i, k : byte; --переменные
begin
AssignFile(lvl, 'txt.txt'); --закинули наш файл в lvl
Reset(lvl); --это не знаю чего.
begin
for i := 1 to 20 do
begin
ReadLn(lvl, s); --Записали строку в S
for k := 1 to 20 do --цикл по строке S
level[k,i] := StrToInt(s[k]); --пишем в массив элемент
end;
end;
CloseFile(lvl);
end;


Таак, погуглил малость. Причина банальна, цитирую:

ты или фаил не создал, или ты его открыл и запускаеш прогу, что вероятней всего!

Tweety_yeah
05-04-2011, 06:27
Проблема найдена, и она совсем не в загрузке файла. Она в моей процедуре прорисовки всего массива.
Всем спасибо, дальше как нибудь сам)

Delirium
05-04-2011, 09:31
ну вот и чудненко :)




© OSzone.net 2001-2012