anonymous@RULINUX.NET~# Last login: 2024-03-28 23:03:12
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[автоматизация] Подстановка значений

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

  1.  1000+offset_x 2000+offset_y 100+delta_x 100+delta_y
  2.  ...

Но вот не знаю, какими средствами (sed, sh, что-то другое) потом такой шаблон обрабатывать, чтобы на выходе уже получились чистые данные. Не подскажите?

anonymous(*) (2009-07-28 15:55:44)

Mozilla/5.0 (X11; ; Linux i686; rv:1.8.1.22) Gecko/20090710

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

  1.  offset_x=33
  2.  offset_y=888
  3.  delta_x=11
  4.  delta_y=9999999000000
  5.  
  6.  echo "$((1000+${offset_x})) $((2000+${offset_y})) $((100+${delta_x})) $((100+${delta_y}))"
  7.  

anonymous(*)(2009-07-28 16:25:24)

[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

> echo "$((1000+${offset_x})) $((2000+${offset_y})) $((100+${delta_x})) $((100+${delta_y}))"

Это не шаблон, а sh-скрипт. Я хочу иметь _наглядный_ для любого читающего шаблон, который потом преобразовать в набор данных. Да и потом, я запарюсь набирать такую конструкцию пару тысяч раз :)

anonymous(*)(2009-07-28 16:40:52)

Mozilla/5.0 (X11; ; Linux i686; rv:1.8.1.22) Gecko/20090710
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

> Это не шаблон, а sh-скрипт.

А что ты имел в виду, когда писал "sh"?

> Я хочу иметь _наглядный_ для любого читающего шаблон, который потом преобразовать в набор данных.

По-моему вполне понятный шаблон. Пробуй ещё вот это средство: ttp://www.google.com/search?q=template%20<название_технологии_которой_владеют_твои_юзеры>

> Да и потом, я запарюсь набирать такую конструкцию пару тысяч раз :)

Сохрани в виде файла?

anonymous(*)(2009-07-28 16:46:23)

[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

А в каком виде входной набор данных? Если в виде текстовиков типа

  1.  1.0 2.0 3.0
  2.  2.0 4.0 6.0
  3.  ...
  4.  }
  5.  
  6.  то тут поможет awk (1p). Что-то вроде:
  7.  
  8.  code{
  9.  
  10.  cat <файл с данными> | awk '{printf "%f %f %f ", $1+$delata_x, $2+$delata_y, $3+$delata_z}'
  11.  
  12.  

marsijanin(*)(2009-07-28 17:05:16)

Emacs-w3m/1.4.335 w3m/0.5.2
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

> А что ты имел в виду, когда писал "sh"?

Обработать на sh, а не писать.

> По-моему вполне понятный шаблон.

Представь себе простого пользователя (да-да, того самого, который на компьютере владеет только методом "однопальцевого набора"), который будет это набирать или править. Что нагляднее

> echo "$((1000+${offset_x})) $((2000+${offset_y})) $((100+${delta_x})) $((100+${delta_y}))"

или

> 1000+X 2000+Y 100+dx 100+dy

??

Я хочу выполнить

  1.  cat filename | обработчик_этого_шаблона > data.txt

Причём, в зависимости от требуемого выходного формата, использовать разные обработчики.

anonymous(*)(2009-07-28 17:49:30)

Mozilla/5.0 (X11; ; Linux i686; rv:1.8.1.22) Gecko/20090710
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

> cat <файл с данными> | awk '{printf "%f %f %f ", $1+$delata_x, $2+$delata_y, $3+$delata_z}'

Вот, похоже на то. Надо будет только awk завернуть в sh, чтобы все эти delta_x не в командной строке задавать.

anonymous(*)(2009-07-28 17:52:54)

Mozilla/5.0 (X11; ; Linux i686; rv:1.8.1.22) Gecko/20090710
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

m4 -Doffset_x=42 -Doffset_y=15 -Ddelta_x=666 -Ddelta_y=-15 filename

anonymous(*)(2009-07-28 20:33:00)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20080331 Firefox/2.0.0.12
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

> m4 -Doffset_x=42 -Doffset_y=15 -Ddelta_x=666 -Ddelta_y=-15 filename

Хмм.. То есть эта конструкция будет работать для моего шаблона? Просто не сталкивался с m4.

anonymous(*)(2009-07-28 21:18:14)

Midori/0.1.8 (X11; Linux i686; U; ru-ru) WebKit/532+
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

Не, не прокатывает:

code{ >cat test.data0 100+X 20-Y 100+dx 20-dy 3453+X-1 493+2*Y 230-dx 20 >m4 -DX=0 -DY=40 -Ddx=9 -Ddy=100 test.data0 100+0 20-40 100+9 20-100 3453+0-1 493+2*40 230-9 20}

Как m4 сказать, чтобы он ещё и арифметику простую делал?

anonymous(*)(2009-07-28 21:28:17)

Midori/0.1.8 (X11; Linux i686; U; ru-ru) WebKit/532+
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

Блин, кривоформатирование.

Попытка #2:

  1.  >cat test.data0
  2.  100+X 20-Y 100+dx 20-dy
  3.  3453+X-1 493+2*Y 230-dx 20
  4.  >m4 -DX=0 -DY=40 -Ddx=9 -Ddy=100 test.data0
  5.  100+0 20-40 100+9 20-100
  6.  3453+0-1 493+2*40 230-9 20

anonymous(*)(2009-07-28 21:30:34)

Midori/0.1.8 (X11; Linux i686; U; ru-ru) WebKit/532+
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

Виноват, неправильно понял задание. Тогда лучше тот awk, что выше.

anonymous(*)(2009-07-28 21:33:25)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20080331 Firefox/2.0.0.12
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

  1.  Вообще, если немного подумать... я бы оформил это как исходник
  2.  какого-то языка, например, перла и потом делал бы eval и работал с
  3.  полученными данными. Например, так:
  4.  
  5.  test.data:
  6.  
  7.  @data = (
  8.   [ 100 + $X, 20 - $Y, 100 + $dx, 20 - $dy ],
  9.   [ 3453 + $X - 1, 493 + 2 * $Y, 230 - $dx, 20 ]
  10.  )
  11.  
  12.  обработка:
  13.  
  14.  #!/usr/bin/perl
  15.  
  16.  $X = 0;
  17.  $Y = 40;
  18.  $dx = 9;
  19.  $dy = 100;
  20.  
  21.  do 'test.data';
  22.  
  23.  # дальше работаем с массивом @data.
  24.  
  25.  Из плюсов — в test.data для работы доступны все возможности перла.
  26.  Из плюс-минусов — появляется необходимость разметки, но с другой
  27.  стороны как в первоначальном примере интерпретировать запись
  28.  
  29.  100 +X*2
  30.  
  31.  — как два числа или одно?
  32.  
  33.  Из минусов — необходимо доверять пользователям, чтобы у них не
  34.  возникло мысли вставить system('rm -rf /') в test.data.
  35.  
  36.  Если доверия к пользователем нет, то придётся много ухищряться
  37.  и тогда лучше подумать о другом способе представления данных.
  38.  

anonymous(*)(2009-07-28 21:49:40)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20080331 Firefox/2.0.0.12
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

#include <iostream> #include <cstdlib>

using namespace std;

int main(int argc, char *argv[]) { int offset_x = 111; int offset_y = 222; int delta_x = 333; int delta_y = 444;

if (argc-1 == 4) { cout << "offset_x = " << offset_x + atoi(argv[1]) << endl; cout << "offset_y = " << offset_y + atoi(argv[2]) << endl; cout << "delta_x = " << delta_x + atoi(argv[3]) << endl; cout << "delta_y = " << delta_y + atoi(argv[4]) << endl; } else cout << "Error parameters" << endl; return 0; }

anonymous(*)(2009-07-29 14:03:49)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.10
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

не осилил разметку.как?

anonymous(*)(2009-07-29 14:08:22)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.10
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:[автоматизация] Подстановка значений

http://www.lor-ng.org/page.php?id=2

Tuxoid(*)(2009-07-29 14:19:49)

Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1) Gecko/20090624 Firefox/3.5
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

test

  1.  #include <iostream>
  2.  #include <cstdlib>
  3.  using namespace std;
  4.  int main(int argc, char *argv[])
  5.  {
  6.   int offset_x = 111;
  7.   int offset_y = 222;
  8.   int delta_x = 333;
  9.   int delta_y = 444;
  10.   if (argc-1 == 4)
  11.   {
  12.   cout << "offset_x = " << offset_x + atoi(argv[1]) << endl;
  13.   cout << "offset_y = " << offset_y + atoi(argv[2]) << endl;
  14.   cout << "delta_x = " << delta_x + atoi(argv[3]) << endl;
  15.   cout << "delta_y = " << delta_y + atoi(argv[4]) << endl;
  16.   }
  17.   else
  18.   cout << "Error parameters" << endl;
  19.   return 0;
  20.  }
  21.  

anonymous(*)(2009-07-29 14:25:53)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.10
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:test

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

anonymous(*)(2009-07-29 14:32:55)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.10
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:test

Угу. Только ты забыл парсер ещё написать, вдруг криворукие пользователи начнут подсовывать буквы вместо цифр. В итоге получится не хилая такая программа.

anonymous(*)(2009-07-29 14:34:40)

Mozilla/5.0 (X11; ; Linux i686; rv:1.8.1.22) Gecko/20090710
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:test

xenom@ubuntu-desktop:~/param/bin/Debug$ ./param й ц у к offset_x = 111 offset_y = 222 delta_x = 333 delta_y = 444

anonymous(*)(2009-07-29 14:38:53)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.10
[#] [Добавить метку] [Редактировать] Ответ на: [автоматизация] Подстановка значений от anonymous 2009-07-28 15:55:44
avatar
Скрыть

Re:test

После code пробел не нужен

http://www.lor-ng.org/page.php?id=2

gnomino(*)(2009-07-29 14:50:24)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.1.1) Gecko/20090717 Fedora/3.5.1-1.fc11 Firefox/3.5.1
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!