Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
Mawrat
12829 / 5737 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
25.06.2011, 17:03 0

Как рандомно менять слова в файле. Движок по обработке команд в тексте.

25.06.2011, 17:03. Просмотров 1212. Ответов 19
Метки (Все метки)

Ответ

Предлагаю такой пример:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
uses
  StrUtils;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Имя файла с текстом.
  Fn1 = 'data.txt';
  //Имя файла со списком слов для замены.
  Fn2 = 'list.txt';
  //Шаблон для замены.
  sTemp = '{SLOVO}';
var
  F1 : File;
  S, S2, FileName1, FileName2 : String; //AnsiString.
  Sl : TStringList;
  Size, Pos1, Cnt, Len1, Len2 : Integer;
begin
  //Полные имена файлов, с учётом предполажения, что
  //они лежат в той же папке, где расположен исполняемый файл программы.
  FileName1 := ExtractFilePath(ParamStr(0)) + Fn1;
  FileName2 := ExtractFilePath(ParamStr(0)) + Fn2;
 
  //Создаём экземпляр списка.
  Sl := TStringList.Create;
  //Загружаем строки из файла в список.
  Sl.LoadFromFile(FileName2);
 
  //Связываем файловую переменную с именем файла.
  AssignFile(F1, FileName1);
  //Открываем файл и задаём режим с минимальным блоком чтения/записи в 1 байт.
  Reset(F1, 1);
  //Размер файла в минимальных блоках, т. е., в данном случае - в байтах.
  Size := FileSize(F1);
  //Устанавливаем длину строки, равной длине файла.
  SetLength(S, Size);
  //Читаем содержимое из файла в строку.
  BlockRead(F1, Pointer(S)^, Size);
  //Закрывае файл.
  CloseFile(F1);
 
  //Заменяем шаблоны в прочитанном тексте на случайно выбранные
  //элементы из списка Sl.
  //Длина шаблона.
  Len1 := Length(sTemp);
  //Количество элементов в списке Sl.
  Cnt := Sl.Count;
  //Ищем позицию на которой расположен первый шаблон.
  Pos1 := PosEx(sTemp, S, 1);
  //Инициализация генератора случайных чисел.
  Randomize;
  while Pos1 > 0 do begin
    //Удаляем найденный шаблон.
    Delete(S, Pos1, Len1);
    //Выбираем случайный элемент из списка Sl.
    S2 := Sl[ Random(Cnt) ];
    //Опеределяем длину элемента.
    Len2 := Length(S2);
    //Вставляем элемент в строку.
    Insert(S2, S, Pos1);
    //Ищем следующий шаблон.
    Pos1 := PosEx(sTemp, S, Pos1 + Len2);
  end;
 
  //Удаляем экземпляр списка из памяти.
  Sl.Free;
 
  //Помещаем обработанный текст в Мемо.
  Memo1.Text := S;
end;
Функция PosEx() объявлена в модуле StrUtils.
Следует иметь в виду, что функции Insert() и Delete() весьма ресурсоёмкие. Они тратят вычислительные ресурсы пропорционально размерам строк, которые они обрабатывают.
Можно написать более оптимальный по производительности код. Но в этом есть смысл, если требуется многократная обработка больших объемов текста - например, множество файлов, размером в несколько мегобайт (или несколько десятков мегобайт).

Вернуться к обсуждению:
Как рандомно менять слова в файле. Движок по обработке команд в тексте.
1
Вложения
Тип файла: rar Project.rar (166.7 Кб, 17 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2011, 17:03
Готовые ответы и решения:

Менять рандомно местами ВСЕ строки в txt файле
Привет. Как менять строки местами в txt файле ? Нужна функция которая...

Задача по обработке файлов. Определить,есть ли в файле английские слова и сколько
Заметил,что на неё решения так и не нашли((может кто то знает,как её делать, ...

Как менять цвета рандомно, нашел код который работает, но я кое-что не понимаю
Искал в инете как менять цвета рандомно, нашел код который работает, но я...

Как лучше - создавать и уничтожать несколько команд или каждый раз просто менять свойство команды
У меня несколько команд: 1) запрос к одной таблице; 2) очистка второй таблицы;...

подскажите по обработке команд в MVVM
Добрый день! Уважаемые форумчане, подскажите пожалуйста где можно в доступном...

19
Другие темы раздела
Delphi Найти сумму всех элементов матрицы http://www.cyberforum.ru/delphi-beginners/thread325729.html
найти сумму всех элементов двумерного массива 4х4!
Delphi установка borland Delphi 7 Enterprise Здравствуйте,вопрос такой.хочу установить компилятор,так там при установке есть варианты выборочной установки,я обычно устанавливал полностью весь пакет,но думаю полностью он не нужен,не подскажите... http://www.cyberforum.ru/delphi-beginners/thread325723.html
Delphi Заданая последовательность состоит из 1 и 0,определить количество Mзначных чисел,делящихся на 21
Уважаемые форумчане .нужна ваша помощь в решении задачи по информатике(язык программирования Delphi7).Задача следующая :Заданная последовательность состоит из 1 и 0,определить количество M-значных...
Delphi Пишу тест
Здравствуйте. Пишу тест в Дельфи. Одна форма для создания теста, другая для прохождения теста. При создании теста записываю варианты правильных ответов в массив. При вызове этого массива из юнита...
Delphi Тест с выводом результата сразу после ответа на вопрос http://www.cyberforum.ru/delphi-beginners/thread325653.html
Здравствуйте. Пытаюсь сделать тест в котором бы после того как пользователь нажимает на кнопку "Ответить" сразу выводится сообщение правильно ли он ответил или нет. Одновременно осуществляется...
Delphi Форма курсора Добрый вечер, помогите пожалуйста, нужно разработать компонент с функциональностью стандартной метки TLabel и возможностью изменения параметров отображения метки (размер, цвет, подчеркивание) и формы... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru