Baza danych i zapisywanie danych .txt

0

Czy mógł by mi ktoś pokazać jak mam zmodyfikować kod by dane każdej osoby zapisywały się w pliku .txt
Chciał bym byście przy okazji opisali każda użyta linijkę to co przesyłam to wszystko rozumiem.

 Uses Crt;

 Type czlowiek = record
   imie          : string[10];
   nazwisko      : string[20];
   wiek          : integer;
   rokurodzenia  : string[10];
   end;

  Var
 Osoba   : czlowiek;
 t       : array [1..255] of czlowiek;
 i,u,o,n : integer;

Begin
 clrscr;
  Writeln('O ilu osobach chcesz wprowadzić dane ?');
  readln(o);
  n:=0;
  clrscr;
  For i:=1 to o do
   with t[i] do
  Begin
  inc(n);
  Write('Uczen    ');
  Textcolor(red);
  Writeln('nr.',n);
  Textcolor(white);
  Writeln;
  Writeln('Podaj imie');
  readln(imie);
  Writeln('Podaj naywisko');
  readln(nazwisko);
  Writeln('Podaj wiek');
  readln(wiek);
  Writeln('Podaj date urodzenia');
  Writeln('dd.mm.rrrr');
  Readln(rokurodzenia);
  clrscr;
  end;

  clrscr;

  Writeln('Ktorej osoby dane chcesz zobaczyc ?');
  Readln(u);
  clrscr;


    Begin
        Write('Osoba   ');
        Textcolor(red);
        Writeln('nr.',u);
        Textcolor(White);
	Writeln('Imie     : ',t[u].imie);
	Writeln('Nazwisko : ',t[u].nazwisko);
	Writeln('Wiek     : ',t[u].wiek,' Lat');
           Writeln('Urodzony : ',t[u].rokurodzenia,'r.');
          End;



readln;
end.
0

Pascal / Delphi TextFile + google i jazda, czytasz, kombinujesz i robisz sam, bo nie wiem jak Ci pomóc inaczej. Gotowce od olesia się niestety skończyły, bo ile można. Poza tym ludzie później nie odpisują nawet jak kod jest ok, a i nie uczą się samodzielności tylko użycia gotowca. Poza tym nie wiem jak chcesz zapisywać te dane. Każde pole w osobnej linijce czy jak? Ja bym raczej polecał plik typowany. Coś w stylu jak poniżej do zapisywania stringów bez ogranicznia ich długości.

program example2;

{$APPTYPE CONSOLE}

const
  MaxCnt = 6;
  AFileName = 'D:\test_2.bin';
  TxtArr : array[1..MaxCnt] of string = ('ucz', 'sie', 'podstaw', 'i', 'kombinuj', 'sam.');
var
  S : string;
  AFile : File of Byte;
  I, TxtLength, RecCnt : integer;
  DataArr : array[1..MaxCnt] of string;
begin
  for I := Low(DataArr) to High(DataArr) do
    DataArr[I] := TxtArr[I];
  // Zapis
  RecCnt := Length(DataArr);
  Assign(AFile, AFileName);
  Rewrite(AFile);
  BlockWrite(AFile, RecCnt, SizeOf(RecCnt));
  for I := Low(DataArr) to High(DataArr) do
  begin
    TxtLength := Length(DataArr[I]);
    BlockWrite(AFile, TxtLength, SizeOf(TxtLength));
    BlockWrite(AFile, DataArr[I][1], TxtLength);
  end;
  Close(AFile);
  // Odczyt
  Assign(AFile, AFileName);
  Reset(AFile);
  BlockRead(AFile, RecCnt, SizeOf(RecCnt));
  for I := 1 to RecCnt do
  begin
    BlockRead(AFile, TxtLength, SizeOf(TxtLength));
    SetLength(S, TxtLength);
    BlockRead(AFile, S[1], TxtLength);
    Writeln(S);
  end;
  Close(AFile);
  Readln;
end.
0

No cimak Ci podał konkret, ja dodam tylko jeszcze, że sugerując się teraz jego tekstem podałem bardziej zapis do pliku binarnego niż typowanego, bo po co ograniczać sobie długośc pól jak mozna "zmarnowac" tylko cztery bajty (dla typu integer) lub dwa bajty (dla typo Word) i zapisać w nich długośc stringa. Dla prostych programó nawet Word wystarczy, bo czy ktoś ma nazwisko dłuższe niż 65535 znaków? Na pewno nie. Poniżej masz za to przykład jak zapisac inny typ jak integer i go pokazać, byś nie pisał że tylko string. Mając od nas tyle informacji spokojnie reszte ogarniesz sam. Oto przykład bardziej typowanego pliku z ograniczonym polem string do 20 znaków, coś jak u Ciebie w oryginalnym kodzie. Jest to właśnie typowany plik, jednak szczerze polecam zapis do pliku binarnego, gdzie można sobie przechować bardzo długie stringi, zapisując oraz odczytując ich długość.

program example1;

{$APPTYPE CONSOLE}

type
  TRec = record
    Cnt : Byte;
    Txt : string[20];
  end;
const
  AFileName = 'D:\test.bin';
  TxtArr : array[1..2] of string = ('raz', 'dwa');
var
  I : integer;
  AFile : file of TRec;
  DataArr : array[1..2] of TRec;
begin
  for I := Low(DataArr) to High(DataArr) do
  begin
    with DataArr[I] do
    begin
      Cnt := I;
      Txt := TxtArr[I];
    end;
  end;
  // Zapis
  Assign(AFile, AFileName);
  Rewrite(AFile);
  for I := Low(DataArr) to High(DataArr) do
    Write(AFile, DataArr[I]);
  Close(AFile);
  // Odczyt
  Assign(AFile, AFileName);
  Reset(AFile);
  for I := Low(DataArr) to High(DataArr) do
  begin
    Writeln('Rekord numer: ', I);
    with DataArr[I] do
    begin
      Writeln('Pole Cnt: ', I);
      Writeln('Pole Txt: ', Txt);
    end;
  end;
  Writeln('Rozmiar pliku (ilosc rekordow): ', FileSize(AFile));
  Close(AFile);
  Readln;
end.

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