Любой язык - как объединить два столбца из 2-х прайсов txt

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

Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение johnston »

Здравствуйте! Подскажите как можно объединить два разных прайса в один... Необходимо, в моем случае, приплюсовать 22% для определенного eparts (столбца) и эти цены привязать к другому partnumber (другого столбца прайса)??
Аватара пользователя
johnston

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение johnston »

johnston, не вижу приложенных образцов файлов в архиве.
Аватара пользователя
johnston

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение johnston »

Вот два файла. Stock - это прайс для просмотра наличия запчастей. А Другой файл price ( в сокращенном виде) - нужен как основной, т.е. посредством его обновляться должны автоматизированно цены в Stocke согласно partnumber. Видимо в моем случае, нужен Ассеss, как связующее звено, москва нам присылает эти два файла. Подскажите пожалуйста технологию создания БД, для этих прайсов, или есть еще какой то способ??
Аватара пользователя
johnston

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение johnston »

Вот два файла. Stock - это прайс для просмотра наличия запчастей. А Другой файл price ( в сокращенном виде) - нужен как основной, т.е. посредством его обновляться должны автоматизированно цены в Stocke согласно partnumber. Видимо в моем случае, нужен Ассеss, как связующее звено, москва нам присылает эти два файла. Подскажите пожалуйста технологию создания БД, для этих прайсов, или есть еще какой то способ??
Вложения
прайс общий.7z
(10.78 КБ) 0 скачиваний
прайс общий.7z
(10.78 КБ) 0 скачиваний
Вложения
Stock_201307180803.7z
(65.21 КБ) 0 скачиваний
Stock_201307180803.7z
(65.21 КБ) 0 скачиваний
Аватара пользователя
Iska

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение Iska »

Заголовки одного файла:

Код:

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

Бренд;Каталожный номер;Наименование русское;;Кол-во свободное

Заголовки другого файла:

Код:

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

Part Number;Part Number (blanks);Part name;D-Code;Supersession Code;Superssn;PPR eParts;DNP SO eParts;DNP VOR eParts;Category;Class;Product group;DISCgroup;Currentflag

johnston, к какому именно столбцу «плюсовать» 22%? Что значит «привязать к другому partnumber (другого столбца прайса)»? Как именно должны быть связаны между собой эти два csv-файла?
Аватара пользователя
johnston

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение johnston »

Iska, в общем про 25%( а не 22% извиняюсь) забыли, я поправил... Файл №1 Stock содержит к примеру каталожный номер 0000 8B N07 с наименованием и количеством определенных позиций( только по наличию на московском складе). Так вот, нужно в этот файл добавить столбец, с указанием цены. А цену нужно брать с общего прайса (файл №2) part number соответствующий - 0000 8B N07 и измененную на +25% цену ( только столбец - DNP SO eParts) равной в нашем случае - 4970. Файл stock обновляется каждую неделю, а price раз в месяц... Как привязать цены с прайса, к каталожным номерам stocka? Вот суть вопроса. Спасибо!
Аватара пользователя
Sphinx114

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение Sphinx114 »

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

Код:

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

@echo off
setlocal enabledelayedexpansion
for /f "skip=1 delims=" %%i in ('type "прайс общий.csv"') do (
set i=%%i
for /f "tokens=1,8 delims=;" %%e in ("!i:;=;\!") do (
set e=%%e
set f=%%f
set /a f=!f:~1!+!f:~1!/4
for /f "delims=" %%a in ('findstr /c:"!e:-=!;" Stock_201307180803.csv') do echo %%a;!f!
))>>diff.txt
Аватара пользователя
Iska

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение Iska »

johnston, как быть в том случае, если в файле «прайс общий.csv» отсутствует соответствующий «part number»? Например, первая же строка из «Stock_201307180803.csv»:

Код:

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

MAZDA;1988;ЧЕМОДАН;;24

? В файле «прайс общий.csv» отсутствует соответствующий «part number» «1988». Что делать?

Хреново, конечно, что связанные поля совершенно не совпадают (пробелы в произвольных местах значения поля), но, в принципе, ничего сложного (начало вывода):

Код:

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

Каталожный номер;DNP SO eParts;Price
1988;;
00008BN06;3260;4075
00008BN07;4970;6212.5
00008LN01;10740;13425
00008LN02B;6360;7950
00008LN05;1060;1325
011817313B;110;137.5
20876071;;
22327030;;
022327401A;390;487.5
022327402A;210;262.5
…
Аватара пользователя
johnston

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение johnston »

Цитата johnston:



Если отсутствуют соответствующие partnumber то это как говорится опустим)..
Любой язык - как объединить два столбца из 2-х прайсов txt




Мне непонятен смысл выражения «опустим» в данном контексте. Мне нужно точно знать, как потребно поступать в этом случае. Жду ответа.




Цитата johnston:



Скажите плизз, в чем выполняется скрипт, мне надо создавать. mdb Access??
Любой язык - как объединить два столбца из 2-х прайсов txt




WSH. Используется текстовый драйвер OLE DB. Вывод, начало которого приведено в предыдущем посте, получен с помощью примерно такого кода:


читать дальше »




Код:

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

Option Explicit
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = 1
Dim objFSO
Dim objTS
Dim objRecordSet
Dim objField
Dim strLine
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objRecordSet = WScript.CreateObject("ADODB.Recordset")
objRecordSet.Open _
	"SELECT * FROM [прайс общий.csv] ", _
	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "E:\Песочница\0301\Base" & ";Extended Properties=""text;""", _
	adOpenStatic, adLockOptimistic, adCmdText
Set objTS = objFSO.CreateTextFile(objFSO.BuildPath("E:\Песочница\0301\Base" ,"temp.csv"))
strLine = ""
For Each objField In objRecordSet.Fields
	strLine = strLine & objField.Name & ";"
Next
objTS.WriteLine Left(strLine, Len(strLine) - 1)
Do Until objRecordSet.EOF
	strLine = ""
	For Each objField In objRecordSet.Fields
		If objField.Name = "Part Number (blanks)" Then
			strLine = strLine & Replace(objField.Value, " ", "") & ";"
		Else
			strLine = strLine & objField.Value & ";"
		End If
	Next
	objTS.WriteLine Left(strLine, Len(strLine) - 1)
	objRecordSet.MoveNext
Loop
objTS.Close
Set objTS = Nothing
objRecordSet.Close
objRecordSet.Open _
	"SELECT L.[Каталожный номер], R.[DNP SO eParts], R.[DNP SO eParts] * 1.25 AS Price FROM [Stock_201307180803.csv] AS L " & _
	"LEFT JOIN [temp.csv] AS R ON L.[Каталожный номер] = R.[Part Number (blanks)]", _
	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "E:\Песочница\0301\Base" & ";Extended Properties=""text;""", _
	adOpenStatic, adLockOptimistic, adCmdText
strLine = ""
For Each objField In objRecordSet.Fields
	strLine = strLine & objField.Name & ";"
Next
WScript.Echo Left(strLine, Len(strLine) - 1)
Do Until objRecordSet.EOF
	WScript.Echo objRecordSet.Fields.Item("Каталожный номер").Value & ";" & objRecordSet.Fields.Item("DNP SO eParts").Value & ";" & objRecordSet.Fields.Item("Price").Value
	objRecordSet.MoveNext
Loop
objRecordSet.Close
WScript.Quit 0





и такой схемы «E:\Песочница\0301\Base\Schema.ini»:


читать дальше »




Код:

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

[Stock_201307180803.csv]
ColNameHeader=True
Format=Delimited(;)
TextDelimiter=none
CharacterSet=ANSI
[прайс общий.csv]
ColNameHeader=True
Format=Delimited(;)
TextDelimiter=none
CharacterSet=ANSI
[temp.csv]
ColNameHeader=True
Format=Delimited(;)
TextDelimiter=none
CharacterSet=ANSI





Код не оптимизирован и слеплен кое-как, только для демонстрации самой возможности. К сожалению, в Jet отсутствует как функция Transact-SQL «REPLACE», так и функция «Replace()», доступная в Microsoft Access, посему приходится сначала тупым перебором, фактически — чуть ли не «ручками», убирать пробелы из поля «Part Number (blanks)», создавая временный текстовый файл. Затем этот временный файл связывается с «Stock_201307180803.csv» и делается выборка. Я сейчас не помню навскидку, возможны ли манипуляции со структурой таблиц через текстовый драйвер, работают ли там UPDATE-запросы. Проще всего, конечно, будет генерировать новый[/i] текстовый файл.



Ещё один вопрос: имя файла «прайс общий.csv», очевидно, постоянное, так? А имя файла «Stock_201307180803.csv» — переменное, как минимум, зависящее от даты его формирования, правильно?
Аватара пользователя
johnston

Re: Любой язык - как объединить два столбца из 2-х прайсов txt

Сообщение johnston »

Да, имя файла - прайс - постоянное, а stock - переменное, совершенно верно....
Ответить

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