解答・コメントを送る方法
コメントを送るには2つの方法があります。
- 匿名でコメントを書くログインせずにコメントを書くことができます。 名前は「匿名」となります。
- アカウントを作成してコメントを書くアカウントを作成すると、記名での投稿ができます。 また、プロフィールページが作成され、 簡単なプロフィールや 統計情報が表示されるようになります。
投稿ボタンを押す前に以下の文章を確認してください
- 当サイトへの投稿は クリエイティブ・コモンズ・ライセンス BY(表示)および、その解釈に同意するものとみなされます。各ページには下のようにライセンス表示が行われます。
- あなたの投稿したコード・コメント・トピックが再利用・添削されることを望まない場合は、投稿をお控えください。
- 自分が書いていない、ウェブサイトや書籍などからの無断コピーは著作権の侵害です。著作権者の了解を得るか、自分で0から書いてください。
- 著作権の侵害、名誉毀損、など投稿内容に問題がある場合、削除することがあります。
- これらのことにあなたはあらかじめ同意したものとみなされます。
Post comment
Post a comment to the following challenge:
printf書式変換
(Nested
Flatten)
As a reply to the following comment: yamamoto: 完成度低めですが、ErlangとCの書式...(#9171) [show]

yamamoto
#9171()
[
Scala
]
Rating-2/2=-1.00
完成度低めですが、ErlangとCの書式変換など。 はじめ、Erlangで書こうとしたが挫折。 ScalaのExtractorで実装しはじめたものの、 Erlangの書式の柔軟さに負けた感のある今日この頃。
// printf書式文字列変換(お題 : http://ja.doukaku.org/259/) // // Erlangの書式文字文字列 <--> C言語の書式文字列 // コマンドラインargs先頭で処理を指定、残りの引数で書式指定 // c2e : C --> Erlang // e2c : Erlang --> C // 例) // c2e %f %020d %.20d %+20.10d %-20f %-20.10f // e2c ~f ~20.0p ~.20p ~20.10p ~-20f ~-20.10f // e2c ~10s ~-10s ~10.3.+s ~10.10.+s ~10.7.+s // ( ~10.3.+s ~10.10.+s ~10.7.+s はCの書式では正確に対応できません ) object Main { def main(args : Array[String]) : Unit = { args.toList match { case "e2c" :: xs => for(x<-xs ; ErlFormatTerm(flag,termF,termP,termPad,termMod,termC) = x ) { //println(flag,termF,termP,termPad,termMod,termC) print (x + " ---> ") val flags = (flag,termPad) match{ case ("-","" ) => "-" case ("-"," ") => "-" case ("-","0") => "-" case ("" ," ") => " " case ("" ,"0") => "0" case _ => "" } termC match { case "B" if termP=="8" => println ( CFormatTerm(flags,termF, "","o") ) case "B" if termP=="16" => println ( CFormatTerm(flags,termF, "","x") ) case "c" => println ( CFormatTerm(flags,termF,termP,"c") ) case "s" => println ( CFormatTerm(flags,termF,termP,"s") ) case "f" => println ( CFormatTerm(flags,termF,termP,"f") ) case "e" => println ( CFormatTerm(flags,termF,termP,"e") ) case "g" => println ( CFormatTerm(flags,termF,termP,"g") ) // case _ => println ( "未対応" ) } } case "c2e" :: xs => for(x<-xs ; CFormatTerm(flags,fieldWidth,precision,specifier) = x ) { print (x + " ---> ") val pad = flags match{ case "+" => "" case "-" => "" case " " => "" case "0" => "0" case _ => "" } val flag = flags match{ case "-" => "-" // case "+" => "" case " " => "" case "0" => "" case _ => "" } specifier match{ // F P Pad Mod C case "d" | "i" => println ( ErlFormatTerm(flag,fieldWidth,precision,pad,"","p") ) case "u" => println ( ErlFormatTerm(flag,fieldWidth,precision,pad,"","p") ) case "o" => println ( ErlFormatTerm(flag,fieldWidth, "8", "","","B") ) case "x" => println ( ErlFormatTerm(flag,fieldWidth, "16", "","","B") ) case "X" => println ( ErlFormatTerm(flag,fieldWidth, "16", "","","B") ) case "f" => println ( ErlFormatTerm(flag,fieldWidth,precision, "","","f") ) case "e" | "E" => println ( ErlFormatTerm(flag,fieldWidth,precision, "","","e") ) case "a" | "A" => println ( ErlFormatTerm(flag,fieldWidth,precision, "","","p") ) case "g" | "G" => println ( ErlFormatTerm(flag,fieldWidth,precision, "","","g") ) case "c" => println ( ErlFormatTerm(flag,fieldWidth,precision,pad,"","c") ) case "s" => println ( ErlFormatTerm(flag,fieldWidth,precision,pad,"","s") ) case "N" => println ( ErlFormatTerm(flag,fieldWidth,precision, "","","p") ) case "p" => println ( ErlFormatTerm(flag,fieldWidth, "16","0","","B") ) //case "%" => case _ => println ( "未対応" ) } } case Nil => case _ => } () } } object ErlFormatTerm{ // F.P.PadModC def apply(flag :String , termF:String , termP:String , termPad:String , termMod:String , termC:String) : String = { val tail = termMod+termC (termF,termP,termPad) match { // fmt0 case ("" ,"",_) => "~"+tail // // fmt1 case (f ,"", "") if f != "" => "~" + flag + f + tail // fmt2 case (f ,"",pad) if f != "" => "~" + flag + f +"."+pad+ tail // // fmt3 case ("" , p, _) if p != "" => "~."+p + tail // // fmt4 case (f , p, "") => "~"+ flag + f+"."+p +tail // fmt5 case (f , p,pad) => "~"+ flag + f+"."+p+"."+pad+tail } } // def unapply(format:String) : Option[(String,String,String,String,String,String)] ={ if ( format(0) != '~' ) return None val reFmt0 = """~([^.\d])""".r // ~s val reFmt1 = """~(-?)(\d+)([^.\d])""".r // ~10s , ~-10s val reFmt2 = """~(-?)(\d+)\.(.)([^.\d])""".r // ~10.+s val reFmt3 = """~\.(\d+)([^.\d])""".r // ~.5s val reFmt4 = """~(-?)(\d+)\.(\d+)([^.\d])""".r // ~-10.5s val reFmt5 = """~(-?)(\d+)\.(\d+)\.(.)([^.\d])""".r // ~-10.5.+s // format match { case reFmt0( termC) => Some("" , "","", "","",termC) case reFmt1(flag,termF ,termC) => Some(flag,termF,"", "","",termC) case reFmt2(flag,termF,termPad ,termC) => Some(flag,termF,"", termPad,"",termC) case reFmt3( termP ,termC) => Some("" , "","", "","",termC) case reFmt4(flag,termF,termP ,termC) => Some(flag,termF,termP, "","",termC) case reFmt5(flag,termF,termP,termPad,termC) => Some(flag,termF,termP,termPad,"",termC) case _ => None } } } object CFormatTerm{ // %[flags][fieldWidth][.precision]specifier def apply(flags:String , fieldWidth:String, precision:String , specifier:String ) : String = { "%"+flags+fieldWidth + {if(precision!="") "."+ precision else ""} +specifier } // def unapply(format:String) : Option[(String,String,String,String)] ={ if ( format(0) != '%' ) return None // val reFmt0 = """%([a-zA-Z])""".r val reFmt1 = """%([-+ 0#])([\d*]+)([a-zA-Z])""".r val reFmt2 = """%([\d*]+)([a-zA-Z])""".r val reFmt3 = """%([-+ 0#])([\d*]+)\.([\d*]+)([a-zA-Z])""".r val reFmt4 = """%([\d*]+)\.([\d*]+)([a-zA-Z])""".r val reFmt5 = """%\.([\d*]+)([a-zA-Z])""".r format match { case reFmt0( specifier) => Some( "", "", "",specifier) case reFmt1(flags,fieldWidth, specifier) => Some(flags,fieldWidth, "",specifier) case reFmt2( fieldWidth, specifier) => Some( "",fieldWidth, "",specifier) case reFmt3(flags,fieldWidth,precision,specifier) => Some(flags,fieldWidth,precision,specifier) case reFmt4( fieldWidth,precision,specifier) => Some( "",fieldWidth,precision,specifier) case reFmt5( precision,specifier) => Some( "", "",precision,specifier) case _ => None } } }Rating-2/2=-1.00-0+
[ reply ]