Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


есть код декодирования 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;


Отправлено: 21:39, 25-07-2011 | #2406