2016年9月21日水曜日

[Excel] 括弧によるマイナス

Excelでは(1)とセルに入力すると-1として判断される。
これはアメリカの経理において負数を()を使って記述するためである。

2016年9月7日水曜日

[ruby] File.unlink

ファイルの削除を行う。
removeも可

[ruby] Open3.popen3

標準入出力管理可能な子プロセス作成処理
ただし、バッファに難有
$instructions.each{|insn|
  printf("--- TEST: %s", insn)
  Tempfile.open(['xxx', '.s']){|fp|
    fp.puts("\torg\t100h")
    fp.puts("\t" + insn)
    fp.puts("\tend")
    fp.flush
   
    # system($assembler + " " + fp.path)
    Open3.capture3($assembler, fp.path)
    hexname = fp.path.sub(%r{\.s$}, ".hex")
    File.open(hexname){|hexfile|
      $results << TestResult.new(insn.chop, hexfile.read)
    }
    File.unlink(hexname)
  }
}

[ruby] JSON

JSON用クラス
文字列を渡してJSONオブジェクトを作ることができる。
print JSON.load("[#{$results.map{|e| e.to_json}.join(",")}]").to_s

[ruby] Tempfile

テンポラリファイルを作成するためのクラス
open()でテンポラリファイルを作成する。配列でプレフィックス、サフィックスを指定することができる。
ブロックを渡した場合はテンポラリファイルはそのブロック内で有効である。


  • 作られた オブジェクトはpathでファイル名を取り出すことができる。
  • ブロックから外れた時にはテンポラリファイルは自動で削除される。

$instructions.each{|insn|
  printf("--- TEST: %s", insn)
  Tempfile.open(['xxx', '.s']){|fp|
    fp.puts("\torg\t100h")
    fp.puts("\t" + insn)
    fp.puts("\tend")
    fp.flush
   
    # system($assembler + " " + fp.path)
    Open3.capture3($assembler, fp.path)
    hexname = fp.path.sub(%r{\.s$}, ".hex")
    File.open(hexname){|hexfile|
      $results << TestResult.new(insn.chop, hexfile.read)
    }
    File.unlink(hexname)
  }
}

[ruby] Array.flatten

配列の平坦化を行う。
変更を反映するflatten!もある。

[[1,2],3].flatten
→[1,2,3]

[ruby] 文字列フォーマッタ

rubyにはsprintfもあるが、特に必要ない。
%を使うことで同様のことができる。
"\t%d\t%s\n"%[lineno, line]

[ruby] Array.product

配列の直積を作成するメソッド

[a,b].product([1,2])
→ [[a,1],[a,2],[b,1],[b,2]]