Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.12.2010, 16:19
Yreng Yreng вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 8
Репутация: 10
По умолчанию обработка текстовых файлов

Здраствуйте. Нужна помощь
Вот условие задачи:
"Из двух типизированных файлов с компонентами записей
type
Stud = record
Year: Integer;
Name: String[20];
end;

получить текстовый файл, в котором объединены эти два файла, но повторяющихся записей быть не должно. в каждом из файлов по отдельности повторяющихся записей нет. а если вместе то могут быть.
отсортировать результирующий файл по убыванию года.
вывести на экран исходные файлы, результирующий файл."
пример:
1 файл
Alexander 1989
Masha 1983

2 файл
Misha 1932
Gera 1902
Masha 1983

результирующий файл:
Alexander 1989
Masha 1983
Misha 1932
Gera 1902

Бьюсь над этой прогой уже довольно долго, получаю всевозможные ошибки.
Через минут 5 выложу свой код, но он не правильно работает(поясню почему).
Пожалуйста если есть возможность напишите эту программу, по примеру я всё пойму.
(через 5 минут своё выложу)
Ответить с цитированием
  #2  
Старый 13.12.2010, 17:51
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Код:
var
  f: file of Stud;
  i, j, n, k: integer;
  a1, a2: array of Stud;
  t: Stud;

begin
  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.
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #3  
Старый 13.12.2010, 20:32
Yreng Yreng вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 8
Репутация: 10
По умолчанию

файл 1
alexander1992
masha1992
или
alexander 1992
masha 1992
пробовал итак и так
файл 2
alexander1992
petr1982
bora1711
и с пробелами пробовал.
результат на экране :
1919902218 lexander1992
petr19
Ready
результат в файле
(*)lexander1992
petr19
bor
(заместо * там стоит странный значёк)
Явно видно, что программа работает не верно.
обрезаются имена, выводятся странные цифры и значки.
Ответить с цитированием
  #4  
Старый 13.12.2010, 20:38
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Цитата:
Из двух типизированных файлов с компонентами записей
type
Stud = record
Year: Integer;
Name: String[20];
end;

Ну дык ты же щас приводишь просто список имен и годов, это не типизированный.

__________________
Меня греют ваши плюсы к моей репутации...

Последний раз редактировалось BoRoV, 13.12.2010 в 20:46.
Ответить с цитированием
  #5  
Старый 13.12.2010, 20:43
Yreng Yreng вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 8
Репутация: 10
По умолчанию

типизированный, это когда все переменные байтовые ?
что-то я не очень понял как он задаётся. в самом компиляторе создаётся?
(у нас этой темы не было на лекциях, поэтому я так фейлю, пытаюсь гуглить, но там только про байты говорят, а примера нет)
Ответить с цитированием
  #6  
Старый 13.12.2010, 20:47
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Цитата:
Сообщение от Yreng
типизированный, это когда все переменные байтовые ?
что-то я не очень понял как он задаётся. в самом компиляторе создаётся?
(у нас этой темы не было на лекциях, поэтому я так фейлю, пытаюсь гуглить, но там только про байты говорят, а примера нет)


Код:
var
  f: file of Stud;
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025