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:

  1. co je Stream Editor

    1. jak fungují triviální transformace textu

    2. jak se používá Stream Editor (sed.exe)

    3. kde se dá pořídit

  2. Úkrok stranou

    1. jak si předgenerovat příkazy pro vlastní transformaci (k předgenerování použijeme také sed.exe, ale poněkud komplexnější zápis)

  3. Vlastní úprava konfiguračního souboru

    1. postup vytvoření skriptu na manipulaci s konfiguračním souborem

    2. funkční příklad pro konfigurační soubory iRacing

      1. App.ini

      2. rendererDX11.ini


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

  • -i znamená interaktivně (s tímto parametrem je vstupní soubor i výstupním souborem),

  • -e znamená definici transformace, a

  • poslední parametr na konci %USERPROFILE%\Documents\iRacing\app.ini definuje vstupní soubor.

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í.

  • Prvním krokem je spuštění iRacing s jednorázovým nastavením konfigurace a jeho následné vypnutí

  • Druhým krokem je vytvoření zálohy app.ini

  • Třetím krokem je vytvoření souboru se sadou transformací app.my-transformation.txt

  • Čtvrtým krokem je sestavení vlastního transformačního skriptu iRacing2fullhd.cmd

  • Pátým krokem je spuštění transformačního skriptu iRacing2fullhd.cmd

    • a finální ověření spuštěním iRacing, zda skript udělal co jím bylo zamýšleno

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

  • cestu k programu sed.exe

  • mezeru

  • parametr -i

  • mezeru

  • jednu nebo více transformací (v našem případě nastaveni rozlišení pro režim v okně) z předgenerovaného souboru s transformacemi app.my-transformation.txt

  • a na konec řádku ještě přidejte mezerou oddělenou cestu k souboru, se kterým má skript provádět manipulace (v našem případě cestu k app.ini)

  • v textovém editoru otevřený soubor iRacing2fullhd.cmd uložte a máte skript hotov. Již ho stačí jen spustit.

    • Buď dvojklikem na název souboru iRacing2fullhd.cmd, a nebo

    • přes příkazovou řádku zapsáním

%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

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