Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Lab32;
- Uses
- SysUtils;
- Const
- MIN_C = 1;
- MAX_C = 2;
- MIN_LENGTH = 1;
- MAX_LENGTH = 100;
- Type
- TSet = Set Of Char;
- Function InputChoice(Const MIN, MAX: Integer): Integer;
- Var
- N: Integer;
- IsCorrect: Boolean;
- Begin
- N := 0;
- Repeat
- IsCorrect := True;
- WriteLn('Введите значение: ');
- Try
- ReadLn(N);
- Except
- IsCorrect := False;
- WriteLn('Некорректный ввод.');
- End;
- If IsCorrect And ((N < MIN) Or (N > MAX)) Then
- Begin
- WriteLn('Введите корректное значение.');
- IsCorrect := False;
- End;
- Until IsCorrect;
- InputChoice := N;
- End;
- Function IsFileExists(Const FileName: String): Boolean;
- Begin
- IsFileExists := FileExists(FileName);
- If Not FileExists(FileName) Then
- WriteLn('Файл не существует.');
- End;
- Function IsFileTxt(Const FileName: String): Boolean;
- Begin
- IsFileTxt := False;
- If Length(FileName) >= 4 Then
- Begin
- If (FileName[Length(FileName) - 3] = 't') And (FileName[Length(FileName) - 2] = 'x') And (FileName[Length(FileName) - 1] = 't') And
- (FileName[Length(FileName)] = '.') Then
- Begin
- IsFileTxt := True;
- End
- Else
- Begin
- WriteLn('Файл не является текстовым. ');
- End;
- End;
- End;
- Function IsFileNotEmpty(Var MyFile: TextFile): Boolean;
- Var
- IsNotEmpty: Boolean;
- Begin
- Try
- Try
- Reset(MyFile);
- IsNotEmpty := Not Eof(MyFile);
- If (Not IsNotEmpty) Then
- WriteLn('Этот файл пустой. ');
- Except
- WriteLn('Непредвиденная ошибка.');
- IsNotEmpty := False;
- End;
- Finally
- CloseFile(MyFile);
- End;
- IsFileNotEmpty := IsNotEmpty;
- End;
- Function IsFileWritable(Var MyFile: TextFile): Boolean;
- Begin
- IsFileWritable := True;
- Try
- Rewrite(MyFile);
- Except
- IsFileWritable := False;
- WriteLn('Этот файл невозможно открыть для записи.');
- End;
- End;
- Function IsFileReadable(Var MyFile: TextFile): Boolean;
- Begin
- IsFileReadable := True;
- Try
- Reset(MyFile);
- Except
- IsFileReadable := False;
- WriteLn('Этот файл невозможно открыть для чтения.');
- End;
- End;
- Function RequestFileNameForReading(Var MyFile: TextFile): String;
- Var
- FileName: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- WriteLn('Введите имя файла с путём:');
- ReadLn(FileName);
- AssignFile(MyFile, FileName);
- IsCorrect := IsFileExists(FileName) And IsFileTxt(FileName) And IsFileReadable(MyFile) And IsFileNotEmpty(MyFile);
- Until IsCorrect;
- RequestFileNameForReading := FileName;
- End;
- Function RequestFileNameForWriting(Var MyFile: TextFile): String;
- Var
- FileName: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- WriteLn('Введите имя файла с путём: ');
- ReadLn(FileName);
- AssignFile(MyFile, FileName);
- IsCorrect := IsFileExists(FileName) And IsFileTxt(FileName) And IsFileWritable(MyFile);
- Until IsCorrect;
- RequestFileNameForWriting := FileName;
- End;
- Function InputSequenceFromConsole: String;
- Var
- Sequence: String;
- IsCorrect: Boolean;
- Begin
- Sequence := '';
- Repeat
- IsCorrect := True;
- WriteLn('Введите строку: ');
- Try
- ReadLn(Sequence);
- Except
- IsCorrect := False;
- WriteLn('Некорректный ввод.');
- End;
- If IsCorrect And ((Length(Sequence) < MIN_LENGTH) Or (Length(Sequence) > MAX_LENGTH)) Then
- Begin
- IsCorrect := False;
- WriteLn('Длина строки выходит за допустимый диапазон.');
- End;
- Until IsCorrect;
- InputSequenceFromConsole := Sequence;
- End;
- Function InputSequenceFromFile(Var Sequence: String; Var MyFile: TextFile): Boolean;
- Var
- IsCorrect: Boolean;
- Begin
- IsCorrect := True;
- Sequence := '';
- Try
- Try
- ReadLn(MyFile, Sequence);
- Except
- Writeln('Проверьте корректность строки.');
- IsCorrect := False;
- End;
- If IsCorrect And ((Length(Sequence) < MIN_LENGTH) Or (Length(Sequence) > MAX_LENGTH)) Then
- Begin
- WriteLn('Длина строки выходит за диапазон допустимых значений.');
- IsCorrect := False;
- End;
- Finally
- CloseFile(MyFile);
- End;
- InputSequenceFromFile := IsCorrect;
- End;
- Procedure FindSymbols(Const Sequence: String; Var FinalSet: TSet);
- Var
- I: Integer;
- Symbols: Set Of Char;
- Begin
- Symbols := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', ';', ':', '!', '?', '(', ')', '[', ']', '{', '}', '+', '-', '=',
- '*', '/'];
- For I := 1 To Length(Sequence) Do
- Begin
- If (Sequence[I] In Symbols) Then
- Begin
- Include(FinalSet, AnsiChar(Sequence[I]));
- End;
- End;
- End;
- Procedure PrintToConsole(Const FinalSet: TSet);
- Var
- Ch: Char;
- Begin
- For Ch In FinalSet Do
- Begin
- Write(Ch);
- End;
- End;
- Function PrintToFile(Var MyFile: TextFile; Const FinalSet: TSet): Boolean;
- Var
- IsCorrect: Boolean;
- Ch: Char;
- Begin
- IsCorrect := True;
- Try
- Try
- Rewrite(MyFile);
- For Ch In FinalSet Do
- Begin
- WriteLn(MyFile, Ch);
- End;
- WriteLn('Результат выведен в файле.');
- Except
- WriteLn('Непредвиденная ошибка.');
- IsCorrect := False;
- End;
- Finally
- CloseFile(MyFile);
- End;
- PrintToFile := IsCorrect;
- End;
- Procedure InputData(Var Sequence: String; Var MyFile: TextFile);
- Var
- IsCorrect: Boolean;
- Choice: Integer;
- MyFileName: String;
- Begin
- WriteLn('Данная программа находит в последовательности символов знаки арифметических операций, знаки препинания и цифры. ', #13#10,
- 'Длина последовательности от ', MIN_LENGTH, ' до ', MAX_LENGTH, #13#10, 'Откуда Вы хотите вводить данные?', #13#10,
- '1 - консоль, 2 - файл.');
- Choice := InputChoice(MIN_C, MAX_C);
- If (Choice = 1) Then
- Begin
- Sequence := InputSequenceFromConsole;
- End
- Else
- Begin
- Repeat
- MyFileName := RequestFileNameForReading(MyFile);
- IsCorrect := InputSequenceFromFile(Sequence, MyFile);
- ;
- Until IsCorrect;
- End;
- End;
- Procedure OutputData(Const FinalSet: TSet; Var MyFile: TextFile);
- Var
- IsCorrect: Boolean;
- Choice: Integer;
- MyFileName: String;
- Begin
- WriteLn('Куда Вы хотите вывести результат?', #13#10, '1 - консоль, 2 - файл');
- Choice := InputChoice(MIN_C, MAX_C);
- If (Choice = 1) Then
- Begin
- PrintToConsole(FinalSet);
- End
- Else
- Begin
- Repeat
- MyFileName := RequestFileNameForWriting(MyFile);
- IsCorrect := PrintToFile(MyFile, FinalSet);
- Until IsCorrect;
- End;
- End;
- Var
- MyFile: TextFile;
- Sequence: String;
- FinalSet: TSet;
- Begin
- InputData(Sequence, MyFile);
- FindSymbols(Sequence, FinalSet);
- OutputData(FinalSet, MyFile);
- ReadLn;
- End.
Advertisement
Add Comment
Please, Sign In to add comment