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

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

johnston 22-07-2013 10:21 2188487

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

Iska 22-07-2013 10:23 2188490

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

johnston 23-07-2013 09:50 2189012

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

Iska 23-07-2013 13:49 2189153

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

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

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 23-07-2013 19:28 2189356

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

Sphinx114 24-07-2013 06:48 2189548

Что-то совпадений между файлами мало. Осилил только строки для замены, здесь наверно 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 24-07-2013 12:39 2189736

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 26-07-2013 12:28 2191021

Здравствуйте, Iska! Если отсутствуют соответствующие partnumber то это как говорится опустим).. Скажите плизз, в чем выполняется скрипт, мне надо создавать. mdb Access?? Просто хотелось бы, чтобы Вы мне помогли с самим кодом, я очень редко сталкиваюсь с "прикладными вещами" )

Iska 26-07-2013 12:48 2191032

Цитата:

Цитата johnston
Если отсутствуют соответствующие partnumber то это как говорится опустим).. »

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

Цитата:

Цитата johnston
Скажите плизз, в чем выполняется скрипт, мне надо создавать. mdb Access?? »

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-запросы. Проще всего, конечно, будет генерировать новый текстовый файл.

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

johnston 31-07-2013 14:30 2193970

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

Iska 31-07-2013 17:07 2194050

johnston, я не могу продолжить, пока Вы не ответите:
Цитата:

Цитата Iska
Цитата:

Цитата johnston
Если отсутствуют соответствующие partnumber то это как говорится опустим).. »

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



Время: 00:19.

Время: 00:19.
© OSzone.net 2001-