소수점에 세로 열을 정렬


9

이 포스트 를 이맥스에 썼습니다 . 테이블을 멋지게 보이게하기 위해 소수점이 깔끔하게 정렬되도록 간격을 조정하기로 결정했습니다. 데이터베이스 의 원래 형식 은 다음 과 같습니다.

emacs                11505 227          3.6       3.3         1.9         68.9          93.5        68         
vi                   1087  289          11.1      6.9         2.9         71.7          96.2        9          
wolfram-mathematica  2993  360          4         2.2         1.9         66.7          92.5        51         

그것은 꽤 가깝지만 열을 올바르게 정렬하고 모든 숫자를 줄이려고합니다. 네 번째 열은 다음과 같아야합니다.

 3.6
11.1
 4

정렬 명령을 가지고 놀았고 (선택적) 소수점에 테이블을 자동으로 정렬하는 방법을 찾을 수 없었습니다. 어떤 이유로 든 이 지침은 아무것도 정렬하지 못합니다.

을 사용하여 소수점을 기준으로 그림을 정렬 할 수도 있습니다 M-- M-x align.

답변:


8

먼저 버퍼가 텍스트 모드 인지 확인해야 합니다 .

M-x text-mode

텍스트 모드에서 C-- M-x align( text-dollar-figure정렬 규칙 을 호출 ) 첫 번째 십진수를 세로로 정렬합니다. 그러나 두 번째 십진 열을 정렬하지 못합니다. 또한 소수점이없는 숫자 (예 : wolfram-mathematica의 평균 점수 4)는 정렬하지 않습니다. 이 문제를 해결하려면 다음에서 규칙 값을 조정해야합니다 align-rules-list.

(text-dollar-figure
  (regexp . "\\$?\\(\\s-+[0-9]+\\)\\.?")
  (modes . align-text-modes)
  (repeat . t)
  (spacing . 2)
  (justify . t)
  (run-if lambda nil
      (eq '- current-prefix-arg)))

몇 가지 일이 있습니다.

  • 정규 표현식은 이제 선택적 후행 기간을 허용합니다.
  • 반복을 켜면 숫자의 각 인스턴스가 정렬됩니다.
  • 가독성을 위해 한 칸 대신 두 칸을 추가했습니다.

결과:

emacs                11505  227   3.6  3.3  1.9  68.9  93.5   68         
vi                    1087  289  11.1  6.9  2.9  71.7  96.2    9          
wolfram-mathematica   2993  360   4    2.2  1.9  66.7  92.5   51         

다소 동등한 방법은 다음을 호출하는 함수를 정의하는 것입니다 align-regexp.

(defun align-decimal (start end)
    "Align a table of numbers on (optional) decimal points."
    (interactive "r")
    (align-regexp start end "\\(\\s-*\\)\\$?\\(\\s-+[0-9]+\\)\\.?"
                  -2 0 t))

이 경우 가능한 한 원래 간격을 유지하기 위해 groups매개 변수를 음수로 설정하여 오른쪽 자리 맞추기를 설정 spacing하고 0 으로 설정했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.