Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
m00nlight
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 68
1

Вывести в текстовый файл введённое пользователем предложение

29.01.2017, 11:13. Просмотров 885. Ответов 5

Создать программу, которая позволяет вывести в текстовый файл введённое пользователем предложение и исходное предложение, убрав из него все знаки препинания. Ввод предложения осуществляется в текстовое окно.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2017, 11:13
Ответы с готовыми решениями:

Вывод результата программы в текстовый файл и в двоичный файл с именем, задаваемым пользователем
Подскажите пожалуйста, что нужно исправить. Нужно организовать вывод результата программы в...

Вывести текстовый файл в Stringgrid1 отсортировать данные по условию и вывести в Stringgrid2
Помогите пожалуйста написать программу, кому не сложно. Условие задачи: Распечатать анкетные данные...

Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого содержит символы
Дан текстовый файл. Используя стек, сформировать новый текстовый файл, каждая строка которого...

Посимвольно вывести текстовый файл в StringGrid
со стрингридом еще не работала,но вот пришлось).Требуется ввести текстовый файл посимвольно(каждый...

Как DateTimePicker1 вывести в текстовый файл
procedure TForm1.Button2Click(Sender: TObject); var f:textfile; S,D,W,A,G,Q:string; begin...

5
D1973
Модератор
3982 / 2861 / 1387
Регистрация: 21.01.2014
Сообщений: 12,189
Записей в блоге: 3
Завершенные тесты: 1
29.01.2017, 19:48 2
m00nlight, создавай, благословляю. А вопрос-то в чем?
0
SavelS
3 / 3 / 7
Регистрация: 29.01.2017
Сообщений: 19
30.01.2017, 14:51 3
Лучший ответ Сообщение было отмечено m00nlight как решение

Решение

m00nlight, так, сперва сделаем несколько конкретизирующих уточнений допущений:
Создать программу
поскольку это не раздел "фриланса", то "здесь" напишем только процедуру.
Ввод предложения осуществляется в текстовое окно.
пусть это будет поле Edit, хотя это может быть и Memo и всё, что угодно.

Итак, на форме текстовое поле TEdit1 и обычная кнопка Button1.
Вот код обработчика события нажатия кнопки (onClick):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Button1Click(Sender: TObject);
var
  F : TextFile;
  S : String;
  i : Integer;
  M : set of Char;
begin
  S := Edit1.Text;
  M:=['.',',',';',':','!','?','-','–','—','[',']','(',')','{','}',
      '''','"','„','“','«','»','“','”','‘','’','‹','›','*','/'];
  AssignFile(F, 'Text.txt');
  ReWrite(F);
  WriteLn(F, S);
  for i:=1 to Length(S) do
    if not (S[i] in M) then Write(F, S[i]);
  WriteLn(F);
  CloseFile(F);
end;
После выполнения программы, в её директории создаётся файл "Text.txt", который содержит две строки:
первую - оригинальную, и вторую - без знаков препинания.

Тестовый пример:
Кликните здесь для просмотра всего текста
Входные данные (вводимая строка):
Без внятного ТЗ — результат "ХЗ"!

Результат (содержимое файла):
Без внятного ТЗ — результат "ХЗ"!
Без внятного ТЗ результат ХЗ


ВНИМАНИЕ! Исключения:
Кликните здесь для просмотра всего текста
Данная программа также исправляет слова написанные через дефис (пример: как-то, всё-таки и т.п.) и слова написаные с апострафом (например: can't, don't, etc.)
Для того чтобы программа "обходила" их без изменений - нужно изменить переменную M (set of Char) следующим образом:
Delphi
1
2
  M:=['.',',',';',':','!','?',' - ','–','—','[',']','(',')','{','}',
      ' ''', ''' ', '"','„','“','«','»','“','”','‘','’','‹','›','*','/'];
Так программа не затронет знак дефиса и апострафа, если они не используются как знаки тире или одиночной кавычки соответственно.


Отдельно хочу посоветовать на будущее - яснее выражать свою мысль и грамотно формулировать вопросы.
И, я бы поддержал резонный вопрос пользователя D1973, но если честно, от Модератора такого не ожидал...
0
m00nlight
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 68
31.01.2017, 19:53  [ТС] 4
Почему-то ругается на запятую как раз в месте с дефисом, тире и т.п.
В первой же версии значения этой переменной - всё нормально.
Всяко пытался редактировать и понять из-за чего не компилируется - так и не понял.
Удаляешь тире, дефис, запятые, а Delphi всё-равно на этом месте стопорится.
0
SavelS
3 / 3 / 7
Регистрация: 29.01.2017
Сообщений: 19
31.01.2017, 22:23 5
Лучший ответ Сообщение было отмечено m00nlight как решение

Решение

m00nlight, да, точно. всё верно. В Исключении я допустил ошибку: это же
Код
M : set of Char;
А значит он может содержать только один символ. Поэтому для создания этого исключения надо проверять соседние символы отдельно. А я то "исключение" дописал, что называется "из головы", подумав только о логике поиска дефисов или апострафофв, но совсем забыв то в каком формате хранил данные. И проверял на работоспособность только первый вариант. Мой косяк..

Вот рабочий вариант, пропускающий дефисы и апострафы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure TForm1.Button1Click(Sender: TObject);
var
  F : TextFile;
  S : String;
  i : Integer;
  M, N : set of Char;
begin
  S := Edit1.Text;
  M:=['.',',',';',':','!','?','-','–','—','[',']','(',')','{','}',
      '''','"','„','“','«','»','“','”','‘','’','‹','›','*','/'];
  N:=[' '];
  AssignFile(F, 'Text.txt');
  ReWrite(F);
  WriteLn(F, S);
  for i:=1 to Length(S) do
  begin
    if not (S[i] in M) then
    begin
      Write(F, S[i]);
    end else
    begin
      //если это символ
      if (i>1) and (i<Length(S)) then //чтобы не выйти за границы строки
      if (not (S[i-1] in M)) and (not (S[i-1] in N)) then
      if (not (S[i+1] in M)) and (not (S[i+1] in N)) then Write(F, S[i]);
    end;
    end;
  WriteLn(F);
  CloseFile(F);
end;
Тестовый пример:
Кликните здесь для просмотра всего текста
Входные данные (вводимая строка):
"Теперь всё тик-так!", - подытожил SavelS. (That's all)

Результат (содержимое файла):
"Теперь всё тик-так!", - подытожил SavelS. (That's all)
Теперь всё тик-так подытожил SavelS That's all


Надеюсь, разобраться в коде стало не труднее, хоть он и увеличился порядочно.
PS. Желаю удачи
1
m00nlight
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 68
31.01.2017, 23:01  [ТС] 6
Спасибо, мил человек.
А не мог бы ты в личные сообщения заглянуть?
А то мне там просто ещё некоторая помощь нужна.
0
31.01.2017, 23:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2017, 23:01

Вывести текст в поле Memo из файла где есть "+ и -". Затем нужно + и - вывести в другой текстовый файл
Вывести текст в поле Memo из файла где есть &quot;+ и -&quot;. Затем нужно + и - вывести в другой текстовый...

Вывести информацию из Edit, RadioGroup, ComboBox в текстовый файл
Здравствуйте народ. Я сбился с темы выdода в ворд собственно вопрос: Как вывести в .txt(надеюсь...

Как вывести последовательно введённые пользователем числа в текстовый файл?
Доброго времени суток, форумчане. В очередной раз столкнулся с проблемой. Мне было нужно написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru