プログラミング
このドキュメントの目的 他言語で作業している同僚プログラマに自分が Python で記述したプログラムを 引き継いでもらうための手ほどきを主な目的とする。 プログラムについての理解はあるものとし、 Python 独特の部分を中心に解説する。 筆者の主観で考え…
文字列テーブルデータ変換処理ツールはコマンドラインから行う物としてユーザーインターフェースを作成します。 当然 CUI ですので、どんなコマンドラインオプションを用意するかを考えます。 まず、このツールは文字列テーブルの csv ファイルを読み込んで…
前回までで取り出したラベルと文字列データのタプルおよび文字列データのオフセット辞書の情報をまとめて バイナリデータを出力します。コメントによる擬似コードは以下のようになります。
csv を読み込んで作成した入力データを整理して、出力に必要なデータを作成します。 入力データを for でまわし、文字列データの重複チェック&オフセットの計算、 およびラベルの重複エラーチェックを行おうと思ったのですが、割と複雑になってしまうので …
id:bonlife さんより助言を頂いたのでスクリプトをちょこっと修正してみました。
昨日のコメントによる擬似コードを実際のスクリプトで実装したものが以下になります。
まず CSV を読み込んで入力データを整形する部分を作ります。プログラムは Python を使います。 Python には CSV を扱うモジュールがあるのでこれを利用しようと思いますが、 初めてなので動作をみてみます。
文字列データを元データからプログラム中で読み込んで使用するバイナリデータに変換するプログラムを考えます。 この変換処理への入力は、ラベルと文字列データの組です。この入力の表現は抽象的なもので、具体的な元データはスプレッドシートです。 スプレ…
文字列テーブルから文字列を取り出すときには対になるラベルを用います。 C++ の場合には enum を使って実現するのが効率が良いと思われます。 ラベル 日本語 英語 STR_HELLO こんにちは。 Hello. STR_BYE さようなら。 Good bye. このテーブルから enum { S…
StringIO モジュールを使います。 #coding:shift-jis from StringIO import StringIO f=StringIO() f.write("日本語で Hello.") print f.tell() 15(07/12/20) str と unicode を混同していました。 こんなことしなくても len("日本語") は shift_jis で 6, u…
コード中に文字列を直接埋め込まず一箇所にまとめて管理するというのは 国際化しやすくするというのが一般的に主な理由だったと思いますが、 それとは別に出来上がる実行ファイルのサイズを小さくしたいという理由で 文字列テーブルデータを作ろうかと思いま…
再利用性が高いってのは凝集度とか結合度とかそんな話以前に、 「あれ、この関数前も作ったはずだけどどこで定義してたっけ…」 とかいうのをなくさないとダメなんだなぁと、ちょくちょく思いました。
Python もそこそこに IronPython に手を出そうとしてみる。 Python 本体よりも、 .Net Framework に慣れるのが重要そう。 逆に、コレを通じて .Net Framework の勉強になるのかも。
色々の練習も兼ねて、 Python で、 Twitter の public timeline から 名前を拾ってきて表示するプログラムを作成しました。 from xml.etree import ElementTree from urllib import urlopen e = ElementTree.ElementTree(file=urlopen("http://twitter.com/s…
カプセル化、カプセル化と考えていると、メンバ変数について無闇に取得させないほうが良いだろうかと そんな風に思って setter は用意したのに getter を作らなかったりしていた時期がありました。 あるクラスのクライアントが何か値をセットするときにはそ…
Python を使って Twitter から欲しい情報だけ取ってくるようなことができんかなーと いろいろ調べてたら python による twitter API のラッパーがあるそうで、 試してみようかと思ったら simplejson なるものが必要といわれ、 じゃあ simplejson をインスト…
いざというときのために Lua を試してみました。バージョンは 5.1。以下のスクリプトを C++ から呼び出すテストをしてみました。 f = function () print("hello") end C++ 側のプログラムは以下のような感じ int _tmain(int argc, _TCHAR* argv[]) { // LUA …
python で線とか簡単に引けたらアニメーションデータを視覚化するときに 楽かもしれんなぁと思ってたら、 visual なるモジュールが存在し、 さらに graph というまんまグラフを描くためのものまでありました。 ひゃーこれはゆかい。 0.374146 0.483459 -0.53…
結論から言えば、変更が発生したときに処理の流れをつかみにくいのが良くありません。 for ( int index = 0; index < count; ++index ) { // .. 何かしらの処理 if ( condition[index] ) { goto NEXT; } // .. 何かしらの処理 NEXT: // .. 結果の処理 } さて…
今日ちょろっと書いていたコードのこと const size_t objCount = objArray.size(); for ( size_t objIndex = 0; objIndex < objCount; ++objCount ){ // objArray[objIndex] を順に処理 } for のカウンタのインクリメント部分が間違っています。 しかし objC…
C++ の思想としてキャストはなるべく無いほうが良い、というのがあって、 作った人の考えには従うようにした方が良いのだろうなという考えとともに reinterpret_cast も使わない方が良いのだろうか。と悩んできました。 そもそも reinterpret_cast の何がま…
C++ のキャストというと static_cast, dynamic_cast, const_cast, reinterpret_cast の 4 種類があります。 「 C++ の設計と進化(isbn:4797328541)」などを読むと分かるように C++ では キャストは極力使わないようにしたほうが良いという考えがあるようです…
ドラッグアンドドロップされたファイル名を取り出して、これを C の文字列にするために作った関数が 昨日の時点ではこうでした。 System::Void ConvertToSjisFromUnicode(std::string & sjisString, String ^ unicodeString) { array<unsigned char> ^ charArray = System::</unsigned>…