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

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



武井と申します

今、テキストに書かれた数字を足し算してくれるlispを作ろうとしていますが、
なかなかうまくいかなくて困っています。
(恥ずかしいのですが、一番後ろにlispのコードをつけました
  こんな書き方はだめだというのがあったらご指摘願います。)

こんな感じのことをやりたいと思っています。
テキストに、
1
2
3
4
と書いておいて、これをリージョンかセレクションで範囲選択して
M-x sum とやると、合計は10ですよと計算してくれるlispです。

でもいまいちlispがわかっていなくて、添付のlispを実行すると
11.3とか小数点のついた文字をうまく数字に変換できなくて、
計算の対象となってくれません。

多分、ここら辺↓の書き方がバカだからだじゃないのかなと思います。

  (setq num (parse-integer (buffer-substring
    (progn (skip-syntax-spec-forward  "w_") (point))
    (progn (skip-syntax-spec-backward "w_") (point)))
      :junk-allowed t))

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

どなたかご教授をお願いいたします。

-----------------------ここから-------------------

(defun sum()
  (interactive )
  (let ( (total 0 ) (num)(cnt )(start-line)(end-line)(column (current-column)))
    (save-excursion
      (multiple-value-bind (end start)
          (ed::get-selection-start-end)
        (if start
            (progn)
          (progn
            (if (mark t)
                (progn
                  (setq start (mark))
                  (setq end   (point)))
              (progn
                  (msgbox "リージョンかセレクションにして下さい")
                (return-from sum nil)))))
        (setq start-line (progn  (goto-char start)  (current-line-number)))
        (setq end-line   (progn  (goto-char end)    (current-line-number)))
        (goto-line start-line)
        (setq cnt start-line)
        (while (< cnt end-line)
             (goto-bol)
             (setq num (parse-integer (buffer-substring
                   (progn (skip-syntax-spec-forward  "w_") (point))
                   (progn (skip-syntax-spec-backward "w_") (point)))
                                        :junk-allowed t))
             (msgbox "<< ~s >> " num )
             (if (numberp num)(setq total (+ total num)))
             (next-line 1)
             (setq cnt (current-line-number)))))
    (msgbox "total=~s" total)
    (newline)
    (insert "---------")
    (newline)    
    (insert (format nil "~A" total))
    (newline)        
    (insert "---------")
    (newline)
    total))


-- 
武井進 <susumu-takei@xxxxxxxxxxxxxxxxx>

Index Home