アプリ版:「スタンプのみでお礼する」機能のリリースについて

長文失礼します。
二百五+十=
を読み込み、書き込みファイルへ
二百五+十=二百十五
と出力することが今回実行したいことです。

下記ソースで、
例)三四+一五二=一八六
といった計算処理までは行えています(エラー処理は未実装)。
追記したいのは、十、百、千、万を含んだ漢数字を数字変換する処理です。
二百→2*100
五→5
→205といった処理の実装がうまくいかず困っています。

基本的な事項についての質問ですが、ご教授いただけないでしょうか。
よろしくお願いします。


#漢字から数字へ変換
proc kanNum {s_stVal} {

set i_stval ""

if {$s_stVal == "一"} {
set i_stval "1"
}
if {$s_stVal == "二"} {
set i_stval "2"
}
if {$s_stVal == "三"} {
set i_stval "3"
}
if {$s_stVal == "四"} {
set i_stval "4"
}
if {$s_stVal == "五"} {
set i_stval "5"
}
if {$s_stVal == "六"} {
set i_stval "6"
}
if {$s_stVal == "七"} {
set i_stval "7"
}
if {$s_stVal == "八"} {
set i_stval "8"
}
if {$s_stVal == "九"} {
set i_stval "9"
}
if {$s_stVal == "十"} {
set i_stval "10"
}
if {$s_stVal == "百"} {
set i_stval "100"
}
if {$s_stVal == "千"} {
set i_stval "1000"
}
if {$s_stVal == "万"} {
set i_stval "10000"
}

set ret $i_stval
return $ret
}

#数字から漢字へ変換(計算結果)
proc numKan {s_ret} {

set result ""

if {$s_ret == "1"} {
set result "一"
}
if {$s_ret == "2"} {
set result "二"
}
if {$s_ret == "3"} {
set result "三"
}
if {$s_ret == "4"} {
set result "四"
}
if {$s_ret == "5"} {
set result "五"
}
if {$s_ret == "6"} {
set result "六"
}
if {$s_ret == "7"} {
set result "七"
}
if {$s_ret == "8"} {
set result "八"
}
if {$s_ret == "9"} {
set result "九"
}
if {$s_ret == "10"} {
set result "十"
}
if {$s_ret == "100"} {
set result "百"
}
if {$s_ret == "1000"} {
set result "千"
}
if {$s_ret == "10000"} {
set result "万"
}

set ret2 $result
return $ret2
}

#たす数たされる数を桁数分取得する処理
proc kResp {tmpchar} {
set len [string length $tmpchar]
set i 0
while {$i < $len} {
set tmpletter [string index $tmpchar $i]
incr i
set retRes [kanNum $tmpletter]
#if {$tmpletter == "一"} {
# set k_tal [expr $retRes * 100]
# append ret3 $k_tal
#} else {
append ret3 $retRes
#}

}
return $ret3
}


eval {

#ファイルパスの設定
set file_in "D:/tcl/Q.txt"
set file_out "D:/tcl/A.txt"
set iFile [open $file_in r]

while {[gets $iFile line] != -1} {
set lines(a) {}
#
if {[string match "*+*" $line]} {
set qstring [lindex [split $line "="] 0]
set s_stVal [lindex [split $qstring "+"] 0]
set s_stVal2 [lindex [split $qstring "+"] 1]


##計算value1
set n_forwa [kResp $s_stVal]
set r_kResp $n_forwa
puts $r_kResp

##計算value2
set n_forwa2 [kResp $s_stVal2]
set r_kResp2 $n_forwa2
puts $r_kResp2

##計算結果
set s_ret [expr $r_kResp + $r_kResp2]
puts $s_ret
set str3 $s_ret
set len3 [string length $str3]
set i 0
while {$i < $len3} {
set tmpchar3 [string index $str3 $i]
incr i
set sum [numKan $tmpchar3]
puts $sum
}
append r_result $sum
puts $r_result

}
lappend lines(a) "$line$r_result"
}
set oFile [open $file_out w]
foreach line $lines(a) {
puts $oFile "$line"
}
close $oFile

}

A 回答 (1件)

値を表す文字 (「一」~「九」) と位取りを表す文字 (「十」や「百」, 「千」など) とは意味が違うんだから, まとめて処理しようとすると困るかもしれん.



まず「一」~「九」を数値に直す手続を作って, それを使って 9999 までを処理できるような手続を作る. そうすれば「万」, 「億」などと組合せて表すことができる全ての数値を変換することができる.

同じ質問が 2つの異なる ID から出ているのはなんでだろう. 「1人で複数の ID を使っちゃいけない」きまりだったはずなんだけど.... 双子とかかなぁ?

参考URL:http://oshiete.goo.ne.jp/qa/7926664.html
    • good
    • 0
この回答へのお礼

お礼が大変遅くなり申し訳ありません。アドバイスありがとうございます。

お礼日時:2013/05/03 11:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!