Показать полную графическую версию : Перенос данных из двух txt в 1 по контрольному значению
Technik_spat
08-07-2021, 07:55
[q=alpap]или так:
$sgtin = 'C:\temp\amark_sgtin.txt'
$repack = 'C:\temp\REPACK.txt'
$out = 'C:\temp\out.txt'
Switch -Regex -File ($sgtin) {
'^(.+);{2}11;$|^(.+);{2}14;$|^(.+);{2}99;$' {
foreach ($i in $Matches[1]) {
Switch -Regex -File ($repack) {
"($i);.+;\s+(.+)$" {"$($Matches[1]);$($Matches[2])"|Out-File $out -app}
}
}
}
}
Нет, он нереально долгий((((( Только ожидание создания файла заняло более 5 минут(((((
Общее время работы скрипта, составило 50 минут((((
Но только обратил внимание, скрипт на power shell не пропускает строки. На vbs часть строк не имеет второго параметра(((
попробуйте еще так:
$sgtin = 'C:\temp\amark_sgtin.txt'
$repack = 'C:\temp\REPACK.txt'
$out = 'C:\temp\out.txt'
$csvSgtin = Import-Csv -Path $sgtin -delim ';' -Header SGТIN, H, Value
$csvRepack = Import-Csv -Path $repack -delim ';' -Header Name, H, Value
$a = ($csvSgtin|? Value -Match '^11$|^14$|^99$').SGТIN
$ar = [System.Collections.Generic.List[PSCustomObject]]::New()
foreach ($ib in $csvRepack.GetEnumerator()) {
foreach ($ia in $a) {
if ($ib.Name -eq $ia) {$r = $ib.Name+';'+$ib.Value; $ar.Add($r)}
}
}
$ar|Out-File $out
часть взял из кода DJ Mogarych, но его код у меня что-то не заработал
Technik_spat
08-07-2021, 14:25
попробуйте еще так: »
На pwsh7 предыдущий код пошустрее работает (вместо 50 минут, около 10 заняло), а этот вообще завис((((
исправил практически как у DJ Mogarych, не пойму почему у меня он не заработал, вроде все так же.
$sgtin = 'C:\temp\amark_sgtin.txt'
$repack = 'C:\temp\REPACK.txt'
$out = 'C:\temp\out.txt'
$csvSgtin = Import-Csv -Path $sgtin -delim ';' -Header SGТIN, H, Value
$csvRepack = Import-Csv -Path $repack -delim ';' -Header SGТIN, H, Value
$a = ($csvSgtin|? Value -Match '^11$|^14$|^99$').SGТIN
$r = foreach ($i in $csvRepack) {
if ($a -eq $i.SGТIN) {$i.SGТIN+';'+$i.Value}
}
$r|Out-File $out
Technik_spat
09-07-2021, 08:53
исправил практически как у DJ Mogarych, не пойму почему у меня он не заработал, вроде все так же. »
СПАСИБО)))))
Насчёт кода:
У Вас почему то в коде затесались не unikode буквы.
Попробуйте Ваш же скрипт, но скопировав отсюда:
$sgtin = 'C:\temp\amark_sgtin.txt'
$repack = 'C:\temp\REPACK.txt'
$out = 'C:\temp\out.txt'
$csvSgtin = Import-Csv -Path $sgtin -delim ';' -Header SGTIN, H, Value
$csvRepack = Import-Csv -Path $repack -delim ';' -Header SGTIN, H, Value
$a = ($csvSgtin|? Value -Match '^11$|^14$|^99$').SGTIN
$r = foreach ($i in $csvRepack) {
if ($a -eq $i.SGTIN) {$i.SGTIN+';'+$i.Value}
}
$r|Out-File $out
Кстати, теперь быстро обработалось. В течении минут 5 обработалось, правда я так понял, он сперва где то во временной папке данные формирует, а потом записывает в текстовый файл.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.