Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Консольная утилита обработки CSV файлов. Кто возьмется ? : Программирование

29.03.2024 8:28


28.02.2018 14:55
Starter
 
Тогда постараюсь написать более понятное ТЗ, попозже выложу. А утилита нужна - именно консольная, не в виде сервиса.
Файл один. Имя файла, знак разделителя, в каких колонках id, как данные обрабатывать (складывать или просто выводить) - в настроечном ini файле.
Почему утилита универсальная - потому что для разных случаев/отчетов состав данных будет разным. Все, разумеется, не предусмотришь, поэтому и нужны исходники, чтобы потом в случае чего подкорректировать можно было самостоятельно.
Пример использования утилитки - есть несколько баз, никак не связанных друг с другом. Т.е. названия разные, артикулы разные. Но штрихкоды совпадают. И вывести табличку - сравнение, кто по какой цене у кого закупает. Т.е. в строчках товары, в столбиках - данные по разным магазинам. Это один из примеров. Правда, наиболее сложный из примеров. Собрать данные из всех баз в файл я смогу, а вот дальше необходимо эти данные сагрегировать.
28.02.2018 16:57
AndreyZh
 
Цитата:
Starter Потребовалась утилитка для агрегации данных из csv файлов... Консольная, под Windows.
В плане отдыха от больших задач и тренировки мозгов могу сделать, когда точно пойму ТЗ. Система программирования xHarbour OpenSource (читай ANSI C) - быстрее некуда. Интерфейс, если самый простой: https://olegon.ru/showpost.php?p=260237&postcount=17 Стоимость работы от 7.0 до 12.0 тыр, т.к. условия задачи и хотелки однозначно будут меняться по мере выдачи результатов. Контакты есть здесь: https://olegon.ru/showthread.php?t=23281

Технически csv файлы будут закачиваться в массивы памяти и уже с ними будет работать программа в Ram, выдавая результат в txt или csv формате.
28.02.2018 22:54
Starter
 
Вот что то типа примерного варианта ТЗ:
Только в нем не учтена обработка сложных идентификаторов (типа списка штрихкодов), как описать итоги по таблице, или подитоги (при добавлении еще какого нибудь поля для группировки), сортировка. И вычисляемые поля в итоги/подитоги (типа процента наценки).
Кто знаком с СМ+ и бизнес анализом - это попытка получить из обыкновенной таблицы кросс-таблицу.

Бюджет ограничен - 10 т.р.

Код:
Утилита CSVAggregate
консольная утилита, среда - Windows x86,x64. Никакого интерфейса, дополнительных dll, установки, прав админа.

Назначение: агрегирование данных, содержащихся в текстовом файле с разделителем. Сопоставление идёт по некому идентификатору. 
идентификатор может быть простой (артикул, название, некая строка), либо сложный (несколько значений через разделитель). Регистр не должен иметь значение, т.е. ЯБлОкО и яблоко - это одно и то же.

пример сложного идентификатора (список штрихкодов):
4260369662431/4260369661564/4260369662943

пример исходного файла:
DB1;00001;Яблоко;65;33;11
DB2;00011;Яблоко;64;35;7
DB3;00021;Яблоко;63;31;8

где, к примеру, названия полей (их не будет в реале)
база;артикул;название;цена продажи;цена закупки;кол-во продажи 

Сопоставлять будем по полю 3 (название). Так как регистр не важен, то значение ключевого поля переводим  в верхний регистр.
пример выходного файла (здесь добавлю заголовки, чтобы было понятнее. В реале заголовков быть не должно).
Название;Цена продажи в магазине 1;Цена закупки в магазине1; Цена продажи в магазине2;Цена закупки в магазине2;Цена продажи в магазине3;Цена закупки в магазине3;Суммарное кол-во продаж по всем магазинам
ЯБЛОКО;65;33;64;35;63;31;26

т.е. принцип - у нас есть список баз (DB1,DB2,DB3). Он будет передаваться в качестве входного параметра при вызове. 
в выходном файле - для каждой базы будет добавляться набор колонок (определяемый в настроечном файле). т.е., предположим, мы будем добавлять цену продажи и цену закупки (это два поля), 
для каждой базы (в примере их три) будут добавляться по две колонки. Порядок добавления колонок определяется порядком в параметре. т.е. может быть DB1,DB2,DB3  а может быть DB3,DB1,DB2 
и еще будет добавляться поле - сумма. 

опции запуска:
-i - исходный файл
-o - файл с обработанными данными (файл дополняется, а не перезатирается при каждом запуске). 
-s - код разделителя (к примеру, chr(59) = ;  запятая - код 44)
пример запуска:
csvaggregate.exe -i filename1 -o filename2 -s 59 -d DB1,DB3,DB2

  
структура выходного файла определяется настроечным ini файлом. 
csvaggregate.ini
#код символа - разделителя для сложного идентификатора
sep_id=47
#номер колонки с уникальным идентификатором
col_id=3
#номер колонки, по которой добавляется набор столбцов (имена баз).  
col_agr=1 
## описание колонок в выходном файле
## 
col1=3  #в первой колонке - идентификатор (идентификатор не обязательно будет в первой строчке).
col2=4  
col3=5
col4=SUM(6)  #в 4 колонке - сумма значений по полю 6
01.03.2018 09:54
Starter
 
В продолжение ТЗ - о "сложных" идентификаторах.

Код:
сложный идентификатор и логика поиска
рассмотрим вариант сложного идентификатора
DB1;Яблоко;22/11/33;5
DB2;Яблоко зеленое;11/44;6
DB3;Яблочко;44/55;3
Это один и тот же товар. Идентификатор(общий) в это случае в выходном файле будет - все возможные сочетания. Название - будет браться, к примеру, только из одной базы (MAX(2) - максимальное значение из второй колонки)
идентификатор;название;цена в DB1;Цена в DB2;Цена в DB3
22/11/33/44/55;Яблочко;5;6;4

другой пример
DB1;Йогурт в асс;11/22/33/44;5
DB2;Йогурт с малиной;11;6
DB2;Йогурт с ежевикой;22;3
Это будет две строчки в выходном файле - 
Идентификатор;Название;Цена в DB1;Цена в DB2
11;Йогурт с малиной;5;6
22;Йогурт с ежевикой;5;3

Т.е. значение имеет - сколько совпадающих строк с одним именем базы. т.е. тот же самый пример выше, но в разных базах(магазинах) - будет только одна строка:
пример: 
DB1;Йогурт в асс;11/22/33/44;5
DB2;Йогурт с малиной;11;6
DB3;Йогурт с ежевикой;22;3
В выходном файле будет одна строка:
идентификатор;Название;Цена в DB1;Цена в DB2;Цена в DB3
11/22/33;Йогурт с малиной;5;6;3
И во вложении - то, что в СМ+ подразумевается под Кросс Таблицами, задача очень близка к этому - из простой таблицы получить "кросс таблицу".
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 196
Размер:	7.4 Кб
ID:	9258  
03.03.2018 10:07
AndreyZh
 
С утра сделал запланированный объем работ, ответил на почту и появилась возможность "поболтать"...
Цитата:
Starter Потребовалась утилитка для агрегации данных из csv файлов. Консольная, под Windows. Готовых не обнаружил, поэтому - вдруг кто возьмется сделать?
Цитата:
whitewizard на адинэске делается на коленке и ничего не стоит
Цитата:
Starter на 1с-ке я и сам могу сделать..
Цитата:
OlegON Такие файлы легко загоняются в Oracle через sqlldr, потом обскладывайся
Цитата:
Борис А в Эксел загнать? И макросами ее - макросами!
Цитата:
Ferus Из наработок уже есть что-то подобное. На днях конвертер делал для терминала cipher lab под нужды супермага. ... Сильно расплывчато описано ))) Универсальная программа на все случаи жизни будет стоить куда больше 10 т.р.
Цитата:
konst я у себя что то похожее делал - со всех магазинов выгружались продажи алкоголя с акцизными марками, копировалось на фтп-сервер
Цитата:
KirillHome Вот отрывок bat-файла, загоняющего данные в таблицу...
Цитата:
Starter В продолжение ТЗ - о "сложных" идентификаторах...
Всё это напомнило интересный текст из сообщения: https://olegon.ru/showpost.php?p=206054&postcount=26 Конечно Starter возможно решил "проблему", что можно задешево на ресурсах фрилансеров и сказанное мной будет казаться "глупым", но мне кажется это будет интересно не к задаче ТС, а просто, как тема для обсуждения.

Пока "ни о чём":

1. В давнюю пору попыток продвижения "УС Land" постоянно натыкался на "советы" и "мнения", что нечто очевидно и элементарно решаемо... Что "гасилось" простым аргументом "делай..." и оппоненты исчезали, т.к. "болтать - не мешки таскать"

2. Редко, но предлагал свои знания, как программиста и даже иногда "покупался" на "интерес" заказчика, но всё проходило единообразно: думал, описывал алгоритм, давал прототип... терял кучу времени... и "заказчик" исчезал

3. Сейчас (более 10 лет) стараюсь не вестись на "дармовщину", а лучше делать работы для реальных и проверенных клиентов, пусть и гораздо дешевле...

По задаче ТС: Это алгоритмическая задача, которые решают грамотные студенты в процессе обучения... и создав алгоритмы довольно несложно их запрограммировать на некотором ЯП. Однако для решения задачи нужно пройти несколько этапов, которые можно оценить во временных затратах. Цифры по времени условны и зависят от "остроты" ума:

1. Понимать задачу и описать понятным для себя языком, при этом 100% будут выявлены недочеты в её постановки, которые нужно будет уточнять у ТС... Примерно 4 часа при молнееносной реакции заказчика.

2. Разработать алгоритмы. Что-то типа прототипа блок-схем. Примерно 3 часа

3. Написать и отладить программу по данным предоставленным заказчиком. Примерно её "математическая" часть 200-1000 строк + интерфейсная обертка. Примерно 10 часов

4. Тестирование и доработка с заказчиком обмен письмами, доработки, вылавливания клопов. Пусть это совмещается с другой работой... Примерно чисто под задачу 6 часов

5. После запуска в реальную эксплуатацию, где появляются другие субъекты пользования 100% всплывают "недоработки" и замечания. Правка под реальные условия и получение удовлетворяющего всех результата. В предположении, что предыдущие этапы пройдены правильно примерно чисто под доработку задачи 6 часов

Итого всё примерно у исполнителя займет 29 ЧАСОВ. По студенческим расценкам периферии 500 р/час. Задача стоит 15 000

С удовольствием изучу или обсужу альтернативные мнения
03.03.2018 10:57
Starter
 
Как ТС отпишусь :)
Сумбурность ТЗ и попытка "впихнуть невпихуемое" обусловлена тем, чтобы минимизировать количество "хотелок" после разработки первой версии.

Изначальную задачу можно описать очень просто - из одной таблицы получить другую. В предыдущем моём посте есть картинка, по которой можно понять, чего хочется.
Ну а затем уже начинается - а неплохо было бы еще сделать группировки, сортировки, суммирование схожих данных, итоги, подитоги, предусмотреть возможность того, что идентификатор может быть набором значений (для сравнивания по штрихкодам).

Бюджет ограничен, и, думаю, мало кому понравится постоянно что-то допиливать. Поэтому и нужны исходники (чтобы потом самому по мелочам добавлять/изменять функционал). Предпочтительнее VB.
05.03.2018 10:40
Ferus
 
Цитата:
Starter Сумбурность ТЗ
Вот она и отталкивает

Цитата:
Starter Изначальную задачу можно описать очень просто - из одной таблицы получить другую
Цитата:
Starter Предпочтительнее VB.
Легко, бесплатно подкину идею как обработать большой объем данных в VB

Цитата:
Starter а неплохо было бы еще сделать группировки, сортировки, суммирование схожих данных, итоги, подитоги, предусмотреть возможность того, что идентификатор может быть набором значений (для сравнивания по штрихкодам).
Это уже целый аналитический комплекс, который решать лучше в готовых средах, а не писать заново.

p.s. как потом будете разбираться в чужом коде? Дело это не благородное )))
Часовой пояс GMT +3, время: 08:28.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.