複素数解析のための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

BEGINENDこれにより、長いブロックの入力を解析しながら、ブロックに必要なCヘッダーとフッターテキストが印刷されます。

各行の入力は、re変数imに割り当てられます。変数はre虚数部分が切り捨てられたすべてを取得しますが、im変数はそれを削除した実際の部分を取得しますi

数字には数字と点のみが含まれているとします。

その後、データを印刷します。

関連情報