Automatizovaná úprava konfiguračního souboru

Automatickou úpravu konfiguračních souborů (nejen iRacing) lze využít hned z několika pádných důvodů. Může to být lenost, efektivita, především ale nemožnost využití záloh konfiguračního souboru při upgrade iRacing. Použít starý konfigurační soubor pro novou verzi iRacing prostě není dobrý nápad a Stream Editor je alternativou, jak obejít problém s užitím morálně zastaralých záloh.

A pokud jsem v předchozí části použil "efektivita", tak jsem to myslel až do samotného důsledku, který z Vás udělá uživatele sestavující příkazy pro Stream Editor za použití Ctrl+c a Ctrl+v.

V následující části se dozvíte:


Co je Stream Editor (sed.exe)

Stream Editor (https://cs.wikipedia.org/wiki/Sed) je textový editor (malý program), který je schopný automatizovaně provést několik transformací v obsahu textového souboru v jednom kroku. Umí toho poměrně dost, ale nás bude zajímat jen funkce vyhledat a změnit, jejíž zápis je "s/<stará hodnota>/<nová hodnota>/g", to za použití regulárních výrazů (https://cs.wikipedia.org/wiki/Regular_expression).

Jako příklad uvedu změnu rozlišení v režimu "okna"

jenž transformuje původní obsah souboru

windowedHeight=1440                     ; windowed mode heightwindowedWidth=2560                      ; windowed mode width

příkazem Stream Editoru

"s/windowedHeight=[-\.0-9]*/windowedHeight=1080/g"

"s/windowedWidth=[-\.0-9]*/windowedWidth=1920/g"

na nový obsah s hodnotami


windowedHeight=1080                     ; windowed mode height
windowedWidth=1920                      ; windowed mode width

kde zápis "[-\.0-9]*", regulární výraz, reprezentuje znaky "-", "." a jakoukoliv číslici "0","1","2","3","4","5","6","7","8","9", tj. libovolné číslo včetně desetinného a nebo záporného. Vlastní příkazy na změnu rozlišení by pak obsahovaly následující parametry:

sed.exe  -i -e "s/windowedHeight=[-\.0-9]*/windowedHeight=1080/g" %USERPROFILE%\Documents\iRacing\app.ini
sed.exe  -i -e "s/windowedWidth=[-\.0-9]*/windowedWidth=1920/g" %USERPROFILE%\Documents\iRacing\app.ini

a bylo by možné je i zřetězit na jednom řádku:

sed.exe  -i -e "s/windowedHeight=[-\.0-9]*/windowedHeight=1080/g" -e "s/windowedWidth=[-.0-9]*/windowedWidth=1920/g" %USERPROFILE%\Documents\iRacing\app.ini

Parametry programu sed.exe 

Stažení Stream Editoru

Při stahování pozor, Stream Editor vznikl ještě před existencí operačního systému Windows a v převážné míře narazíte právě na jeho verze pro UNIX a LINUX systémy. Musíte tedy hledat verzi spustitelnou pod Windows, například http://gnuwin32.sourceforge.net/packages/sed.htm. K tomu se sed.exe skládá z vlastního programu "Binaries" a sdílených knihoven "Dependencies". Stáhnete tedy oboje dvoje a obsahy "bin" adresářů obou zip souborů uložte do Vámi zvoleného adresáře (osobně používám složku C:\opt\gnuwin32\bin a je pro to důvod, kterému se říká Filesystem Hierarchy Standard).

Úkrok stranou k dalšímu zjednodušení

opět nepůjde o nic jiného, než o další zjednodušení vedoucí ke Ctrl+c a Ctrl+v. Pokud jde v obsahu souboru změnit jeden řádek

windowedHeight=1440                     ; windowed mode height

transformací na

windowedHeight=1080                     ; windowed mode height

tak pro Stream editor není nemožné provést změnu stejného řádku

windowedHeight=1440                     ; windowed mode height

jinou transformací na

"s/windowedHeight=[-\.0-9]*/windowedHeight=1080/g"

čím se vlastně vygenerují veškeré myslitelné transformační příkazy pro všechny řádky konfiguračního souboru iRacing, které obsahují v parametru číslo.

sed -e "s/[[:space:]]*;.*//g" -e "/^.*=[-\\.0-9]*/s/^\(.*\)=\(.*\)$/ -e \"s\/\1=\[-\\.0-9\]*\/\1=\2\/g\"/g" %USERPROFILE%\Documents\iRacing\app.ini

Za použití "menšítka" pak můžeme přesměrovat výstup na obrazovku směrem do vlastního souboru.

sed -e "s/[[:space:]]*;.*//g" -e "/^.*=[-\\.0-9]*/s/^\(.*\)=\(.*\)$/ -e \"s\/\1=\[-\\.0-9\]*\/\1=\2\/g\"/g" %USERPROFILE%\Documents\iRacing\app.ini > %USERPROFILE%\Documents\iRacing\app.my-transformation.txt

Jako příklad uvedu jen část předgenerovaných transformací z více jak 400 řádkového originálního konfiguračního souboru app.ini, které jsem uložil do app.my-transformation.txt

. . . -e "s/voice=[-\.0-9]*/voice=1/g" -e "s/voicePack=[-\.0-9]*/voicePack=/g"
[spectator] -e "s/defaultShotMode=[-\.0-9]*/defaultShotMode=3/g"
[SplitsDeltas] -e "s/comparisonLapFileName=[-\.0-9]*/comparisonLapFileName=/g" -e "s/deltaBarDisplayDeltabar=[-\.0-9]*/deltaBarDisplayDeltabar=1/g" -e "s/deltaBarDisplayLaps=[-\.0-9]*/deltaBarDisplayLaps=1/g" -e "s/deltaBarDisplayLapsTA=[-\.0-9]*/deltaBarDisplayLapsTA=1/g" -e "s/deltaBarDisplayRefCar=[-\.0-9]*/deltaBarDisplayRefCar=1/g" -e "s/deltaBarRangeOval=[-\.0-9]*/deltaBarRangeOval=0.500000/g" -e "s/deltaBarRangeRoad=[-\.0-9]*/deltaBarRangeRoad=2.000000/g" -e "s/disableAtRaceStart=[-\.0-9]*/disableAtRaceStart=1/g" -e "s/fadeGhostCarWhenClose=[-\.0-9]*/fadeGhostCarWhenClose=1/g" -e "s/ghostCarOffsetSec=[-\.0-9]*/ghostCarOffsetSec=0.000000/g" -e "s/ghostCarTransp=[-\.0-9]*/ghostCarTransp=0.350000/g"
[System Meters] -e "s/meterTypeGraphics=[-\.0-9]*/meterTypeGraphics=1/g" -e "s/meterTypeNetwork=[-\.0-9]*/meterTypeNetwork=1/g". . .

Vlastní úprava app.ini

se skládá z přípravy skriptu (Vámi vytvořeného souboru s příponou cmd), který definuje transformace, a jeho následného spuštění. Transformační skript lze spustit přímo ze souboru cmd a nebo z příkazové řádky, z důvodu opakovaného použití je ale vhodnější jeho uložení do vlastního souboru s názvem, který by popisoval vlastní transformaci. Nejdřív shrnu postup a pak se pustíme do provedení bez dalšího vysvětlování.

Pokud máte nastavenou konfiguraci iRacing v uvažované variantě A

Spusťte příkazový řádek (cmd.exe)

Do příkazové řádky napište (pokud jste použili C:\opt\gnuwin32\bin\ a konfigurační soubory iRacing máte ve standardní složce)

C:\opt\gnuwin32\bin\sed -e "s/[[:space:]]*;.*//g" -e "/^.*=[-\\.0-9]*/s/^\(.*\)=\(.*\)$/ -e \"s\/\1=\[-\\.0-9\]*\/\1=\2\/g\"/g" %USERPROFILE%\Documents\iRacing\app.ini > %USERPROFILE%\Documents\iRacing\app.my-transformation.txt

Přes <ENTER> spusťte příkaz

Proveďte záložní kopii s datem a časem v názvu souboru

set cdate=%date:~9,4%%date:~6,2%%date:~3,2%

Přes <ENTER> spusťte příkaz

set ctime=%time:~0,2%%time:~3,2%%time:~6,2%

Přes <ENTER> spusťte příkaz

copy /y %USERPROFILE%\Documents\iRacing\app.ini %USERPROFILE%\Documents\iRacing\app.%cdate%-%ctime%.ini 

Přes <ENTER> spusťte příkaz

Otevřete existující app.my-transformation.txt v obyčejném textovém editoru

notepad %USERPROFILE%\Documents\iRacing\app.my-transformation.txt

Přes <ENTER> spusťte příkaz

Otevřete nový soubor iRacing2fullhd.cmd, do kterého zapíšete skript na provedení požadovaných transformací

notepad %USERPROFILE%\Documents\iRacing\iRacing2fullhd.cmd

Přes <ENTER> spusťte příkaz

Do textového souboru iRacing2fullhd.cmd vložte na jeden řádek

%USERPROFILE%\Documents\iRacing\iRacing2fullhd.cmd

Přes <ENTER> spusťte příkaz

Maximálně si ještě můžete porovnat obsah mojí verze iRacing2fullhd.cmd, kterou jsem vyrobil stejným postupem:

C:\opt\gnuwin32\bin\sed -i -e "s/windowedHeight=[-\.0-9]*/windowedHeight=1080/g" -e "s/windowedWidth=[-\.0-9]*/windowedWidth=1920/g" %USERPROFILE%\Documents\iRacing\app.ini

Pokud máte nastavenou konfiguraci iRacing v uvažované variantě A, změňte jí na B

stejným postupem a vyrobte soubor app.my-transformation-v2.txt, který pak použijete pro vytvoření nového skriptu iRacing2CokolivVasNapadne.cmd

Poznámky k transformačnímu skriptuapp.my-transformation.txt je vytvořen pro transformace číselných hodnot na jiné číselné hodnotu (jako vzor vždy používá aktuální hodnoty z app.ini). Pokud budete mít zájem měnit nečíselné hodnoty, tak by byla transformace, s ohledem na užití speciálních řídících znaků v konfiguračních souborech, poněkud komplikovanější, ale šlo by to také.

Vlastní úprava rendererDX11.ini [rendererDX11*.ini]

Obdobným způsobem lze upravovat i konfiguraci parametrů grafického nastavení  %USERPROFILE%\Documents\iRacing\rendererDX11.ini. Kouzlo skriptu pak spočívá v tom, že nepřepíná hodnotu A na hodnotu B nebo hodnotu B na hodnotu A, ale libovolnou číselnou hodnotu na konkrétní číselnou hodnotu, čímž se stává původní hodnota (výchozí konfigurace) zcela irelevantní a obě varianty skriptů můžete spouštět nezávisle na ní.

Výchozí konfigurace iRacing (jen část pro ukázku)

CompressTexturesSuits=1                         ; 0=uncompressed   1=block compress (recommended)CompressTexturesHelmets=1                       ; 0=uncompressed   1=block compress (recommended)CompressTexturesCars=1                          ; 0=uncompressed (warning! no!!)   1=block compress (highly recommended)CompressedVertices=1                            ; 0=off  1=Use compressed vertices

Příkaz pro vypnutí komprese textur

C:\opt\gnuwin32\bin\sed.exe -i -e "s/CompressTexturesSuits=[0-9]*/CompressTexturesSuits=0/g" -e "s/CompressTexturesHelmets=[0-9]*/CompressTexturesHelmets=0/g" -e "s/CompressTexturesCars=[0-9]*/CompressTexturesCars=0/g" -e "s/CompressedVertices=[0-9]*/CompressedVertices=0/g" %USERPROFILE%\Documents\iRacing\rendererDX11.ini

Skriptem upravená konfigurace (jen část pro ukázku)

CompressTexturesSuits=0                         ; 0=uncompressed   1=block compress (recommended)CompressTexturesHelmets=0                       ; 0=uncompressed   1=block compress (recommended)CompressTexturesCars=0                          ; 0=uncompressed (warning! no!!)   1=block compress (highly recommended)CompressedVertices=0                            ; 0=off  1=Use compressed vertices

Příkaz pro zapnutí komprese textur

C:\opt\gnuwin32\bin\sed.exe -i -e "s/CompressTexturesSuits=[0-9]*/CompressTexturesSuits=1/g" -e "s/CompressTexturesHelmets=[0-9]*/CompressTexturesHelmets=1/g" -e "s/CompressTexturesCars=[0-9]*/CompressTexturesCars=1/g" -e "s/CompressedVertices=[0-9]*/CompressedVertices=1/g" %USERPROFILE%\Documents\iRacing\rendererDX11.ini

Skriptem upravená konfigurace (jen část pro ukázku)

CompressTexturesSuits=1                         ; 0=uncompressed   1=block compress (recommended)CompressTexturesHelmets=1                       ; 0=uncompressed   1=block compress (recommended)CompressTexturesCars=1                          ; 0=uncompressed (warning! no!!)   1=block compress (highly recommended)CompressedVertices=1                            ; 0=off  1=Use compressed vertices

Vizuální rozdíl při zapnuté a vypnuté kompresi textur