теперь я понял свою ошибку(я файл в ворд паде создавал, а надо было через программу). потренировался, всё ок.
только одна проблема. я взял вашу программу и дополнил её вводом этих файлов (file1.dat и file2.dat), на экране всё работает правильно, а когда открываю file.dat , то там неразбериха, странные символы и т.д. Это как-то можно испрвить или это из-за того, что файл не txt, поэтому в него так записывается?
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Stud = record
Year: Integer;
Name: String[20];
end;
var
f: file of Stud;
i, j, n, k: integer;
a1, a2: array of Stud;
t: Stud;
res: char;
begin
AssignFile(f, 'C:\file1.dat');
Reset(F);
repeat
Write('Name: ');
ReadLn(t.Name);
Write('Year: ');
ReadLn(t.Year);
Write('res: ');
Write(F, T);
ReadLn(Res);
until (res = 'n');
Closefile(F);
AssignFile(f, 'C:\file2.dat');
Reset(F);
repeat
Write('Name: ');
ReadLn(t.Name);
Write('Year: ');
ReadLn(t.Year);
Write('res: ');
Write(F, T);
ReadLn(Res);
until (res = 'n');
CloseFile(F);
AssignFile(f, 'C:\file1.dat');
Reset(f);
i := 0;
while not eof(f) do
begin
SetLength(a1, i + 1);
Read(f, a1[i]);
inc(i);
end;
CloseFile(f);
AssignFile(f, 'C:\file2.dat');
Reset(f);
n := 0;
while not eof(f) do
begin
SetLength(a2, n + 1);
Read(f, a2[n]);
inc(n);
end;
CloseFile(f);
j := i;
dec(n);
while n >= 0 do
begin
k := i - 1;
while k >= 0 do
begin
if (a1[k].Name = a2[n].Name) and (a1[k].Year = a2[n].Year) then
break;
dec(k);
end;
if k = -1 then
begin
SetLength(a1, j + 1);
a1[j].Year := a2[n].Year;
a1[j].Name := a2[n].Name;
inc(j);
end;
dec(n);
end;
// Sorting
for i := 0 to j - 2 do
begin
for n := i + 1 to j - 1 do
if (a1[i].Year > a1[n].Year) then
begin
t.Year := a1[i].Year;
t.Name := a1[i].Name;
a1[i].Year := a1[n].Year;
a1[i].Name := a1[n].Name;
a1[n].Year := t.Year;
a1[n].Name := t.Name;
end;
end;
AssignFile(f, 'C:\file.dat');
Rewrite(f);
for i := 0 to j - 1 do
begin
Write(f, a1[i]);
Writeln(a1[i].Year, ' ', a1[i].Name);
end;
CloseFile(f);
Writeln('Ready');
Readln;
end.