Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2018, 22:01   #1
kladsss
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 50
По умолчанию Дополнить код Delphi XE - добавить рандомную замену текста по словарю

Задача: добавить рандомную замену и что бы слова для замены вводились в memo: К примеру в memo ввожу слово Test заменить на список слов и Test2 заменить на другой список слов и между каждым словом разделитель |.

Пример в Memo (Настройки):

Test|Замена1|Замена2|Замена3

Test2|Замена1|Замена2|Замена3

После чего, программа ищет слова Test и Test2 в текстовых файлах и заменяет их рандомно.

Что я сделал: получилось вот так - слово для замены ввожу в Edit2 и замену этого слова в Edit3. Ну а в Edit1 путь к каталогу с файлами.

Код:
procedure ScanDir(path : string);
var
         sr : TSearchRec;
  FileAttrs : Integer;
          s : tstringlist;
       a, b :  string;
begin
  path := IncludeTrailingPathDelimiter(path);
  if FindFirst(path + '*.*', faAnyFile, sr) = 0 then  begin
    repeat
      if (sr.Name <>) and (sr.Name <> '.') then
        if (sr.Attr and faDirectory) = faDirectory then
        begin
          Form1.Memo1.Lins.Add('Отображение лога: ' + path + sr.Name);
          ScanDir(path + sr.Name);
        end
        else
        begin
                s:=tstringlist.create;
                s.LoadFromFile(sr.Name);
                s.text:=StringReplace(s.Text,Form1.Edit2.Text,Form1.Edit3.Text,[rfreplaceall]); //
                s.SaveToFile(path + sr.Name);
                FreeAndNil(s);
        end;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;
  
procedure TForm1.Button1Click(Sender: TObject);
var
dirName: string;
begin
  if SelectDirectory('Выберите дерикторию','C:\Users\kk\Desktop\Ttt\', dirName) then // тут меняет слово с edit2 на то что в Edit 3
  Edit1.Text:= (dirName);
end;
  
procedure TForm1.Button2Click(Sender: TObject);
begin
ScanDir(Edit1.Text+'\'); // тут путь к папке
end;

Последний раз редактировалось kladsss; 28.05.2018 в 17:20.
kladsss вне форума Ответить с цитированием
Старый 27.05.2018, 23:45   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Чо за срань ты там рожаешь с этими заменами шыла на мыло?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.05.2018, 11:58   #3
kladsss
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 50
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Чо за срань ты там рожаешь с этими заменами шыла на мыло?
В документах нужно заменить много слов. То есть каждое слово на список рандомных слов.
kladsss вне форума Ответить с цитированием
Старый 28.05.2018, 12:00   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от kladsss Посмотреть сообщение
В документах нужно заменить много слов. То есть каждое слово на список рандомных слов.
Зачем?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.05.2018, 12:24   #5
kladsss
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 50
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Зачем?
На работе заставляют переделывать отчеты и в ручном режиме это очень долго. Если к примеру документов 30 то программой это обработать за 5 секунд а в ручном режиме это целая вечность.
kladsss вне форума Ответить с цитированием
Старый 28.05.2018, 12:34   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Странные документы, которые надо рандомными данными набивать.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.05.2018, 12:37   #7
kladsss
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 50
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Странные документы, которые надо рандомными данными набивать.
Ну как есть, а что делать. Мне каждый день приходиться работать с документами и гемор страшный.
В решении этой задачи сможете помочь (исправить код, он работает, просто добавить то что выше) ?
kladsss вне форума Ответить с цитированием
Старый 28.05.2018, 12:53   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Я не читаю чужой код, если там больше 8 строк.
Мне проще с нуля написать.
Спасибо, нет. Я не буду тратить время на глупую бесполезную задачу.
Кому могут понадобиться документы, забитые рандомными данными? Что за бред?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 28.05.2018 в 12:55.
min@y™ вне форума Ответить с цитированием
Старый 28.05.2018, 13:24   #9
kladsss
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 50
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Я не читаю чужой код, если там больше 8 строк.
Мне проще с нуля написать.
Спасибо, нет. Я не буду тратить время на глупую бесполезную задачу.
Кому могут понадобиться документы, забитые рандомными данными? Что за бред?
Ничего страшного. Буду сам долбить и добьюсь результата.
kladsss вне форума Ответить с цитированием
Старый 28.05.2018, 14:08   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

ПРИМЕР возможного кода по случайной замене
Код:
r:=TStringList.Create;
r.Delimiter:='|';
r.DelimiterText:='Test|Замена1|Замена2|Замена3';

n:=1+ Random(r.Count-2); //вначале(при запуске программы) нужен еще Randomize;
result:=StringReplace(text, r.Strings[0], r.Strings[n], []);
НО!!! StringReplace не говорит была(или нет) сделана замена.
обратите свое внимание на Pos (PosEx). + Delete Insert or Copy
И(или) обрабатывайте строки текста по отдельности
Код:
r:=s.Strings[j];  
// обработка (замена) в одной строке текста
s.Strings[j]:=r;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.05.2018 в 14:23.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить условие в код Delphi XE kladsss Общие вопросы Delphi 57 20.05.2018 11:11
Дополнить код Samon C# (си шарп) 0 04.11.2016 13:01
Как сделать замену текста по всей базе (phpmyadmin) Karyuudo SQL, базы данных 5 14.09.2015 12:12
Excel, Как осуществить поиск и замену сразу нескольких фрагментов текста? Танита Помощь студентам 0 24.05.2012 00:18
Дополнить код fanofinter Паскаль, Turbo Pascal, PascalABC.NET 1 07.11.2011 11:09