Błąd podczas zapisu danych do pliku

0

Tak więc zacznę od początku : jestem w klasie I gimnazjum i interesuję się programowaniem zacząłem się uczyć Pascala ponieważ właśnie na tym języku operować będziemy na zajęciach. W internecie przerabiałem kilka kursów Pascala. W tym na koniec trzeba było napisać program który ma ułatwiać pracę w bibliotece. Wszystko działało mi poprawnie dopóki nie zacząłem z automatycznym zapisywaniem i odczytywaniem. Odczyt i sprawdzenie czy plik istnieje działa ale przy zapisie mam problem : program wywala błąd runtime error 5 nie wiem jak sobie z nim poradzić w jednym miejscu dałem radę ale teraz nie wiem co mam robić więc piszę tutaj. Poniżej zamieszczam procedurę odpowiedzialną za zapis do pliku

procedure zapisz;

var

 i : integer;

begin
i := 1;
 assign(f, 'D:\biblioteka.txt'); //tu wywala mi blad
  rewrite(f);
  writeln(f, ilosc);
  repeat
   inc(i);
    writeln(f, t[i].tytul);
    writeln(f, t[i].autor);
    writeln(f, t[i].wyporzyczajacy);
    writeln(f, t[i].wyporzyczen);
  until i = ilosc;
 close(f);
end;

Dodam że mam nadzieję że nie macie nic przeciwko mojemu stylowi pisania ale tak piszę i dla mnie ten kod jest klarowny. Mam nadzieję że szybko otrzymam odpowiedź.

dodanie znacznika <code class="pascal"> - fp

0

A przeczytałeś co kompilator pisze?
Nadal nie rozumiesz?
Gdzie masz tą f zadeklarowaną?

0

1edb1eea71.png

na zdjęciu masz to co wywala mi kompilator tylko to widzę a "f" mam zadeklarowane na początku programu ale zadeklarowałem tę zmienną też tu i nadal to samo (zadeklarowanie f widac na zdjęciu)

0

Masz bana na google czy nie jesteś w stanie przepisać 'exitcode 5` ?
http://community.freepascal.org/bboards/message?message_id=248899&forum_id=24092

0

Z twojego linku wynika tylko że mam zmienić filemode pliku tylko o to chodzi że nie wiem bo na google już sprawdziłem a tu nie ma żadnego przykładowego rozwiązania ja wiem co to jest exitcode 5 na tej stronie jest cała lista (przynajmniej ja z niej korzystam) : http://www.pascal.eu.org/runerror.htm ale tu też nic nie ma ap ropo rozwiązania a ja się pytam tylko i wyłącznie o rozwiązanie lub o to w czym jest błąd bo tak po prostu nie wystąpi sobie błąd jest jakiś powód ale ja nie wiem jaki. Reasumują proszę o pomoc...

0

Zacznijmy od tego, że musisz nam wkleić poprawny kod - w swoim pierwszym poście masz inny, na screenshocie jest inny...
Em, + pobierz Lazarusa.

0

Ten pierwszy różni się tylko deklaracją jednej zmiennej ale masz tu ten drugi:

procedure zapisz;

var

 i : integer;
 f : text;

begin
i := 1;
 assign(f, 'D:\biblioteka.txt'); // tu wywala mi blad
  rewrite(f);
  writeln(f, ilosc);
  repeat
   inc(i);
    writeln(f, t[i].tytul);
    writeln(f, t[i].autor);
    writeln(f, t[i].wyporzyczajacy);
    writeln(f, t[i].wyporzyczen);
  until i = ilosc;
 close(f);
end;

jeśli chcesz to mogę zamieścić cały kod ale to raczej nie potrzebne jak co to napisz

dodanie znacznika <code class="pascal"> - fp

0

ilosc to zmienna globalna lub jakaś stała, jak rozumiem?

0

Tak jest to ilość książek w systemie zapisana jako zmienna globalna.

0

A co na to debugger?

PS *wypożyczać, to aż boli...
PPS beznadziejne nazewnictwo zmiennych
PPPS ten program powinien być napisany obiektowo (i coś w tym jest, skoro można to stwierdzić po jednym fragmencie kodu...)

0

231456cc0c.png
f34de52b57.png

tylko to mi pokazuje kochany debugger

0

Błąd nr 5 to File access denied.
Pewnie nie masz uprawnień do zapisu w podanej ścieżce.

0

Miałem na myśli: step-puj kod linijka po linijce i sprawdzaj, czy aby np.nie wychodzisz poza zakres tablicy, czy wszystkie zmienne są zainicjowane etc.

0

6fccbf1dd9.png

0
Patryk27 napisał(a):

Miałem na myśli: step-puj kod linijka po linijce i sprawdzaj, czy aby np.nie wychodzisz poza zakres tablicy, czy wszystkie zmienne są zainicjowane etc.

Zrobiłem tak i tylko w tym miejscu mam błąd i tylko ten a tablica ma 750 miejsc a ja mam zajęte tylko 2

0

Well then, pewnie nie masz praw dostępu do pliku (jak powiedział @Azarien).
UAC włączone?

0

Nie włączałem chyba że domyślnie jest włączone

0

@programmer - przestań w kółko wrzucać zrzuty ekranu, zamiast półmegowych obrazów wklejaj treść błędu; Po drugie wstawiaj kod w znaczniki kolorujące składnię - dla Pascala są to <code class="pascal">kod</code>;

Po trzecie - wątki dotyczące podstaw zakładaj w dziale Newbie; Po czwarte - tytuł wątku powinien w sposób sensowny opisywać Twój problem; Następne wątki z tytułem przeznaczonym do upakowania słów kluczowych wylądują w koszu.

0

A z innej beczki na początku ustawiasz wartość zmiennej i na 1, później na początku pętli masz Inc(i) czyli już w pierwszym obiegu pętli i = 2 nie wiem jak masz indeksowaną tą tablicę ale wydaje mi się że tu jest coś nie tak.

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