복소수 구문 분석을 위한 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 머리글 및 바닥글 텍스트가 인쇄됩니다 .

각 라인의 입력은 reim변수에 할당됩니다. 변수는 re허수 부분이 잘린 모든 것을 가져오는 반면, im변수는 이를 제거한 실제 부분을 가져옵니다 i.

숫자에는 숫자와 점만 포함되어 있다고 가정합니다.

그런 다음 데이터를 인쇄합니다.

관련 정보