Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.09.2010, 04:11
wood_man wood_man вне форума
Прохожий
 
Регистрация: 23.09.2010
Сообщения: 1
Репутация: 10
По умолчанию ПОмогите новичку

Нужен код программы, которая бы в тексте (в текстовом файле) меняла две строчки типа xxx и yyy, на нужное из другого файла. Причем замена должна быть разная порядка 40 вариантов, и выводида файлы с разными вариантами в разные папки
Ответить с цитированием
  #2  
Старый 23.09.2010, 05:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Грузим исходный шаблон в TStringList. Файл замен грузим еще в один TStringList. Далее идем по файлу и начинаем заменять строчки с помощью функции StringReplace. Далее просто сохраняем получившийся результат.

Для удобства я бы сохранял получившиеся файлы в одной папке, но с разными именами. А файл значений селал бы в формате INI. Тогда строчки можно использовать стандартые классы для разбора.

Примерно так:
Код:
program RepFile;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes, IniFiles;

function ReplaceInText(ATemplate : String; AValues : TStringList) : String;
var
  I : Integer;
begin
  Result := ATemplate;
  For I := 0 To AValues.Count-1 Do
    Result := StringReplace(Result,AValues.Names[i],AValues.ValueFromIndex[i],[rfReplaceAll]);
end;

procedure ReplaceInFiles(AInFile, AValuesFile, AOutFolder : String);
var
  I : Integer;
  ASections, ATemplate, ANew, AValues : TStringList;
  F : TIniFile;
  ANewFileName : String;
begin
  ASections := TStringList.Create;
  ATemplate := TStringList.Create;
  ANew := TStringList.Create;
  AValues := TStringList.Create;
  F := TIniFile.Create(AValuesFile);
  Try
    ATemplate.LoadFromFile(AInFile);
    F.ReadSections(ASections);
    For I := 0 To ASections.Count-1 Do
      Begin
        WriteLn('Processing section ' + ASections[i]);
        AValues.Clear;
        F.ReadSection(ASections[i],AValues);
        ANew.Text := ReplaceInText(ATemplate.Text,AValues);
        ANewFileName := IncludeTrailingPathDelimiter(AOutfolder) +
                        ChangeFileExt(ExtractFileName(AInFile),
                                      '.'+ASections[i]+ExtractFileExt(AInFile));
        ANew.SaveToFile(ANewFileName);
      End;
    WriteLn('Done');
  Finally
    F.Free;
    ASections.Free;
    ATemplate.Free;
    ANew.Free;
  End;
end;

procedure Help;
begin
  WriteLn('Usage:');
  WriteLn('  RepFile TemplateFileName ValuesFileName OutFolderName');
end;

begin
  WriteLn('RepFile');
  WriteLn;

  If ParamCount <> 3
    Then Help
    Else ReplaceInFiles(ParamStr(1),ParamStr(2),ParamStr(3));
end.

Файл значений выглядит примерно так:
Код:
[value_set_1]
xxx=значение для xxx
yyy=значение для yyy

[value_set_2]
xxx=значение для xxx
yyy=значение для yyy
zzz=значение для zzz

[value_set_3]
xxx=значение для xxx
zzz=значение для zzz

Соотв. сгенерится 3 файла.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025