 |
|
Tweety_yeah |
04-04-2011 07:41 1650510 |
Прямая загрузка файла в массив
Есть файл вида:
Код:
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", как то так.
|
Открываем файл, удаляем все пробелы, ибо там одни 0 и 1 и погнали циклом без всяких поисков пробела.
|
Tweety_yeah |
04-04-2011 07:49 1650513 |
Цитата:
Цитата Delirium
Открываем файл, удаляем все пробелы, ибо там одни 0 и 1 и погнали циклом без всяких поисков пробела. »
|
Буду пробовать.
Загрузило, но без переносов на строку вниз, как это сделать?
|
Для варианта без пробелов
Код:
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 1650598 |
Все отлично, спасибо.
Показывает ошибку: I/O error 104, показывая на строку
|
Tweety_yeah, ну а самому дальше развить идею и подумать? Неужели надо абсолютно все разжевать? :)
|
Эээххх, ну не знаю я Дельфи. Ладно, давай посмотрим, что там происходит...
Код:
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 1651263 |
Проблема найдена, и она совсем не в загрузке файла. Она в моей процедуре прорисовки всего массива.
Всем спасибо, дальше как нибудь сам)
|
Время: 17:46.
© OSzone.net 2001-