長文失礼します。
二百五+十=
を読み込み、書き込みファイルへ
二百五+十=二百十五
と出力することが今回実行したいことです。
下記ソースで、
例)三四+一五二=一八六
といった計算処理までは行えています(エラー処理は未実装)。
追記したいのは、十、百、千、万を含んだ漢数字を数字変換する処理です。
二百→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
}
お礼
お礼が大変遅くなり申し訳ありません。アドバイスありがとうございます。