![]() |
|
#2
|
|||
|
|||
![]() Грузим исходный шаблон в 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 файла. |