Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program LAB3_1;
- Uses
- System.SysUtils;
- Const
- LETTERS = [#65 .. #90, #97 .. #122];
- OPENBRACE = '(';
- CLOSEBRACE = ')';
- Procedure WriteCondition();
- Begin
- Writeln('Данная программа в каждом четном слове текста заменяет все буквы на прописные,',
- #10, 'а каждое нечетное слово заключает в круглые скобки.');
- End;
- Function CheckChoiceInput(OutputMessage: String): Integer;
- Var
- Num: Integer;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln(OutputMessage);
- Try
- Readln(Num);
- Except
- IsCorrect := False;
- Writeln('Введенные данные не соответствуют условию. Повторите попытку.');
- End;
- If IsCorrect And ((Num <> 0) And (Num <> 1)) Then
- Begin
- IsCorrect := False;
- Writeln('Введенные данные не соответствуют условию. Повторите попытку.');
- End;
- Until (IsCorrect);
- Writeln;
- CheckChoiceInput := Num;
- End;
- Function CheckText(Text: String): Boolean;
- Var
- I: Integer;
- IsCorrect: Boolean;
- Begin
- IsCorrect := False;
- If Text = '' Then
- Writeln('В тексте нет символов. Повторите попытку.')
- Else
- Begin
- I := 1;
- While Not IsCorrect And (I < (Length(Text) + 1)) Do
- Begin
- If Text[I] In LETTERS Then
- IsCorrect := True;
- Inc(I);
- End;
- If Not IsCorrect Then
- Writeln('В тексте нет латинских букв. Повторите попытку.');
- End;
- CheckText := IsCorrect;
- End;
- Function InputTextFromConsole(): String;
- Var
- Text: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := False;
- Writeln('Введите текст (латинскими буквами).');
- Readln(Text);
- IsCorrect := CheckText(Text);
- Until IsCorrect;
- Writeln;
- InputTextFromConsole := Text;
- End;
- Function CheckFilePath(Path: String): Boolean;
- Var
- IsCorrect: Boolean;
- Begin
- If Not FileExists(Path) Then
- Begin
- Writeln('Введенного файла не существует. Повторите попытку.');
- IsCorrect := False;
- End
- Else If ExtractFileExt(Path) <> '.txt' Then
- Begin
- Writeln('Введенный Вами файл не является текстовым. Повторите попытку.');
- IsCorrect := False;
- End;
- CheckFilePath := IsCorrect;
- End;
- Function CheckFileInputPath(): String;
- Var
- Path: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите путь к файлу, содержащему текст (буквы текста должны быть латинскими).');
- Readln(Path);
- IsCorrect := CheckFilePath(Path);
- Until IsCorrect;
- CheckFileInputPath := Path;
- End;
- Function GetTextFromFile(Path: String): String;
- Var
- I: Integer;
- Text, Line: String;
- IsCorrect: Boolean;
- FIn: TextFile;
- Begin
- Repeat
- IsCorrect := False;
- Assign(FIn, Path);
- Try
- Reset(FIn);
- While Not Eof(FIn) Do
- Begin
- Readln(FIn, Line);
- Text := Text + Line + #10;
- End;
- IsCorrect := CheckText(Text);
- Except
- Writeln('Произошла ошибка. Повторите попытку.');
- IsCorrect := False;
- End;
- CloseFile(FIn);
- If Not IsCorrect Then
- Path := CheckFileInputPath();
- Until IsCorrect;
- Writeln('Данные из файла успешно считаны.');
- Writeln;
- GetTextFromFile := Text;
- End;
- Function FormatText(Text: String): String;
- Var
- I: Integer;
- IsOdd: Boolean;
- Word: String;
- Begin
- IsOdd := True;
- For I := 1 To (Length(Text) - 1) Do
- If Text[I] In LETTERS Then
- Begin
- Word := Word + Text[I];
- If Not(Text[I + 1] In LETTERS) Or
- ((I + 1 = Length(Text)) And (Text[Length(Text)] In LETTERS)) Then
- Begin
- If (I + 1 = Length(Text)) And
- (Text[Length(Text)] In LETTERS) Then
- Word := Word + Text[I + 1];
- If IsOdd Then
- Begin
- Word := OPENBRACE + Word + CLOSEBRACE;
- Result := Result + Word;
- Word := '';
- IsOdd := False;
- End
- Else
- Begin
- Word := UpperCase(Word);
- Result := Result + Word;
- Word := '';
- IsOdd := True;
- End;
- End;
- End
- Else
- Result := Result + Text[I];
- If Not(Text[Length(Text)] In LETTERS) Then
- Result := Result + Text[Length(Text)];
- FormatText := Result;
- End;
- Function CheckFileOutputPath(): String;
- Var
- Path: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите путь к файлу, в который нужно записать результат.');
- Readln(Path);
- IsCorrect := CheckFilePath(Path);
- If IsCorrect And FileIsReadOnly(Path) Then
- Begin
- Writeln('Введенный Вами файл доступен только для чтения. Повторите попытку.');
- IsCorrect := False;
- End;
- Until IsCorrect;
- CheckFileOutputPath := Path;
- End;
- Procedure WriteResultIntoFile(Result, Path: String);
- Var
- FOut: TextFile;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Assign(FOut, Path);
- Try
- Rewrite(FOut);
- Writeln(FOut, Result);
- Except
- Writeln('Произошла ошибка. Повторите попытку.');
- IsCorrect := False;
- Path := CheckFileOutputPath();
- End;
- CloseFile(FOut);
- Until IsCorrect;
- Writeln('Результат записан.');
- End;
- Var
- Choice: Integer;
- Text, Result, FInPath, FOutPath: String;
- Begin
- WriteCondition();
- Choice := CheckChoiceInput
- ('Если Вы хотите вводить данные в консоль, введите 0. Если использовать файл, введите 1.');
- If Choice = 0 Then
- Text := InputTextFromConsole()
- Else
- Begin
- FInPath := CheckFileInputPath();
- Text := GetTextFromFile(FInPath);
- Writeln('Введенный текст:', #10, Text);
- End;
- Result := FormatText(Text);
- Choice := CheckChoiceInput
- ('Если Вы хотите вывести результат в консоль, введите 0. Если в файл, введите 1.');
- If Choice = 0 Then
- Writeln('Результат:', #10, Result)
- Else
- Begin
- FOutPath := CheckFileOutputPath();
- WriteResultIntoFile(Result, FOutPath);
- End;
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement