StranikS_Scan 4,203 #198406 Posted July 8, 2014 (edited) Есть всё Паскалевское. Но делать-то я не всё умею.. записать что-то в файл - не проблема, но когда идёт речь о записи в определённые столбцы\строки - то я пока не в курсе, как это сделать. А ни как это не сделать, имею ввиду в той формулировки что выше. Надо открыть файл на чтение. Считать всё что в нем есть в текстовый буфер, затем в буфере найти нужные места и заменить/вписать, после чего открыть файл на запись и переписать его содержимым буфера. Дай файл и скажи куда чего писать, накатаю на паскале в виде примера. Edited July 8, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
ventura69 34 #198407 Posted July 8, 2014 PS: Зачем столбцы-то? Откуда вообще в текстовом файле у вас столбцы??? Вот есть... Специфика работы. Градуировочная таблица называется и пишется в .txt У меня есть текстовый документ, в котором 101 строка и 5 столбцов. Идут столбики цифр. Условно: надо заменить цифру 0.000256, расположенную во втором столбце двадцать третьей строки на 0.000375. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,203 #198409 Posted July 8, 2014 (edited) Вот есть... Специфика работы. Градуировочная таблица называется и пишется в .txt У меня есть текстовый документ, в котором 101 строка и 5 столбцов. Идут столбики цифр. Условно: надо заменить цифру 0.000256, расположенную во втором столбце двадцать третьей строки на 0.000375. Кинь пример файла, я должен видеть как записано. Edited July 8, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
ventura69 34 #198414 Posted July 8, 2014 Кинь пример файла, я должен видеть как записано. Вот примерный вариант: Новый текстовый документ.txt И еще вариант интересует: есть файлик, в котором записано что-то (условно возьмем battleLoading.xc). В нем надо: "showChances": true переписать на "showChances": false Но это уже для общего развития. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,203 #198426 Posted July 8, 2014 (edited) @ventura69, лови накатал, процедура заменяет текст в файле, указывается номер строки и столбца, нумерация с нуля. program Project1; {$APPTYPE CONSOLE} uses SysUtils; //Заменяет в файле FileName слово в row-строке и column-столбце на содержимое Text (нумерация с нуля) procedure ReplaceText(FileName: string; row, column: Integer; Text: string); var f: TextFile; buffer, line, new_line: string; row_count, column_count, tab_pos: Integer; begin if FileExists(FileName) then begin AssignFile(f, FileName); Reset(f); //Открываем на чтение buffer:=''; row_count:=0; while not Eof(f) do //Считываем по порядку все строки в буфер begin Readln(f, line); if row_count = row then begin //Нашли искомую строку, теперь перебираем её по формату: CловоA#9CловоБ#9словоС... column_count:=0; new_line:=''; tab_pos:=Pos(#9,line); while tab_pos>0 do //Несколько столбцов begin if column_count=column then new_line:=new_line+Text+#9 //Меняем искоме слово else new_line:=new_line+Copy(line, 1, tab_pos); line:=Copy(line, tab_pos+1, Length(line)-tab_pos); tab_pos:=Pos(#9,line); Inc(column_count); end; if Length(line)>0 then //Если один столбец или это последний столбец if column_count=column then new_line:=new_line+Text else new_line:=new_line+line; line:=new_line; end; if Length(buffer)>0 then buffer:=buffer+#13#10; buffer:=buffer+line; Inc(row_count); end; CloseFile(f); Rewrite(f); //Открываем на запись Write(f, buffer); //Сбрасываем буфер в файл CloseFile(f); end; end; begin ReplaceText('c:\s.txt',3,2,'3.333'); //Заменить в файле 'c:\s.txt' текст в 4 строке и 3 столбце на '3.333' end. И еще вариант интересует: есть файлик, в котором записано что-то (условно возьмем battleLoading.xc). В нем надо: "showChances": true переписать на "showChances": false Но это уже для общего развития. Это и проще и сложнее. Я так понимаю этот файлик в формате UTF-8 записан :))))) И боюсь проблема работы с ним начнётся с вопроса, а UTF-8 кодировку InnoSetup правильно прочитает? Или надо писать перекодировщик из UTF-8 в ANSI и наоборот. Edited July 8, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #198429 Posted July 8, 2014 (edited) del Edited July 8, 2014 by Kotyarko_O Quote Share this post Link to post Short link Share on other sites
ventura69 34 #198431 Posted July 8, 2014 (edited) @ventura69, лови накатал, процедура заменяет текст в файле, указывается номер строки и столбца, нумерация с нуля. Спасибо огромнейшее! Будет чем в отпуске заняться: пищу для ума дали на все три недели :-) А на счет кодировки - это мелочи. Мне принцип бы понять... Edited July 8, 2014 by ventura69 Quote Share this post Link to post Short link Share on other sites
AtotIK 580 #198461 Posted July 8, 2014 (edited) Inno Setup не умеет работать с JSON, используйте Inno JSONConfig (https://code.google.com/p/inno-json-config/). Однако работает он только в Unicode последних версий ( не работает в расширенной), да и как-то криво обрабатывает форматирование файла. Сам дурюсь с этой проблемой, нужно что-то делать с ней всё же. Если кто-нибудь сможет написать библиотеку для 5.5.1, то это будет прекрасно. Пока обхожусь поиском текста и заменой параметра после него. Для простого редактирования хватает, но при попытках реализовать что-то сложнее, увы, ничего не выйдет. В общем если кто-нибудь откликнется - смогу и материально отблагодарить. Edited July 8, 2014 by AtotIK Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,203 #198465 Posted July 8, 2014 Inno Setup не умеет работать с JSON, используйте Inno JSONConfig (https://code.google.com/p/inno-json-config/). Однако работает он только в Unicode последних версий ( не работает в расширенной), да и как-то криво обрабатывает форматирование файла. Сам дурюсь с этой проблемой, нужно что-то делать с ней всё же. Если кто-нибудь сможет написать библиотеку для 5.5.1, то это будет прекрасно. Пока обхожусь поиском текста и заменой параметра после него. Для простого редактирования хватает, но при попытках реализовать что-то сложнее, увы, ничего не выйдет. В общем если кто-нибудь откликнется - смогу и материально отблагодарить. Глянул исходник - дык там используется Super Object, это отличный JSON движок под Delphi, я его в XCPad юзал. В чем именно у тебя проблема? И для работы с ним надо опять таки самому из UTF-8 конвертировать в ANSI при чтении файла, а при записи делать обратное ANSI в UTF-8. У мну все модули для этого есть. Процесс безболезненный. Quote Share this post Link to post Short link Share on other sites
mpmp 2 #198575 Posted July 9, 2014 (edited) Разобрался, как запускается музыка в скрипте из поста от Ckaym. В данном виде, как он выложен, скрипт не работает. Нашел одну ошибку в нем: тип PChar (он не поддерживается прогой) надо заменить на тип PAnsiChar. И тогда он начинает работать. Вот такая штука получилась в результате для запуска музыки при старте инсталлятора. Гляньте, уважаемый. Комментарии и корректировки будут? //подключаем ресурсы и библиотеки\\ [Files] Source: "bass.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: "innocallback.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: "Music.MP3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression //задаем процедуры, переменные и константы\\typeHSTREAM=DWORD;TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);constIndent=25;varMP3List:TStringList;CurrentMP3:integer;hMP3:HWND;TimerID:LongWord;//создаем функции\\function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external '[email protected] stdcall delayload';function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';function BASS_StreamCreateFile(Mem:BOOL;f:PAnsiChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall'; //ну, и сам код запуска музыки\\procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);beginif BASS_ChannelIsActive(hMP3)=0 then beginBASS_Stop;BASS_StreamFree(hMP3);hMP3:=BASS_StreamCreateFile(False,PAnsiChar(MP3List.Strings[CurrentMP3]),0,0,0);BASS_Start;if hMP3<>0 thenif BASS_ChannelPlay(hMP3,True) then beginCurrentMP3:=CurrentMP3+1;if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;end;end;end;function InitializeSetup:boolean;beginExtractTemporaryFile('Music.MP3');MP3List:=TStringList.Create;MP3List.Add(ExpandConstant('{tmp}')+'\Music.MP3');CurrentMP3:=0;Result:=True;end;procedure InitializeWizard;beginTimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));BASS_Init(-1,44100,0,0,0);BASS_SetConfig(5,100);BASS_SetConfig(6,100);end;procedure DeinitializeSetup;beginBASS_Stop;BASS_Free;MP3List.Free;end;Это решение не проще?music.rar Link2 Edited July 9, 2014 by mpmp Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #198577 Posted July 9, 2014 Это решение не проще? Не удобно. Лучше, если он будет в интерфейсе самого инсталлятора, чем отдельно. Quote Share this post Link to post Short link Share on other sites
ventura69 34 #198724 Posted July 10, 2014 Это решение не проще? music.rar Link2 Может и проще. Музыку вообще в одну строчку можно добавить (играет и играет себе фоном, без всяких кнопок вкл/выкл), но тогда я вообще мало что смыслил в Inno. Это все пробы и изучение программы. Я ведь только учусь :-) А за код спасибо. Можно и пригодится куда-нибудь. Quote Share this post Link to post Short link Share on other sites
mpmp 2 #198781 Posted July 10, 2014 Может и проще. Музыку вообще в одну строчку можно добавить (играет и играет себе фоном, без всяких кнопок вкл/выкл), но тогда я вообще мало что смыслил в Inno. Это все пробы и изучение программы. Я ведь только учусь :-) А за код спасибо. Можно и пригодится куда-нибудь. Я тоже учусь. Уважаемые, вот что получилась с вашей помощью. Надеюсь поможет вам в создании своей сборки. Мой проект: LINK - DOWNLOAD Есть фотографии модов, есть музыка. Спасибо за помощью EvilAlex и Atotik. Не удалось сделать описания модов и музыку кнопок вкл/выкл. Quote Share this post Link to post Short link Share on other sites
zMOHOJIUTz 0 #198830 Posted July 10, 2014 Спасибо за инсталлятор, давно хотел свой модпак создать, теперь смогу его оформить как надо) Quote Share this post Link to post Short link Share on other sites
AtotIK 580 #198832 Posted July 10, 2014 Вангую кучу однотипных модПаков, в скором времени) Спасибо за инсталлятор, давно хотел свой модпак создать, теперь смогу его оформить как надо) :heh: Quote Share this post Link to post Short link Share on other sites
Yusha 8 #198940 Posted July 11, 2014 Inno Setup не умеет работать с JSON Умеет. Без сторонних библиотек можно редактировать те же конфиги XVM... они хоть и имеют расширение XC, а внутри все тот же json. Но я тебя сразу отговорю... лучше работай с заменой файлов ибо у пользователей полно проблем с ОС... и часто необходимо сперва все dll системы восстанавливать... Лично я только в конфиге миникарты делаю подмену false на true... и то, чтобы не жалко было функцию зря писать. Quote Share this post Link to post Short link Share on other sites
Inside_Aneferu 0 #198966 Posted July 11, 2014 Умеет. Без сторонних библиотек можно редактировать те же конфиги XVM... они хоть и имеют расширение XC, а внутри все тот же json. Но я тебя сразу отговорю... лучше работай с заменой файлов ибо у пользователей полно проблем с ОС... и часто необходимо сперва все dll системы восстанавливать... Лично я только в конфиге миникарты делаю подмену false на true... и то, чтобы не жалко было функцию зря писать. Юша привет , у меня есть вопрос по мод паку , в твоем изначальном конфиге урон по противнику у меня ( игрока ) желтый , а со взводного зеленый . Я неоднократно пытался изменить урон игрока на #00EAFF ( голубой ) но после сохранения-замены файла он не меняется , почему так ? Конфигуратор не работает ? Или у тебя там какой то блок на изменения ? вот скрин http://SSMaker.ru/c0ade95a/ . Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,203 #198967 Posted July 11, 2014 Умеет. Без сторонних библиотек можно редактировать те же конфиги XVM... они хоть и имеют расширение XC, а внутри все тот же json. Но я тебя сразу отговорю... лучше работай с заменой файлов ибо у пользователей полно проблем с ОС... и часто необходимо сперва все dll системы восстанавливать... Лично я только в конфиге миникарты делаю подмену false на true... и то, чтобы не жалко было функцию зря писать. Проблему редактирования конфигов легко решил за 15 минут - накатал dll-ку с функциями поиска и замены текста в файлах UTF-8 формата. ЗЫ: Я вижу в этой теме народ стал потихоньку вылазить за рамки Inno Setup и плавно вливаться в Delphi и ObjPascal, вопросики стали появляться, dll-ки.... как там писал К.Маркс - наблюдается переход количественных изменений в качественные. :))))))))) Quote Share this post Link to post Short link Share on other sites
Inside_Aneferu 0 #198971 Posted July 11, 2014 Проблему редактирования конфигов легко решил за 15 минут - накатал dll-ку с функциями поиска и замены текста в файлах UTF-8 формата. ЗЫ: Я вижу в этой теме народ стал потихоньку вылазить за рамки Inno Setup и плавно вливаться в Delphi и ObjPascal, вопросики стали появляться, dll-ки.... как там писал К.Маркс - наблюдается переход количественных изменений в качественные. :))))))))) я уже понял что онлайн конфигуратор не пашет :( , но в редакторе xctuner не увидел , где менять цвет по источнику урона , также в файле COLORS в конфиге при открытии через блокнот , тоже не нашел , где заменить цвет , сможете подсказать ? Кстати прошу прощения , что влез в эту тему со своими какулями , если необходимо перейти в другую - прошу показать , где будет беседа будет более актуальна , или если необходимо могу создать новую тему , спасибо за помощь и понимание. Quote Share this post Link to post Short link Share on other sites
AtotIK 580 #198972 Posted July 11, 2014 Умеет. Без сторонних библиотек можно редактировать те же конфиги XVM... они хоть и имеют расширение XC, а внутри все тот же json. Но я тебя сразу отговорю... лучше работай с заменой файлов ибо у пользователей полно проблем с ОС... и часто необходимо сперва все dll системы восстанавливать... Лично я только в конфиге миникарты делаю подмену false на true... и то, чтобы не жалко было функцию зря писать. Конечно может через "поиск-замену", это всё понятно, это всё используется. Но хочется большего, вот и всё, т.к. этим способом особо не разгонишься. Quote Share this post Link to post Short link Share on other sites