[PASCAL]Zapisywanie w pliku .txt zmiennych


(K Ilak) #1

Witam!

Chciałem zrobić program, który zapisywał by do pliku *.txt dane wpisane przez użytkownika, a później je czytał, oto kodu procedury czytającej i wpisującej:

procedure OTWORZ;

begin

assign (dane, 'notatnik.txt');

writeln ('NOTATNIK':40);

reset (dane);

REPEAT

read (dane, a);

write (a);

UNTIL EOF (dane);

close (dane);

delay (3000);

assign (dane, 'notatnik.txt');

append (dane);

readln (tekst);

writeln (dane, tekst);

end;

Cały problem w tym, że nie zapisuje nic w tym txt :confused: :confused: :confused:

proszę o pomoc [-o<


(Ryan) #2

Kilka uwag.

  • wcinaj kod i dziel bloki logiczne, inaczej kod jest nieczytelny

  • kiedy dzielisz się kodem, dziel się całością - ludzie mają zgadywać jak zdefiniowałeś dane, a, tekst?

  • jeśli to procedura, to dlaczego masz wszystkie lokalne zmienne zdefiniowane globalnie?

  • procedura nie powinna robić kilku niezwiązanych ze sobą rzeczy (tutaj: wyświetlanie, czekanie, zapis)

Zakładając, że kolejne dane są w oddzielnych liniach, zmienna dane jest typu text a zarówno a jak i tekst są typu string, pierwszą rzeczą, którą powinieneś poprawić jest zamiana Read na ReadLn. Druga rzecz: nie zamykasz na koniec pliku (close(dane)). W Twoim wypadku (mało danych do zapisania) dane trafią do pliku dopiero kiedy zamkniesz plik (co powinno nastąpić automatycznie po zakończeniu działania programu) z powodu CC (cache managera).

Gdybym musiał, zbudowałbym kod mniej więcej tak (nie miałem możliwości skompilować, ale powinien być poprawny):

procedure PokazWpisy(NazwaPliku: String);

var

  Dane: Text;

  Tekst: String;

begin

  { Wyswietl na ekranie wpisy z pliku }

  Assign(Dane, NazwaPliku);

  Reset(Dane);

  WriteLn('NOTATNIK':40);

  repeat

    ReadLn(Dane, Tekst);

    WriteLn(Tekst);

  until EOF(Dane);

  Close(Dane);

end;


procedure DodajWpis(NazwaPliku: String);

var

  Dane: Text;

  Tekst: String;

begin

  { Dodaj do pliku jeden wpis }

  Assign(Dane, NazwaPliku);

  Append(Dane);

  WriteLn('Nowy wpis:');

  ReadLn(Tekst);

  WriteLn(Dane, Tekst);

  Close(Dane);

end;


procedure ZrobCos;

const

  NazwaPliku = 'notatnik.txt';

begin

  WriteLn('---------------------------------------');


  PokazWpisy(NazwaPliku);


  WriteLn('---------------------------------------');

  Delay(3000);


  DodajWpis(NazwaPliku);


  WriteLn('---------------------------------------');

  Delay(3000);


  PokazWpisy(NazwaPliku);


  WriteLn('---------------------------------------');

end;