Advertisement
gguuppyy

LAB51bacckunit

Apr 5th, 2024
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.47 KB | None | 0 0
  1. Unit BackUnit;
  2.  
  3. Interface
  4.  
  5. Uses
  6.     SysUtils,
  7.     LinkedListUnit;
  8.  
  9. Type
  10.     ERRORS_CODE = (SUCCESS, INCORRECT_DATA_FILE, A_LOT_OF_DATA_FILE,
  11.         OUT_OF_BORDER, OUT_OF_BORDER_SIZE);
  12.     IntArr = Array Of Integer;
  13.     Matrix = Array Of IntArr;
  14.     TFileStatus = (FsGood, FsNotFound, FsNotTxt, FsNotReadable, FsNotWritable,
  15.         FsEmpty, FsWrongData, FsUnexpected);
  16.     TArrayOfMessages = Array [TFileStatus] Of PWideChar;
  17.  
  18. Const
  19.     DIGITS = ['0' .. '9'];
  20.     VOID = #0;
  21.     BACKSPACE = #8;
  22.     MAX_NUMB = 100000;
  23.     MIN_NUMB = 0;
  24.     MAX_SIZE = 9;
  25.     MIN_SIZE = 1;
  26.     ERRORS: Array [ERRORS_CODE] Of String = ('Успешно',
  27.         'Данные в файле некорректные',
  28.         'В файле неверное количество элементов или стоит лишний пробел',
  29.         'Числа должны быть в диапазоне [0, 100000]',
  30.         'Размер должен быть в диапазоне [1, 6]');
  31.  
  32.     ListOfMessages: TArrayOfMessages = ('Информация записана!',
  33.         'Файл не найден! Повторите ещё раз.',
  34.         'Файл не текстовый! Повторите ещё раз.',
  35.         'Файл не доступен для чтения! Повторите ещё раз.',
  36.         'Файл не доступен для записи! Повторите ещё раз.',
  37.         'Файл пустой! Повторите ещё раз.',
  38.         'Неверные данные в файле! Повторите ещё раз.',
  39.         'Что-то пошло не так. Потворите ещё раз.');
  40.  
  41. Procedure TotalKeyPress(Var Key: Char; SelStart, SelLength: Integer;
  42.     Const MIN, MAX: Integer; Text: String);
  43. Function CountOfSymbolInt(Num: Integer): Integer;
  44. Function InsertKey(Index: Integer; SubStr: Char; SelLen: Integer;
  45.     Text: String): String;
  46. Function CheckFile(FileName: String): TFileStatus;
  47. Function ReadSize(FileName: String; Const NumberOfList: Integer;
  48.     Var FileStatus: TFileStatus): Integer;
  49. Function ReadList(FileName: String; Const SIZE, NumberOfList: Integer;
  50.     Var FileStatus: TFileStatus): ListPointer;
  51.  
  52. Implementation
  53.  
  54. Function InsertKey(Index: Integer; SubStr: Char; SelLen: Integer;
  55.     Text: String): String;
  56. Var
  57.     ResultText: String;
  58. Begin
  59.     ResultText := Text;
  60.     If (SubStr = BACKSPACE) And (SelLen = 0) Then
  61.         Delete(ResultText, Index, 1)
  62.     Else
  63.     Begin
  64.         Delete(ResultText, Index + 1, SelLen);
  65.         If Substr <> BACKSPACE Then
  66.             ResultText.Insert(Index, String(SubStr));
  67.     End;
  68.  
  69.     InsertKey := ResultText;
  70. End;
  71.  
  72. Function CountOfSymbolInt(Num: Integer): Integer;
  73. Var
  74.     NumLen: Integer;
  75. Begin
  76.     NumLen := 0;
  77.     If Num < 0 Then
  78.         Inc(NumLen);
  79.     Repeat
  80.         Inc(NumLen);
  81.         Num := Num Div 10;
  82.     Until (Num = 0);
  83.     CountOfSymbolInt := NumLen;
  84. End;
  85.  
  86. Procedure TotalKeyPress(Var Key: Char; SelStart, SelLength: Integer;
  87.     Const MIN, MAX: Integer; Text: String);
  88. Var
  89.     ResultNum, RBorder, NumLen: Integer;
  90.     Buffer, Output: String;
  91. Begin
  92.     Output := InsertKey(SelStart, Key, SelLength, Text);
  93.     If (Length(Output) <> 0) And (Output <> '-') Then
  94.     Begin
  95.         Try
  96.             ResultNum := StrToInt(Output);
  97.         Except
  98.             Key := VOID;
  99.         End;
  100.         If Key <> VOID Then
  101.         Begin
  102.             NumLen := CountOfSymbolInt(ResultNum);
  103.             If NumLen <> Length(Output) Then
  104.                 Key := VOID;
  105.             If (ResultNum > MAX) Or (ResultNum < MIN) Then
  106.                 Key := VOID;
  107.         End;
  108.     End
  109.     Else
  110.         If (Output = '-') And (MIN >= 0) Then
  111.             Key := VOID;
  112. End;
  113.  
  114. Function IsFileTxt(Var FileName: String): Boolean;
  115. Var
  116.     FileType: String;
  117.     Status: Boolean;
  118. Begin
  119.     FileType := FileName.Substring(FileName.Length - 4);
  120.     If FileType = '.txt' Then
  121.         Status := True
  122.     Else
  123.         Status := False;
  124.     IsFileTxt := Status;
  125. End;
  126.  
  127. Function IsFileReadable(Var FileName: String): Boolean;
  128. Var
  129.     Status: Boolean;
  130.     InFIle: TextFile;
  131. Begin
  132.     Try
  133.         Assign(InFile, FileName);
  134.         Reset(InFile);
  135.         Status := True;
  136.     Except
  137.         Status := False;
  138.     End;
  139.     CloseFile(InFile);
  140.     IsFileReadable := Status;
  141. End;
  142.  
  143. Function IsEmpty(FileName: String): Boolean;
  144. Var
  145.     Status: Boolean;
  146.     InFIle: TextFile;
  147. Begin
  148.     Try
  149.         Assign(InFile, FileName);
  150.         Reset(InFile);
  151.         Status := Eof(InFile);
  152.         CloseFile(InFile);
  153.     Except
  154.     End;
  155.     IsEmpty := Status;
  156. End;
  157.  
  158. Function CheckFile(FileName: String): TFileStatus;
  159. Var
  160.     FileStatus: TFileStatus;
  161. Begin
  162.     If Not FileExists(FileName) Then
  163.         FileStatus := FsNotFound
  164.     Else
  165.         If Not IsFileTxt(FileName) Then
  166.             FileStatus := FsNotTxt
  167.         Else
  168.             If Not IsFileReadable(FileName) Then
  169.                 FileStatus := FsNotReadable
  170.             Else
  171.                 If IsEmpty(FileName) Then
  172.                     FileStatus := FsEmpty
  173.                 Else
  174.                     FileStatus := FsGood;
  175.     CheckFile := FileStatus;
  176. End;
  177.  
  178. Function ReadList(FileName: String; Const SIZE, NumberOfList: Integer;
  179.     Var FileStatus: TFileStatus): ListPointer;
  180. Var
  181.     List: ListPointer;
  182.     I: Integer;
  183.     Num: Integer;
  184.     InFile: TextFile;
  185. Begin
  186.     New(List);
  187.     List^.Next := nil;
  188.     Try
  189.         Assign(InFile, FileName);
  190.         ReSet(InFile);
  191.         If NumberOfList = 2 Then
  192.         Begin
  193.             Readln(InFile);
  194.             Readln(InFile);
  195.         End;
  196.         Readln(InFile);
  197.         For I := 1 To SIZE Do
  198.         Begin
  199.             If EOF(InFile) Then
  200.                 FileStatus := FsWrongData;
  201.             Read(InFile, Num);
  202.             Add(List, Num);
  203.         End;
  204.         CloseFile(InFile);
  205.     Except
  206.         FileStatus := FsUnexpected;
  207.     End;
  208.     ReadList := List;
  209. End;
  210.  
  211. Function ReadSize(FileName: String; Const NumberOfList: Integer;
  212.     Var FileStatus: TFileStatus): Integer;
  213. Var
  214.     Size: Integer;
  215.     InFile: TextFile;
  216. Begin
  217.     Size := 0;
  218.     Try
  219.         Assign(InFile, FileName);
  220.         ReSet(InFile);
  221.         If (NumberOfList = 2) Then
  222.         Begin
  223.             Readln(InFile);
  224.             Readln(InFile);
  225.         End;
  226.         Readln(InFile, Size);
  227.         CloseFile(InFile);
  228.     Except
  229.         FileStatus := FsUnexpected;
  230.     End;
  231.     If Size < 1 Then
  232.         FileStatus := FsWrongData;
  233.     ReadSize := Size;
  234. End;
  235.  
  236. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement