Advertisement
Vladislav8653

считывание из файлов в стринггрид мое

Feb 25th, 2023
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.93 KB | None | 0 0
  1.  
  2. Function CheckFileDataForXandArr(Num: String): Boolean;
  3. Const
  4.     MAX_LIM = 99999;
  5.     MIN_LIM = -9999;
  6. Var
  7.     NewNum: Integer;
  8.     IsCorrect: Boolean;
  9. Begin
  10.     NewNum := 0;
  11.     IsCorrect := True;
  12.     Num := Trim (Num);
  13.     Try
  14.         NewNum := StrToInt(Num);
  15.     Except
  16.         MessageBox(Form1.Handle, Pchar('Не получилось преобразовать X к целочисленному типу данных. Проверьте корректность данных.'), 'Ошибка', MB_ICONSTOP);
  17.         IsCorrect := False;
  18.     End;
  19.     If(IsCorrect And ((NewNum > MAX_LIM) Or (NewNum < MIN_LIM))) Then
  20.     Begin
  21.         Num := IntToStr(NewNum);
  22.         MessageBox(Form1.Handle, Pchar('X вне разрешенного диапазона! Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  23.         IsCorrect := False;
  24.     End;
  25.     CheckFileDataForXAndArr := IsCorrect;
  26. End;
  27.  
  28. Function CheckFileDataForN(Num: String): Boolean;
  29. Const
  30.     MAX_LIM = 99999;
  31.     MIN_LIM = 2;
  32. Var
  33.     NewNum: Integer;
  34.     IsCorrect: Boolean;
  35. Begin
  36.     NewNum := 0;
  37.     IsCorrect := True;
  38.     Num := Trim (Num);
  39.     Try
  40.         NewNum := StrToInt(Num);
  41.     Except
  42.         MessageBox(Form1.Handle, Pchar('Не получилось преобразовать N к целочисленному типу данных. Проверьте корректность данных.'), 'Ошибка', MB_ICONSTOP);
  43.         IsCorrect := False;
  44.     End;
  45.     If(IsCorrect And ((NewNum > MAX_LIM) Or (NewNum < MIN_LIM))) Then
  46.     Begin
  47.         Num := IntToStr(NewNum);
  48.         MessageBox(Form1.Handle, Pchar('N вне разрешенного диапазона! Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  49.         IsCorrect := False;
  50.     End;
  51.     CheckFileDataForN := IsCorrect;
  52. End;
  53.  
  54.  
  55. Function Open (): String;
  56. Begin
  57.     With Form1 Do
  58.     Begin
  59.         If OpenDialog1.Execute Then
  60.         Begin
  61.             Path := OpenDialog1.FileName;
  62.             IsFileOpen := True;
  63.         End
  64.         Else
  65.             IsFileOpen := False;
  66.     End;
  67.     Open := Path;
  68. End;
  69.  
  70. Function TakeDataFromFile1(Number1: String; Var FileOutput: TextFile): String;
  71. Var            // x
  72.     IsRight: Boolean;
  73. Begin
  74.     IsRight := True;
  75.     Try
  76.         Readln(FileOutput, Number1);
  77.         Number1 := Trim (Number1);
  78.         IsRight := CheckFileDataForXAndArr(Number1);
  79.     Except
  80.     End;
  81.     If(Not(IsRight)) Then
  82.         TakeDataFromFile1 := ''
  83.     Else
  84.         TakeDataFromFile1 := Number1;
  85. End;
  86.  
  87. Function TakeDataFromFile2(Number2: String; Var FileOutput: TextFile): String;
  88. Var               //N
  89.     IsRight : Boolean;
  90. Begin
  91.     IsRight := True;
  92.     Try
  93.         Readln(FileOutput, Number2);
  94.         Number2 := Trim (Number2);
  95.         IsRight := CheckFileDataForN(Number2);
  96.     Except
  97.     End;
  98.     If(Not(IsRight)) Then
  99.         TakeDataFromFile2 := ''
  100.     Else
  101.         TakeDataFromFile2 := Number2;
  102. End;
  103.  
  104. type
  105.     TArray = Array of Integer;
  106.     TStr = Array of String[5];
  107.  
  108. function SeparateString (Str : String) : TStr;
  109. Var
  110.     StrArr : TStr;
  111.     I, K : Integer;
  112.     Flag : Boolean;
  113. Begin
  114.     K := 0;
  115.     SetLength(StrArr, (Str.Length div 2) + 1);
  116.     For I := 0 To Str.Length div 2 do
  117.         StrArr[i] := '';
  118.     I := 1;
  119.     While I <= Str.Length Do
  120.     begin
  121.         Flag := true;
  122.         While (Str[I] <> ' ') and (I <= Str.Length) Do
  123.         Begin
  124.             StrArr[K] := StrArr[K] + Str[I];
  125.             Inc(I);
  126.             Flag := False;
  127.         End;
  128.         If Not(Flag) then
  129.             Inc(K);
  130.         If Flag then
  131.             Inc(I);
  132.     end;
  133.     I := 1;
  134.     K := 0;
  135.     While Str[I] <> '' Do
  136.     Begin
  137.         If Str[I] = ' ' then
  138.             Inc(K);
  139.         Inc(I);
  140.     End;
  141.     SetLength(StrArr, K + 1);
  142.     Result := StrArr;
  143. End;
  144.  
  145.  
  146. function ConvertStringToArray (StringGridColCount : Integer; Var FileOutput: TextFile) : TArray;
  147. Var
  148.     I, K : Integer;
  149.     Arr : TArray;
  150.     Str : String;
  151.     StrArr : TStr;
  152. Const
  153.     MIN = -9999;
  154.     MAX = 99999;
  155. Begin
  156.     Readln(FileOutput, Str);
  157.     SetLength(Arr, StringGridColCount);
  158.     for I := Low(Arr) to High(Arr) do
  159.         Arr[I] := 0;
  160.     Str := Trim(Str);
  161.     StrArr := SeparateString (Str);
  162.     If (High(StrArr) + 1 <> StringGridColCount) then
  163.     begin
  164.         SetLength (Arr, 1);
  165.         Arr[0] := BAD;
  166.         MessageBox(Form1.Handle, Pchar('Количество элементов массива не совпадает с заявленным. Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  167.         ConvertStringToArray := Arr;
  168.         Exit
  169.     end;
  170.     try
  171.         For I := Low(Arr) to High(Arr) do
  172.             Arr[I] := StrToInt (StrArr[I]);
  173.     except
  174.         SetLength (Arr, 1);
  175.         Arr[0] := BAD;
  176.         MessageBox(Form1.Handle, Pchar('Не удалось преобразовать исходные данные в целочисленный тип. Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  177.         ConvertStringToArray := Arr;
  178.         Exit
  179.     end;
  180.     For I := Low(Arr) to High(Arr) do
  181.         If (Arr[I] > MAX) or (Arr[I] < MIN) then
  182.         begin
  183.             SetLength (Arr, 1);
  184.             Arr[0] := BAD;
  185.             MessageBox(Form1.Handle, Pchar('Исходные данные выходят за границы допустимых. Проверьте исходные данные.'), 'Ошибка', MB_ICONSTOP);
  186.             ConvertStringToArray := Arr;
  187.         end;
  188.     ConvertStringToArray := Arr;
  189. End;
  190.  
  191.  
  192.  
  193.  
  194.  
  195. procedure TForm1.N2Click(Sender: TObject);
  196. Var
  197.     FileInput: TextFile;
  198.     Num, I: Integer;
  199.     Str1, Str2 : String;
  200.     Arr : TArray;
  201. begin
  202.     Num := 0;
  203.     Path := Open;
  204.     AssignFile(FileInput, Path);
  205.     Reset(FileInput);
  206.     If(IsFileOpen) Then
  207.     Begin
  208.         Str1 := TakeDataFromFile1(IntToStr(Num), FileInput);
  209.         if Str1 <> '' then
  210.             Str2 := TakeDataFromFile2(IntToStr(Num), FileInput);
  211.     End;
  212.     if Not((Str1 = '') or (Str2 = '')) then
  213.     Begin
  214.         Edit1.Text := Str1;
  215.         Edit2.Text := Str2;
  216.     End
  217.     Else
  218.     Begin
  219.         Edit1.Text := #0;
  220.         Edit2.Text := #0;
  221.     End;
  222.     if (Str1 <> '') and (Str2 <> '') then
  223.         Begin
  224.             Arr := ConvertStringToArray(StrToInt(Str2), FileInput);
  225.             if (Arr[0] <> BAD) then
  226.             Begin
  227.                 for I := Low(Arr) to High(Arr) do
  228.                 Begin
  229.                     StringGrid1.Cells[I, 0] := IntToStr(Arr[I]);
  230.                     Button1.Enabled := true;
  231.                 End;
  232.             End
  233.             else
  234.             Begin
  235.                 for I := Low(Arr) to StrToInt(Str2) - 1 do
  236.                 Begin
  237.                     StringGrid1.Cells[I, 0] := '';
  238.                 End;
  239.                  Edit1.Text := '';
  240.                  Edit2.Text := '';
  241.             End;
  242.  
  243.         End;
  244.     CloseFile(FileInput);
  245. end;
  246.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement