Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

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

Новый участник


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

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


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

Отправлено: 10:21, 22-07-2013

 

Ветеран


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

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


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

Отправлено: 10:23, 22-07-2013 | #2



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

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


Новый участник


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

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


Вложения
Тип файла: 7z Stock_201307180803.7z
(65.2 Kb, 10 просмотров)
Тип файла: 7z прайс общий.7z
(10.8 Kb, 10 просмотров)

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

Отправлено: 09:50, 23-07-2013 | #3


Ветеран


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

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


Заголовки одного файла:
Код: Выделить весь код
Бренд;Каталожный номер;Наименование русское;;Кол-во свободное
Заголовки другого файла:
Код: Выделить весь код
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-файла?

Отправлено: 13:49, 23-07-2013 | #4


Новый участник


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

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


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

Отправлено: 19:28, 23-07-2013 | #5


Старожил


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

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


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

Отправлено: 06:48, 24-07-2013 | #6


Ветеран


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

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


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
…

Отправлено: 12:39, 24-07-2013 | #7


Новый участник


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

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


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

Отправлено: 12:28, 26-07-2013 | #8


Ветеран


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

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


Цитата 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» — переменное, как минимум, зависящее от даты его формирования, правильно?

Отправлено: 12:48, 26-07-2013 | #9


Новый участник


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

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


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

Отправлено: 14:30, 31-07-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Объединить два винта в RAID0 iNoob Железо во FreeBSD 28 19-07-2012 23:16
2003/XP/2000 - [решено] Excel: График из столбца с датами. ven00m Microsoft Office (Word, Excel, Outlook и т.д.) 1 26-03-2012 03:07
CMD/BAT - [решено] объединить содержимое txt файлов caustic Скриптовые языки администрирования Windows 4 19-03-2011 14:34
Как объединить два скрипта в один Fantasy22 AutoIt 1 04-12-2009 12:32
Как объединить 2 видеофрагмента из разных файлов Den47 Видео и аудио: обработка и кодирование 8 23-10-2008 12:23




 
Переход