Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Прямая загрузка файла в массив (http://forum.oszone.net/showthread.php?t=203855)

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", как то так.

Delirium 04-04-2011 07:48 1650512

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

Tweety_yeah 04-04-2011 07:49 1650513

Цитата:

Цитата Delirium
Открываем файл, удаляем все пробелы, ибо там одни 0 и 1 и погнали циклом без всяких поисков пробела. »

Буду пробовать.

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

DedAlex 04-04-2011 10:00 1650575

Для варианта без пробелов
Код:

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, показывая на строку
Код:

ReadLn(lvl, s);

Delirium 04-04-2011 13:49 1650744

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

Delirium 05-04-2011 02:06 1651230

Эээххх, ну не знаю я Дельфи. Ладно, давай посмотрим, что там происходит...

Код:

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

Проблема найдена, и она совсем не в загрузке файла. Она в моей процедуре прорисовки всего массива.
Всем спасибо, дальше как нибудь сам)

Delirium 05-04-2011 09:31 1651325

ну вот и чудненко :)


Время: 17:46.

Время: 17:46.
© OSzone.net 2001-