Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Identifier;
- Uses
- System.SysUtils;
- Type
- TBoolean = Array Of Boolean;
- Procedure OutputTask();
- Begin
- Writeln('Данная программа проверяет, является ли заданная строка идентификатором.');
- End;
- Procedure ChooseInput(var IsFromFile : Boolean);
- Var
- Num : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Выберите, откуда вводить данные: 0, если с консоли; 1, если с файла.');
- Try
- Readln(Num);
- Except
- IsCorrect := False;
- End;
- If ((Not IsCorrect) Or ((Num <> 0) And (Num <> 1))) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- Until IsCorrect;
- IsFromFile := (Num = 1);
- End;
- Function ChoosePath() : String;
- Var
- Path : String;
- IsCorrect : Boolean;
- InputFile : TextFile;
- Begin
- Begin
- Repeat
- Writeln('Введите путь к файлу для ввода информации: ');
- IsCorrect := True;
- Readln(Path);
- Try
- AssignFile(InputFile, Path);
- Reset(InputFile);
- Except
- IsCorrect := False;
- End;
- If (Not IsCorrect) Or (Length(Path) < 5) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End
- Else
- Begin
- If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- End;
- Until IsCorrect;
- End;
- CloseFile(InputFile);
- ChoosePath := Path;
- End;
- Procedure InputFromConsole(var Str : String);
- Var
- I : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите строку: ');
- Readln(Str);
- For I := 1 To High(Str) Do
- If (Str[I] = ' ') Then
- IsCorrect := False;
- If (Not IsCorrect) Or (Length(Str) < 1) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- Until (IsCorrect);
- End;
- Procedure InputFromFile(var Str : String);
- Var
- Path : String;
- InputFile : TextFile;
- IsCorrect : Boolean;
- I : Integer;
- Begin
- Writeln('При записи из файла учтите, что в файле нужные данные должны быть записаны на первой строке.');
- Path := ChoosePath();
- AssignFile(InputFile, Path);
- Reset(InputFile);
- Readln(InputFile, Str);
- For I := 1 To High(Str) Do
- If (Str[I] = ' ') Then
- IsCorrect := False;
- If (IsCorrect = False) Or (Length(Str) < 1) Then
- Begin
- Writeln('Ошибка ввода! Введите нужную строку с клавиатуры.');
- InputFromConsole(Str);
- End;
- End;
- Function InputString(IsFromFile : Boolean) : String;
- Var
- Str : String;
- Begin
- If (IsFromFile) Then
- InputFromFile(Str)
- Else
- InputFromConsole(Str);
- InputString := Str;
- End;
- Procedure CheckForFirstLetter(Str : String; var IsCorrect : Boolean);
- Begin
- IsCorrect := Not(((Str[1] > 'a') And (Str[1] < 'z')) Or ((Str[1] > 'A') And (Str[1] < 'Z')) Or (Str[1] = '_'));
- End;
- Procedure CheckForLetters(Str : String; var IsCorrect : Boolean);
- Var
- I : Integer;
- Begin
- IsCorrect := False;
- For I := 1 To High(Str) Do
- If Not(((Str[I] > 'a') And (Str[I] < 'z')) Or ((Str[I] > 'A') And (Str[I] < 'Z')) Or (Str[I] = '_') Or ((Str[I] > '0') And (Str[I] < '9'))) Then
- IsCorrect := True;
- End;
- Function CheckForTrue(Str : String; var Errors : TBoolean) : Boolean;
- Begin
- SetLength(Errors, 2);
- Errors[1] := False;
- Errors[0] := False;
- CheckForFirstLetter(Str, Errors[0]);
- CheckForLetters(Str, Errors[1]);
- CheckForTrue := Not(Errors[1] Or Errors[0]);
- End;
- Function ChoosePathForOutput() : String;
- Var
- Path : String;
- IsCorrect : Boolean;
- OutputFile : TextFile;
- Begin
- Begin
- Repeat
- Writeln('Введите путь к файлу для вывода информации: ');
- IsCorrect := True;
- Readln(Path);
- Try
- AssignFile(OutputFile, Path);
- Reset(OutputFile);
- Except
- IsCorrect := False;
- End;
- If (Not IsCorrect) Or (Length(Path) < 5) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End
- Else
- Begin
- If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- End;
- Until IsCorrect;
- End;
- CloseFile(OutputFile);
- ChoosePathForOutput := Path;
- End;
- Procedure OutputAnswerInFile(IsCorrect : Boolean; Errors : TBoolean);
- Var
- OutputFile : TextFile;
- Path : String;
- Begin
- Path := ChoosePathForOutput();
- AssignFile(OutputFile, Path);
- Rewrite(OutputFile);
- If (IsCorrect) Then
- Writeln(OutputFile, 'Строка является идентификатором!')
- Else
- Begin
- Writeln(OutputFile, 'Строка не является идентификатором!');
- If (Errors[0]) Then
- Writeln(OutputFile, 'Строка начинается не с английской буквы либо нижнего подчеркивания!');
- If (Errors[1]) Then
- Writeln(OutputFile, 'Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!');
- End;
- CloseFile(OutputFile);
- Writeln('Данные успешно записаны в файл!');
- End;
- Procedure OutputAnswer(IsCorrect : Boolean; Errors : TBoolean);
- Begin
- If (IsCorrect) Then
- Writeln('Строка является идентификатором!')
- Else
- Begin
- Writeln('Строка не является идентификатором!');
- If (Errors[0]) Then
- Writeln('Строка начинается не с английской буквы либо нижнего подчеркивания!');
- If (Errors[1]) Then
- Writeln('Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!');
- End;
- OutputAnswerInFile(IsCorrect, Errors);
- End;
- Var
- Str : String;
- IsFromFile : Boolean;
- IsCorrect : Boolean;
- Errors : TBoolean;
- Begin
- OutputTask();
- ChooseInput(IsFromFile);
- Str := InputString(IsFromFile);
- IsCorrect := CheckForTrue(Str, Errors);
- OutputAnswer(IsCorrect, Errors);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement