Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Cравнения параметров из двух файлов и перенос значений (http://forum.oszone.net/showthread.php?t=337413)

ZerG666 27-10-2018 14:10 2837954

Cравнения параметров из двух файлов и перенос значений
 
Есть два файла, порядок строк и их количество не одинаковые, каждая строка начинается с символов $* и заканчивается параметр символом = далее идет значение, задача найти каждый параметр из первого файла во втором, и если он есть, то заменить значением из второго файла, если такого параметра нет во втором файле - перейти к следующему пераметру

Пример строк:

Что есть

$*abnormalStatusInfo-N08_Ogre_Leader_DefDown-description_k=· Reduces Physical Defense and Magical Defense each by 15% for each stack.
$*abnormalStatusInfo-K10_guido_shield-description_k=<font color='#e4f365'>Guido protects himself with magic.</font>
$*abnormalStatusInfo-N12_Elite_WhiteFox_Frozen-description_k=<font color='#e4f365'>Your feet are slowly becoming frozen.</font><br>\n· Reduces Movement Speed by 5%\n· Rooted if stacked 5 times

Что требуется

$*abnormalStatusInfo-N08_Ogre_Leader_DefDown-description_k=· -15% от физ. и маг. защиты при каждом повторении
$*abnormalStatusInfo-K10_guido_shield-description_k=· <font color='#e4f365'>Гвидо защищает себя темной магией.</font>
$*abnormalStatusInfo-N12_Elite_WhiteFox_Frozen-description_k=· <font color='#e4f365'>Ноги понемногу замерзают.</font><br>·\n-5% от скорости движения\nСвязывание после 5 применения

Kazun 27-10-2018 14:54 2837965

Код:

Get-Content 2.txt | Foreach {$f2= @{}} {
    $a,$b = $_.split("=",2)
    $f2[$a]=$b
}

Get-Content 1.txt | Foreach {
    $a,$b= $_.split("=",2)
    if($f2[$a]) {
        "{0}={1}" -f $a,$f2[$a]
    } else {
        $_
    }
}


Iska 27-10-2018 15:54 2837972

Цитата:

Цитата Kazun
$a,$b= $_.split("=",2) »

Не знал, что тут можно и массив пользовать ;).

ZerG666 27-10-2018 16:14 2837979

Спасибо, в итоге такой скрипт вышел, а что сделать чтоб он сам имена файлов брал из папки, количество не большое, но в ручную каждый лениво
Код:

$file2 = 'ENG\PetInfo.ENG'
$file1 = 'RUS\PetInfo.ENG'
$file3 = 'RUS_ENG\PetInfo.ENG'

Get-Content $file1 | Foreach {$f2= @{}} {
    $a,$b = $_.split("=",2)
    $f2[$a]=$b
}

Get-Content $file2 | Foreach {
    $a,$b= $_.split("=",2)
    if($f2[$a]) {
        "{0}={1}" -f $a,$f2[$a]
    } else {
        $_
    }
}|set-content $file3 -enc Default


Kazun 27-10-2018 22:07 2838018

Код:

Get-ChildItem 'ENG\*.ENG' | Foreach {
        $file2 = $_.FullName
        $file1 = "C:\RUS\$($_.Name)"
        $file3 = "C:\RUS_ENG\$($_.Name)"

        Get-Content $file1 | Foreach {$f2= @{}} {
                $a,$b = $_.split("=",2)
                $f2[$a]=$b
        }

        Get-Content $file2 | Foreach {
                $a,$b= $_.split("=",2)
                if($f2[$a]) {
                        "{0}={1}" -f $a,$f2[$a]
                } else {
                        $_
                }
        }|set-content $file3 -enc Default
}



Время: 13:44.

Время: 13:44.
© OSzone.net 2001-