есть код декодирования
OGG. Нужно сделать что бы еще и
WV декодировалось. Объединяю оба один за другим, но беда в том, что oни получаются идентичны (кроме переменных) и используют одну и туже функцию
StringToArray и при компиляции ругается, что во втором куске она продублирована.
Как прописать ее для обоих участков кода, для 3х участков?
читать дальше »
[code1]
var
Files1: Array of String;
S1: String;
n1: Integer;
Function StringToArray(Text, Cut: String): array of String;
var i1, k1: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k1:= Pos(Cut,Text);
if k1 = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i1:= GetArrayLength(Result) -1;
if k1 = 0 then
Result[i1]:=Text
else begin
Result[i1]:= Copy(Text, 1, k1 -1); Delete(Text, 1, Length(Result[i1]) + Length(Cut));
end;
Until Length(Text) * k1 = 0;
End;
procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S1:= S1 + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;
procedure RecodeOgg;
var ResultCode: integer;
CurFile: String;
begin
FindFiles(ExpandConstant('{app}\ogg\sound\'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files1:= StringToArray(S1, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files1)-1; //Получаем кол-во файлов
for n1:=(GetArrayLength(Files1)-1) downto 0 do begin
CurFile:= Files1[n1]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\ogg\sound\')), '')
Exec(ExpandConstant('{app}\ogg\sound\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files1[n1]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files1[n1]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\ogg\sound\oggdec.exe'))
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeOgg;
end;
end;
//-------распаковка WV ------------------------------------------------
[code2]
var
Files2: Array of String;
S2: String;
n2: Integer;
Function StringToArray(Text, Cut: String): array of String; //стопор, т.к уже дублируется в предыдущем коде
var i2, k2: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k2:= Pos(Cut,Text);
if k2 = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i2:= GetArrayLength(Result) -1;
if k2 = 0 then
Result[i2]:=Text
else begin
Result[i2]:= Copy(Text, 1, k2 -1); Delete(Text, 1, Length(Result[i2]) + Length(Cut));
end;
Until Length(Text) * k2 = 0;
End;
procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S2:= S2 + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;
procedure RecodeWV;
var ResultCode: integer;
CurFile: String;
begin
FindFiles(ExpandConstant('{app}\WV\sound\'), '*.wv') //Находим все файлы по маске, в выбранной папке
Files2:= StringToArray(S2, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files2)-1; //Получаем кол-во файлов
for n2:=(GetArrayLength(Files2)-1) downto 0 do begin
CurFile:= Files2[n2]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\WV\sound\')), '')
Exec(ExpandConstant('{app}\WV\sound\wvunpack.exe'), '-t -q -y '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files2[n2]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files2[n2]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\WV\sound\wvunpack.exe'))
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeWV;
end;
end;