用于解析复数的 Ultraedit 正则表达式

用于解析复数的 Ultraedit 正则表达式

我有一个 csv 文件,其中包含复数的数字表示形式。

-0.0272780+88932190i
0.2833029-10293882i
0.1990238+22901020i
0.3009823-22389991i

这是一个巨大的文件,我想将其转换为 C 头文件中的复数表示形式。

const Ipp32fc complexes[] = {
    {-0.0272780,88932190 },
    { 0.2833029,10293882 },
    { 0.1990238,22901020 }
    { 0.3009823,22389991 },
     ... // you get the idea

在查找/替换中我尝试过

[\+-]$

或者

[\+-](+)$

用逗号替换内部符号然后我将执行一个简单的查找/替换i并将其删除。

似乎无法获得正确的正则表达式。

答案1

awk在命令行上使用:

$ awk 'BEGIN { print "const Ipp32fc complexes[] = {" } END { print "};" } { re=im=$0; sub("[+-][0-9.]*i$", "", re); sub("^-?[0-9.]*", "", im); sub("i$", "", im); printf "\t{ %s, %s },\n", re, im }' file
const Ipp32fc complexes[] = {
        { -0.0272780, +88932190 },
        { 0.2833029, -10293882 },
        { 0.1990238, +22901020 },
        { 0.3009823, -22389991 },
};

awk添加了一些空格的命令:

awk '
    BEGIN { print "const Ipp32fc complexes[] = {" }
    END   { print "};" }
    {
        re = im = $0
        sub("[+-][0-9.]*i$", "", re)
        sub("^-?[0-9.]*", "", im)
        sub("i$", "", im)
        printf "\t{ %s, %s },\n", re, im
    }' file

BEGIN这会在和块中打印出所需的 C 语言页眉和页脚文本END,同时在较长的块中解析输入。

每行的输入都分配给reim变量。变量re获得虚部被截断后的所有内容,而im变量获得实部并被i删除。

假定数字仅包含数字和点。

然后打印数据。

相关内容