Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Перенос данных из двух txt в 1 по контрольному значению

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

Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Technik_spat
Дата: 08-05-2025
Здравствуйте!
Помогите, пожалуйста, с советом.
У меня по работе скриптов, формируется два файла 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

Отправлено: 11:42, 02-07-2021

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Technik_spat:
огромный массив данных. »
Огромный — это сколько?

Отправлено: 12:23, 02-07-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


До 400 000 строк

Отправлено: 12:29, 02-07-2021 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Technik_spat, поместите amark_sgtin.txt и REPACK.txt в один каталог. Поместите следующий код:
Скрытый текст
Код: Выделить весь код
Option Explicit

Const adLockOptimistic = 3
Const adOpenStatic     = 3
Const adCmdText        = 1


Dim objFSO
Dim objRecordSet
Dim strPath2Script


Set objFSO       = WScript.CreateObject("Scripting.FileSystemObject")
Set objRecordSet = WScript.CreateObject("ADODB.Recordset")

strPath2Script = objFSO.GetParentFolderName(WScript.ScriptFullName)

With objFSO.CreateTextFile(objFSO.BuildPath(strPath2Script, "Schema.ini"), True)
	.WriteLine Join( _
		Array( _
			"[amark_sgtin.txt]", _
			"ColNameHeader=True", _
			"Format=Delimited(;)", _
			"TextDelimiter=none", _
			"CharacterSet=ANSI", _
			"", _
			"[REPACK.txt]", _
			"ColNameHeader=False", _
			"Format=Delimited(;)", _
			"TextDelimiter=none", _
			"CharacterSet=ANSI", _
			"Col1=SGTIN Text", _
			"Col2=Any Text", _
			"Col3=Price Text", _
			"", _
			"[ResultFile.txt]", _
			"ColNameHeader=True", _
			"Format=Delimited(;)", _
			"TextDelimiter=none" _
		), vbCrLf _
	)
	
	.Close
End With

If objFSO.FileExists(objFSO.BuildPath(strPath2Script, "ResultFile.txt")) Then
	objFSO.DeleteFile objFSO.BuildPath(strPath2Script, "ResultFile.txt")
End If

objRecordSet.Open "SELECT L.[SGTIN], R.[Price] " & _
	"INTO [ResultFile.txt] " & _
	"FROM [amark_sgtin.txt] AS L LEFT JOIN " & _
	"[REPACK.txt] AS R ON " & _
	"L.[SGTIN] = R.[SGTIN] " & _
	"WHERE L.[STATUS] IN (11, 99, 14)", _
	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath2Script & ";Extended Properties=""text;""", _
	adOpenStatic, adLockOptimistic, adCmdText

Set objRecordSet = Nothing
Set objFSO       = Nothing

WScript.Quit 0

в файл с расширением .vbs в тот же каталог. Запустите скрипт из сохранённого файла на исполнение (если у Вас x64 ОС — используйте x86-версию хоста wscript.exe/cscript.exe из каталога C:\Windows\SysWOW64). Если скрипт отработает корректно, Вы получите в том же каталоге результирующий csv-файл ResultFile.txt с искомым содержимым.

Например:


Последний раз редактировалось Iska, 03-07-2021 в 03:43.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:34, 03-07-2021 | #4


Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
C:\Windows\SysWOW64 »
ОГРОМНОЕ СПАСИБО)))) ОТРАБОТАЛО ОТЛИЧНО!!!!

Отправлено: 08:03, 03-07-2021 | #5


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Technik_spat, сколько по времени у Вас вышло?

Отправлено: 13:33, 03-07-2021 | #6


Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Конкретно по Вашему скрипту отработало до 17 000 строк (остальные тупо отвалились на этапе отбора по фильтру), в районе 1-3 минут.

Отправлено: 15:53, 03-07-2021 | #7


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Technik_spat:
отработало до 17 000 строк (остальные тупо отвалились на этапе отбора по фильтру) »
Не — это значит, что отработало все:
Цитата Technik_spat:
До 400 000 строк »
Цитата Technik_spat:
в районе 1-3 минут. »
Спасибо, ясно.

Отправлено: 19:04, 03-07-2021 | #8


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


А в 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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 06-07-2021 в 09:58.


Отправлено: 14:27, 04-07-2021 | #9


Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
А в Powershell сколько будет выполняться? (Подразумевается версия 5.1) »
Поуэершелл не проходит.
Цитата:
Необходимо предоставить выражение для значения справа от оператора "-".
At line:8 char:18

Неожиданный токен "in" в выражении или инструкции.
At line:8 char:19

Неожиданный токен "sgtin" в выражении или инструкции.
At line:8 char:22
Цитата Iska:
Не — это значит, что отработало все: »
Всё правильно отработало. Марки то выбывают ежедневно. Из огромного массива данных, в обороте не более 2500-3000 марок, в режиме ожидания выбытия как раз 15 000- 20 000 шутк, а остальные имеют признак архива, т.е. они вообще не нужны.

Отправлено: 09:49, 05-07-2021 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Перенос данных из двух txt в 1 по контрольному значению

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Выборочное копирование по значению в txt (csv) файлах Technik_spat Скриптовые языки администрирования Windows 4 05-06-2021 11:27
Установка - [решено] Перенос данных с HDD старой на нову, без потери данных, стороннего ПО и настроек ПО и Forgiven1 Microsoft Windows 10 7 23-10-2020 12:00
VBS/WSH/JS - Выбор данных из txt файла leks71 Скриптовые языки администрирования Windows 2 13-04-2015 20:00
Любой язык - Выборка данных из txt KarpovStas Скриптовые языки администрирования Windows 22 27-11-2013 17:16
CMD/BAT - [решено] Выбор данных из txt по маске hxygen Скриптовые языки администрирования Windows 4 24-10-2010 15:52




 
Переход