[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:08859] Re: 小数点付き数字の文字列を数字に変換したい



どうも、加藤木と申します。


> 小数点付きの文字列をうまく数字に変換してくれる関数はないものでしょうか?

parse-integer は、整数っぽい文字列を整数に変換するだけです (たぶん)。
小数っぽい文字列を実際に小数として得たいということであれば、
read-from-string を使うのが楽かもしれません (もっと適したものがあるの
かもしれませんが)。

あと、scan-buffer に検索させながらポイントを進めてもらったほうが、簡単
なような気がします。

で、例えば、ある範囲内の *すべての数値っぽい文字列を* 加算するのでした
ら、こんな感じでしょうか (ちょっとテキトーですけど)。

(defun foo (from to)
  (let ((total 0))
    (save-excursion
      (save-restriction
        (narrow-to-region from to)
        (goto-char (point-min))
        (while (scan-buffer "[0-9]+\\(?:\\.[0-9]+\\)?" :tail t :regexp t)
          (incf total (read-from-string (match-string 0))))
        total))))

「各行で最初に出てくる数値っぽい文字列」であれば、while からの二行を

        (while (scan-buffer "\\([0-9]+\\(?:\\.[0-9]+\\)?\\).*$" :tail t :regexp t)
          (incf total (read-from-string (match-string 1))))

に変えればいいかなと。↓こんなんで試してみてください。

(defun bar (from to)
  (interactive "*r")
  (insert (format nil "~A" (foo from to))))

--
加藤木 洋一
ykatogi@xxxxxxxxxxxxxxxxxxx

Index Home