Списки. PASCAL

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
rash
Сообщения: 4
Зарегистрирован: 14 май 2009, 20:08

Возникла проблема вывода списка в файл

Код: Выделить всё

unit workmus;
interface
uses types,crt;

procedure Load_BD;
procedure Show_BD;
procedure Out_BD;

implementation

procedure Load_BD;
var flag,code:integer;
    i,k:byte;
    raz,use:char;
begin
    new(playlist);
    first:=playlist;
    assign(BD,'playlist.bd');
    reset(BD);
    flag:=0;
    i:=0;
    while not(eof(BD)) do
        begin
             i:=0;
             k:=0;
             flag:=0;
             while not(eoln(BD)) do
                 begin
                      inc(i);
                      if flag=0 then
                         begin
                            read(BD,playlist^.Track_name.str[i]);
                                if playlist^.Track_name.str[i]=':' then
                                    begin
                                         flag:=1;
                                         playlist^.Track_Name.dl:=i-1;
                                    end;
                         end
                      else
                         if flag=1 then
                            begin
                                inc(k);
                                read(BD,playlist^.Artist.str[k]);
                                if playlist^.Artist.str[k]=':' then
                                    begin
                                         flag:=2;
                                         playlist^.Artist.dl:=k-1;
                                    end;
                            end
                         else
                             begin
                                  read(BD,use);
                                  val(use,playlist^.used,code);
                             end;
                 end;
             if not eof(BD) then readln(BD);
             new(playlist^.next);
             playlist:=playlist^.next;
        end;
    playlist^.next:=nil;
end;

procedure Show_BD;
var i,k:integer;
begin
     playlist:=first;
     writeln('Плейлист:');
     writeln;
     k:=0;
     while playlist^.next<>nil do
         begin
             for i:=1 to playlist^.Track_name.dl do
                 write(playlist^.Track_name.str[i]);
             write(' - ');
             for i:=1 to playlist^.Artist.dl do
                 write(playlist^.Artist.str[i]);
             inc(k);
             write('  Проигранно ',playlist^.used,' раз');
             writeln;
             playlist:=playlist^.next;
         end;
end;

procedure Out_BD;
var i:integer;
begin
    assign(outBD,'NewBD.bd');
    rewrite(outBD);
    playlist:=first;
    while playlist^.next<>nil do
        begin
             for i:=1 to playlist^.Track_name.dl do
                 write(outBD,playlist^.Track_name.str[i]);
             write(outBD,':');
             for i:=1 to playlist^.Artist.dl do
                 write(outBD,playlist^.Artist.str[i]);
             writeln(outBD,':',playlist^.used);
             playlist:=playlist^.next;
        end;
end;
end.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А какая проблема?
При беглом взгляде видно что файл не закрывается.
Close(outBD) отсутствует.

playlist и first - это глобальные переменные что ли?
rash
Сообщения: 4
Зарегистрирован: 14 май 2009, 20:08

Проблема в том, что в файл записывается не весь список, а только часть
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Ну значит своевременое закрытие файла должно решить проблему.
Используйте Close
rash
Сообщения: 4
Зарегистрирован: 14 май 2009, 20:08

Да, спасибо, помогло
Ответить