Любой язык - Перенос данных из двух txt в 1 по контрольному значению

Аватара пользователя
Technik_spat

Любой язык - Перенос данных из двух txt в 1 по контрольному значению

Сообщение Technik_spat »

Здравствуйте!

Помогите, пожалуйста, с советом.

У меня по работе скриптов, формируется два файла txt, в которых огромный массив данных.

Из этого массива, надо извлечь все данные с контрольным значением 11, 99, 14 (это значения, что марки ликвидные), скрепить их с данными из другого файла с ценой и вывести в отдельный txt файл в виде столбца SGТIN; цена

Т.е. примерно вот так: 048101330038010000008019952;;11; отсюда берем 048101330038010000008019952 по нему ищем в другом файле значение, эта строка будет выглядеть так: 048101330038010000008019952;KЪЙ5ТШOГNАUГНRЧПГ6Ц140; 55.00000000 а в итоге получить вот так: 048101330038010000008019952;55.00000000

Образцы файлов:

Это где sgtin по контрольным значениям
Файл 164836


А это где тот же sgtin но с ценой
Файл 164837
Аватара пользователя
Technik_spat

Re: Любой язык - Перенос данных из двух txt в 1 по контрольному значению

Сообщение Technik_spat »

Цитата:



[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 часть строк не имеет второго параметра(((
Аватара пользователя
Iska

Re: Любой язык - Перенос данных из двух txt в 1 по контрольному значению

Сообщение Iska »

Цитата Technik_spat:



отработало до 17 000 строк (остальные тупо отвалились на этапе отбора по фильтру)
Любой язык - Перенос данных из двух txt в 1 по контрольному значению




Не — это значит, что отработало все:


Цитата Technik_spat:



До 400 000 строк
Любой язык - Перенос данных из двух txt в 1 по контрольному значению





Цитата Technik_spat:



в районе 1-3 минут.
Любой язык - Перенос данных из двух txt в 1 по контрольному значению




Спасибо, ясно.
Аватара пользователя
Technik_spat

Re: Любой язык - Перенос данных из двух txt в 1 по контрольному значению

Сообщение Technik_spat »

А в Powershell сколько будет выполняться? (Подразумевается версия 5.1)



Код:

Код: Выделить всё

Measure-command -Expression {
$sgtin = (Import-Csv "C:\temp\amark_sgtin.txt" -Delimiter ';' -Encoding default |? status -match "^11$|^14$|^99$").sgtin
$prices = Import-Csv "C:\temp\REPACK.txt" -Delimiter ';' -Encoding default -Header sgtin,0,price |select sgtin,price
$result = @()
$prices |% {
    if ($_.sgtin -in $sgtin) {$result += $_}
}
$result |Export-Csv "C:\temp\result.csv" -Delimiter ';' -Encoding default -NoTypeInformation
}
pause
Аватара пользователя
DJ Mogarych

Re: Любой язык - Перенос данных из двух txt в 1 по контрольному значению

Сообщение DJ Mogarych »

Цитата DJ Mogarych:



А в Powershell сколько будет выполняться? (Подразумевается версия 5.1)
Любой язык - Перенос данных из двух txt в 1 по контрольному значению




Поуэершелл не проходит.


Цитата:



Необходимо предоставить выражение для значения справа от оператора "-".

At line:8 char:18



Неожиданный токен "in" в выражении или инструкции.

At line:8 char:19



Неожиданный токен "sgtin" в выражении или инструкции.

At line:8 char:22




Цитата Iska:



Не — это значит, что отработало все:
Любой язык - Перенос данных из двух txt в 1 по контрольному значению




Всё правильно отработало. Марки то выбывают ежедневно. Из огромного массива данных, в обороте не более 2500-3000 марок, в режиме ожидания выбытия как раз 15 000- 20 000 шутк, а остальные имеют признак архива, т.е. они вообще не нужны.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»