ADA- otwieranie juz istniejacego pliku

0

oto program ktory ma opcje dopisywania rekordow sortujac, wypisywania wszystkich, oraz wyszukiwania rekordow. Blad objawia sie tym ze jezeli chce otworzyc juz istniejacy plik to program sie konczy... nie mam pojecia dlaczego.. oto kod

[CODE]with ada.text_Io, ada.integer_text_io, ada.direct_io;
use ada.text_Io, ada.integer_text_io;

procedure zad1zaj2 is

n:natural;
wskaznik,nr:integer;

type abonent is record
imie,nazwisko: string(1..40):=(others=>' ');
pesel:string(1..11):=(others=>' ');
telefon_sta,telefon_kom:integer;
end record;

package Pabonent is new ada.direct_io(abonent);
use Pabonent;

plik:Pabonent.File_Type;
nazwa:string(1..50):=(others=>' ');
os,os1,os2:abonent;

  procedure pobierzdane (os: out abonent) is
  
  begin

        put("Podaj imie osoby: ");
        get_line(os.imie,n); skip_line;
        put("Podaj nazwisko osoby: ");
        get_line(os.nazwisko,n);
        put("Podaj pesel osoby: ");
        get_line(os.pesel,n);
        put("Podaj telefon stacjonarny osoby: ");
        get(os.telefon_sta);
        put("Podaj telefon komorkowy osoby: ");
        get(os.telefon_kom);
        skip_line;            
         
     end;
     
     
  procedure wypiszdane (os: in abonent) is

  begin
        put("imie osoby: ");
        put(os.imie); new_line;
        put("nazwisko osoby: ");
        put(os.nazwisko); new_line;
        put("pesel osoby: ");
        put(os.pesel); new_line;
        put("telefon stacjonarny osoby: ");
        put(os.telefon_sta); new_line;
        put("telefon komorkowy osoby: ");
        put(os.telefon_kom); new_line;
         
     end;
     
     
  procedure wyszukiwarka (os2: in abonent ) is

     xxx: ABONENT;
     
  begin

                            
        reset(plik,in_file);
        
        while not end_of_file(plik) loop
           read(plik,xxx);
           
           if os2.nazwisko = xxx.nazwisko and os2.imie=xxx.imie then
              wypiszdane(xxx);
              
           end if;
              
        end loop;
        
   end;  


  procedure pobierz_sortuj (os: out abonent) is

  begin
            pobierzdane(os1);
            
           if size(plik) = 0 then
              reset(plik,out_file);
              write(plik,os1,size(plik)+1);            
           else
              wskaznik:=0;
              reset(plik,in_file);
              
              while not end_of_file(plik) loop
                 read(plik,os);
                 
                 if os1.nazwisko < os.nazwisko then
                    wskaznik:=integer(index(plik));
                    
                    exit;
                   
                 end if;
                    
              end loop;
              
              -- if dla roznych wskaznikow
              
              if wskaznik = 0 then    
                  reset(plik,out_file);
                  write(plik,os1,size(plik)+1);               
                 
                 
              else   
                 
                 for k in reverse (wskaznik-1)..integer(size(plik)) loop
                       reset(plik,in_file);
                       read(plik,os,Pabonent.count(k));
                       
                       reset(plik,out_file);
                       write(plik,os,Pabonent.count(k+1));
                 end loop;
                 
                reset(plik,out_file);
                write(plik,os1,Pabonent.count(wskaznik-1));   
              end if;      
              
           end if;
  end;
  
  
  procedure wypisz (os: out abonent) is
  
  begin
        reset(plik,in_file);
        while not end_of_file(plik) loop
           read(plik,os);
           wypiszdane(os);
           new_line(2);                
        end loop;   
  end;
  

-- KONIEC CZESCI DEKLARACYJNEJ

begin
put("Podaj nazwe pliku na ktorym ma byc wykonana operacja: ");
get_line(nazwa,n);

        open(plik,out_file,nazwa(1..n));
        
        exception when Pabonent.name_error =>
        create(plik,out_file,nazwa(1..n));

     nr:= 0; 
     
     put_line("Prosze wybrac operacje: ");
     put_line("1 zeby dopisac abonenta do ksiazki telefonicznej");
     put_line("2 dla odczytu ksiazki telefonicznej");
     put_line("3 zeby wyszukac osobe w ksiazce telefonicznej");
     get(nr);
     
     
     if nr = 1 then

        pobierz_sortuj(os);
     end if;
        
     if nr = 2 then 
        new_line;
        wypisz(os);
     end if;
     
     if nr = 3 then
      
           Os:=(Telefon_Sta=>0,Telefon_Kom=>0,OTHERS=>(OTHERS=>' ')) ;
           GET_LINE(OS.NAZWISKO,N);
           GET_LINE(OS.imie,N);
           wyszukiwarka(os);
     end if;
     
     reset(plik,in_file);
     close(plik);
      

end zad1zaj2;

[/CODE]

0

Dopiero zaczynam nauke ADY wiec nie jestem w stanie Ci pomoc, ale moze TO Ci pomoze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1