Advertisement
Guest User

Untitled

a guest
Mar 24th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.74 KB | None | 0 0
  1.  
  2. // Функция возвращает оценку из строки st(из файла)
  3. // в целочисленном типе
  4. // n- это порядок оценки 1,2,3
  5. function GetMark(st:string; n:integer):integer;
  6. begin
  7.   // сначала удалим из строки всё лишнее и оставим только оценки
  8.   delete(st,1,27);
  9.  
  10.   // теперь нужно извлечь n-ую оценку из строки
  11.   // Более короткий вариант
  12.   // st:=copy(st, 1 + (n-1)*2,2);
  13.  
  14.   //Всё ещё строковое представление!!!
  15.   if n = 1 then st:= copy(st,1,2)   // извлекаем первую оценку
  16.   else if n = 2 then st:= copy(st,3,2) // извлекаем вторую оценку
  17.   else st:= copy(st,5,2); // извлекаем третью оценку
  18.  
  19. // Преобразуем в целое число
  20. GetMark := StrToInt(st);
  21. end;
  22.  
  23. procedure SpecialLoadFromFile(n:integer);
  24. var f: textfile;
  25.     st: string;
  26.     index,i:integer;
  27. begin
  28.   // Сначало очистим Memo1
  29.   Form1.Memo1.Clear;
  30.  
  31.   // Подготовка файла к чению
  32.   AssignFile(f, sf); // sf -глобальная переменная
  33.   Reset(f);
  34.  
  35.   // Чтобы сравнивать строки, нужно чтобы хотябы одна была в Memo
  36.   Readln(f, st);     // Пусть это будет первая строка из файла который мы считываем
  37.   Form1.Memo1.Lines.Add(st);
  38.  
  39.   While not EOF(f) do
  40.     begin
  41.       readln(f, st); // Построчно считываемм строки из файла
  42.  
  43.       // Находим место куда нужно вставить строку
  44.       with Form1.Memo1 do
  45.         begin
  46.           index:=0;
  47.           for i:=0 to Lines.Count-1 do
  48.             if GetMark(st,n) >= GetMark(Lines[i],n) then index:=i+1;
  49.  
  50.           // И вставляем её туда
  51.           Lines.Insert(index, st);
  52.         end;
  53.     end;
  54. closefile(f);
  55. end;
  56.  
  57. // Это твоя функция обрабтчик
  58. procedure TForm1.miSortedPoOcenkeClick(Sender: TObject);
  59. var n:integer;
  60. begin
  61.   n := StrToInt(inputbox('Номера оценки', 'Введити номер оценки для сортировки','1'));
  62.   SpecialLoadFromFile(n);
  63.  
  64.   case MessageDlg('Сортировка прошла успешно'+#13+'Сохранить изменения?', mtConfirmation,[mbYes,mbCancel],0) of
  65.     mrYes: miSaveClick(self);
  66.     mrCancel:;
  67.   end;
  68.  
  69. end;
  70.  
  71. // сразу предлагаю тесты
  72. {
  73. 1 Serebrochkevic RKTEN      5 1 3
  74. 2 Serebrochkevic RKTEN      4 2 3
  75. 3 Serebrochkevic RKTEN      3 3 3
  76. 4 Serebrochkevic RKTEN      2 4 3
  77. 5 Serebrochkevic RKTEN      1 5 3
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement