2009-04-15 2 views
0

В UNIX я должен производить числовые результаты из предыдущих данных с помощью различных утилит командной строки. Эти утилиты считывают исходные данные (в общем, но не только из файлов csv), выполняют вычисления и записывают данные (опять же, в общем, но не только в файлы csv).Целочисленное вычисление данных. Сделать и альтернативы?

Конечно, я не хочу рисковать иметь устаревшие производные данные, поэтому мне нужно связать зависимость данных с помощью утилит. Тривиальное сходство можно увидеть в электронной таблице: когда вы меняете ячейку, все другие связанные с ней ячейки также изменяются каскадным образом. Однако из-за более сложного и автоматизированного характера моей задачи я не могу использовать электронную таблицу.

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

Перед тем, как приключить путь к файлу, я заинтересован в дополнительном вводе от вас. Есть ли у вас какие-либо предложения относительно того, как делать такую ​​обработку данных, улучшать утилит, а не делать, и как организовать макет файла (данных и make-файлов)?

ответ

1

Предполагая, что можно обнаружить, что записи базы данных новее, тогда должно быть возможно написать программу, которая устанавливает дату файла-дозорника на дату самой новой записи данных (или «сейчас», если это проще) в соответствующих исходных таблицах. Выполнение этого для каждой базы данных или запроса даст вам коллекцию дозорных файлов, которые можно использовать вместе с существующими исходными файлами CSV, чтобы прокормить дерево зависимостей и выполнить весь расчет стандартным образом.

Одним легким ответом на то, чтобы дозорные обновления обновлялись в каждой сборке, было бы использовать скрипт сборки, который запускает генератор прокси-данных данных, а затем делает вместо самой команды make.

Должна быть предусмотрена возможность создания автоматической корректировки часовых в качестве части обычной проверки зависимостей. Что-то вроде следующего (непроверенные) следует сделать трюк:

all: result 
clean: 
     -rm table_*.txt 
     -rm step*.csv 
     -rm results.txt 

results.txt: step2.csv 
     write_report -o results.txt step2.csv 

step1.csv: source.csv table_A.txt 
     do_step1 -o step1.csv source.csv 

step2.csv: step1.csv table_B.txt 
     do_step2 -o step2.csv 

table_A.txt: 
     touch_sentinel -o table_A.txt rawdata.sqlite A 

table_B.txt: 
     touch_sentinel -o table_B.txt otherdata.sqlite B 

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

+0

_very_ интересно. Благодаря! –

1

Некоторые альтернативы, которые приходят на ум:

  • Ant имеет довольно хорошую поддержку для настройки зависимостей с помощью Java.
  • SCons позволяет писать пользовательский код зависимостей с помощью Python.
1

Две другие альтернативы

  • Jam проект boost использует его и
  • QMAKE, используемый QT
1

Rake является реализация Рубин Dependency-ориентированного программирования, что в значительной степени вдохновленный Make and Ant, но много чище и приятнее в использовании.

В последнее время на сцене появился новичок, который называется Tap. Он также позволяет программировать на основе зависимостей, но расширяет его с помощью таких понятий, как Workflows. Он был разработан студенткой PhD biochemistry, которая работает в биомолекулярной исследовательской лаборатории, в частности, чтобы сделать именно то, что вы упомянули: хранение научных данных, полученных из экспериментов в актуальном состоянии.

+0

Мне не нравится рубин, но я вижу здесь несколько хороших идей. Вы знаете, существуют ли подобные инициативы для python? –