当前位置: 首页 > 知识库问答 >
问题:

将真值表打印到odt文件中

司马振国
2023-03-14

我想打印真值表到一个表在一个adt文件,没有一个程序,但我不知道如何得到淡水河或值打印到odt文件,这个程序只是打印结果在屏幕上!

sub truth_table {
    my $s = shift;
    #print "$s\n";
    my  @vars;
    for ($s =~ /([a-zA-Z_]\w*)/g) {
        push @vars, $_ ;

    }
    #print "$s\n";
    #print "$_\n";
    #print Dumper \@vars;
    #print "\n", join("\t", @vars, $s), "\n", '-' x 40, "\n";
    #print Dumper \@vars;
    @vars = map("\$$_", @vars);
    $s =~ s/([a-zA-Z_]\w*)/\$$1/g;
    $s = "print(".join(',"\t",', map("($_?'1':'0')", @vars, $s)).",\"\\n\")";
    $s = "for my $_ (0, 1) { $s }" for (reverse @vars);
    eval $s;
}
truth_table 'A ^ A_1';

共有1个答案

华萧迟
2023-03-14

使用Capture::Tiny获取eval的结果,然后将字符串拆分为一个基于https://stackoverflow.com/a/4226073/5100564的二维数组。

use Capture::Tiny 'capture_stdout';

sub truth_table {
    #...the rest of your code here...
    my $stdout = capture_stdout {
        eval $s;
    };
    return $stdout;
}
$truth_string = truth_table 'A ^ A_1';
my @truth_array;
foreach my $line (split "\n", $truth_string) {
    push @truth_array, [split ' ', $line];
}
foreach my $line (@truth_array) {
    foreach my $val (@$line) {
        print $val;
    }
    print "\n";
}

为了使其工作,我根据安装缺少的Perl模块的最简单方法执行了以下命令?

cpan
install Capture::Tiny

但是,我将在LibreOffice中使用Python宏来解决这个问题。APSO使输入和运行这段代码变得很方便。

import uno
from itertools import product

def truth_table():
    NUM_VARS = 2  # A and B
    columns = NUM_VARS + 1
    rows = pow(2, NUM_VARS) + 1
    oDoc = XSCRIPTCONTEXT.getDocument()
    oText = oDoc.getText()
    oCursor = oText.createTextCursorByRange(oText.getStart())
    oTable = oDoc.createInstance("com.sun.star.text.TextTable")
    oTable.initialize(rows, columns)
    oText.insertTextContent(oCursor, oTable, False)
    for column, heading in enumerate(("A", "B", "A ^ B")):
        oTable.getCellByPosition(column, 0).setString(heading)
    row = 1  # the second row
    for p in product((0, 1), repeat=NUM_VARS):
        result = truth_function(*p)
        for column in range(NUM_VARS):
            oTable.getCellByPosition(column, row).setString(p[column])
        oTable.getCellByPosition(column + 1, row).setString(result)
        row += 1

def truth_function(x, y):
    return pow(x, y);

g_exportedScripts = truth_table,

以这种方式使用product的基础是为Python中的任何表达式创建真值表。

有关Python-UNO的更多文档,请访问https://wiki.openoffice.org/wiki/python。

 类似资料:
  • 我正在尝试使用docx4j将word文件转换为pdf,到目前为止我已经成功地转换了doc和docx文件,但是当我尝试加载odt文件时,我得到并且通过使用zip打开odt文件,我可以看到文件(但不是)

  • 问题内容: 我已经搜索过,但我只能找到有关另一种方式的问题:将stdin写入文件:) 有没有一种快速简便的方法将文件内容转储到stdout? 问题答案: 当然。假设您有一个字符串,文件名为,下面的技巧就可以了。

  • 问题内容: 我想将数组打印到文件中。 我希望文件看起来像这样的代码完全相似。 假设$ abc是一个数组。 是否有任何一种解决方案,而不是每次外观都是常规的。 PS-我目前使用序列化,但是我想使文件可读,因为使用序列化数组很难读取。 问题答案: 无论是或将返回输出,而不是打印出来的。 PHP手册中的示例 然后,您可以使用保存。或在写入文件时直接将其返回:

  • 问题内容: 如何将Java输出同时输出到Shell控制台和某个文件中?那可能吗? 问题答案: 您可以在程序的开头包含以下几行:

  • 问题内容: 我有一个文本文件,需要将其打印到特定的网络打印机。我知道打印机的名称。 到目前为止,我已经创建了Printable类来打印文件(票证)。 我这样称呼TicketPrintPage: 它的工作原理还不错,但是: -我的文本不多于一页(找到了一些算法,但是很好) -我不知道打印机何时完成打印,如果我尝试打印两页如果打印机连续打印了多张票证,则会返回“打印机未就绪”消息。 所以问题又来了:没

  • 问题内容: 我遇到了这种语法: 这个带有两个点的语法是什么? 在哪里可以找到有关它的信息? 它仅适用于布尔值还是以其他不同方式实现? 问题答案: 是条件运算符。(不只是一部分,整个方法参数是示例中条件运算符的一种用法。) 它通常被称为三元运算符,但这只是其本质的一个方面-具有三个操作数- 而不是其名称。如果在Java中引入了另一个三元运算符,则该术语将变得模棱两可。之所以称为条件运算符,是因为它有