Как рассчитать столбец сумм или проверить неравенства?

0

Дано

34-2
34-5
34-3

Я ищу, чтобы получить

34-2=28
34-5=29
34-3=31

Или это также было бы полезно: учитывая:

34-2=5
34-5<=34
34-3=31

Я ищу, чтобы получить

!   34-2=5
    34-5<=34
    34-3=31

Где! Является ли указание на то, что неравенство или равенство ложно. Я ищу то, что обрабатывает текстовые файлы.

E A005
источник
Во втором случае было бы очень легко, если бы в линиях равенства использовались двойные знаки равенства, такие как " 34-2==5", а не только один, поскольку в большинстве языков программирования для присваивания используется один знак равенства.
Даниэль Андерссон
Я могу изменить знаки на что угодно, поэтому, где это =, я мог бы поставить ==.
E A005
Кроме того, я предполагал среду * nix, поскольку вы недавно задали этот вопрос в отдельном вопросе, но было бы хорошо, если бы вы могли уточнить, хотите ли вы конкретно решение * nix, или какую-то другую платформу или наиболее общее решение (Perl довольно общий, но для других людей, отвечающих, это может быть полезно знать).
Даниэль Андерссон

Ответы:

1

Первый случай

perl -nle 'print $_."=".eval($_)' filewithexpressions
  • -n петли над линиями.
  • -l удаляет символы новой строки $_, но разделяет выходные строки символами новой строки.
  • -e определяет выражение для запуска.
  • $_ является заполнителем для "текущей строки".
  • . объединяет строки.
  • eval()возьмет строку и оценит ее как код, например, eval('5+8')возвращает 13.

Второй случай

С двойными знаками равенства в инфиле, как отмечено в моем комментарии к исходному вопросу:

perl -ne 'print eval($_)?" ":"!",$_' filewithequalities

Как и прежде в общем.

  • -l не нужен / разыскивается, так как в этом случае новые строки позаботятся о себе.
  • ?:Конструкция является тройным оператором . Если предыдущее выражение истинно, верните пробел, в противном случае верните восклицательный знак.
Даниэль Андерссон
источник
0

Вот скрипт на python для обработки первой части вашего вопроса:

import sys
for line in sys.stdin:
    print "%s=%s" % (line.rstrip(), eval(line))

Вставьте приведенный выше код test.py, введите вход test.datи запустите так:

python test.py < test.txt

Я предполагаю, что Unix-подобная ОС. Обратите внимание, что может быть опасно передавать ввод в любой скрипт, который выполняется eval- не передавайте неизвестные данные этому скрипту.

jrennie
источник