JANコードで覚えたこととかメモとか記録とか

Ruby バージョン クラス化してみた

2015年3月28日 14:32:18

ちょっと変えました
ruby の Hash は Hash.new したときに、hash[key] = ○、○の初期値を決めることができます。....
たとえば
h = Hash.new(0)
通常は h["test"] = "tesutesu" のように値を入れます
初期値を決めるとh[key]だけで自動的に値が代入されます。
print h["test"] => 0
そこでもしかして自作した関数の答えを入れることができるんじゃないかと思ったらその通り、hash[key] = jan(key)が可能でした
関数で kotae = jan(jancode) を1個1個やってもいいですが、 Hash型に継承したクラスからできたオブジェクトに、 [KEY](JANコード)を入れるだけでVALUE(文字列)がセットされるようにしてみました。

jan = Jan.new
p jan["4901681502516"] => "X9D88DDKLMQSMRZ"
jan.show => {"4901681502516" => "X9D88DDKLMQSMRZ"}

みたいに!
こっちのほうがおもしろいよね。[KEY]にJANコードを入れると文字列が返り、オブジェクト内の Hash に追加されていきます。
showっていうメソッドで return hash型しますのでeach {|k,v|}して使ってね
optionていうhashを引数にすればのちにいろんなことができそうです。 とりあえず置換の rep を文字列、もしくは2種類以上の置換できるように配列でいれるとJANコードの中のハイフンなどを除去できます

よく考えたら、Class Jan < Hash してんのにオブジェクト内にHash型を作成する必要ないですね
初期値の設定もいいけど [](key) を再定義すればいいみたいですね、作り直しました。
.newの引数に Hash型 :rep (シンボルにしました) の値を文字列(rep: "-")、文字列の配列(rep: ["-","_"])を指定すると置換されます。
jan[key] keyにJANコードを入れたら jan(key) の計算をして value にセットされます。
配列をkeyに入れると配列をフラットにしてJANコードのみを文字列にし、それ以外をnilで返します。さらに1個ずつ self[key.to_sym] = value に登録されます
Hash型をkeyにすると登録されず nil を返します(key,valueを利用していろいろできそう)
一度入れたJANコードをシンボル化(:"4901681502516" ""が必要)するようにしました。毎回JANコードを入れて計算させるより、 シンボルの場合はsuper(key)でvalueを返すようにしました
Hash型を継承しましたので、.each .key? .value? .size などHash型のメソッド各種が使えるはずです

現在 Ruby の関数を作成中! => できました。

2014年12月11日 15:35:39
2014年12月18日 0:29:06

需要あるかわからん!
Javascript、エクセルのvbaともに、各文字列を選ぶ際にはswitch文を利用していましたが
配列のインデックスと同じであることに気付きました((((゜Д゜;))))今更!

んでさらに左側の白黒のバーは、01で区別してたんでこれもインデックスとし配列の配列にしてみました!
右側は画像には写ってませんがインデックス2の位置に文字列があります。
Barという配列の配列で解決できますね。

現在作成中のRubyバージョンは、jan() の引数に【文字列の数字】【配列】【数値】を入れて分岐しようと思っています。
今はまだ【文字列の数値】と【配列】の分岐しかされてませんが、数値の場合も追加予定です。
配列の場合は、配列を分解してJANにまっちするような形式なら文字列にしてしまうという感じ
JANじゃないならnilを返そうかなと。配列の形を維持したまま返されるはず(再起ってやつがこれであってんのかわからん!パソコンの再起動ならできるんだが)
また、チェックデジットだけを求めれるように jancd( 4901234 ) のようにすると チェックデジットの数字が返ってくるようにしました

def twelve(n)
  strJan = ""
  strJan << StartCode[n[0].to_i]
  6.times {|i| strJan << Bar[Initial[n[0].to_i][i].to_i][n[i+1].to_i] }
  strJan << "K"
  for i in 7..11
    strJan << Bar[2][n[i].to_i]
  end
  strJan << Bar[2][jancd(n)]
  strJan << "Z"
  return strJan
end

こんなかんじw
左側のバーの判定は1行ですよ1行(6.timesのとこ)
.to_i でうおおってなったけど1個1個やったらなんでもなかった
文章にすると
JANの1文字目の数字からパターンを取り出し、それを頭から順に6回取り出したものを、定数Barの配列のインデックスとして、JANの数字の2文字目から6回取り出したものをインデックスとして文字を取り出したものを順に strJan に入れていく
Rubyおもしれえええ(*´Д`*)

=jan()を使用できるようにアドインを導入し保存したエクセルファイルを別PCで使用したい場合

2014年7月28日 1:16:11
2014年7月30日 17:00:43
今までは、=jan() を自分のPCでしかやったことなかったのですが、
=jan() を使用したエクセルファイルを保存して
別のノートPC(アドイン導入済)で開いたところエラーがでることがわかりました。

同じアドインであっても、開いたときには、『=jan()』というユーザー定義関数のプログラムが書かれたファイルが見つかりません。
というエラーが出るようです。


いろいろググってみましたが、めんどくさくなったので麦茶を飲みながら10秒で解決方法を思いつきました。

説明するのもすっごいややこしいので答えからいいますw

使用するPCのアドインの保存先を全て同じにします。

例)
自宅PC C:\Excel\JANCODE-nicotan用エクセル.xla
他のPC C:\Excel\JANCODE-nicotan用エクセル.xla

単純なことでした。
こうすれば、エクセルはファイルパスが同じなので、=jan() というプログラムが書かれた xla を読むことができます。
これで、どっちでも使えるようになるはずです(たぶん)

この状況で、すでに保存してしまっていたファイルを開くと、 アドインのファイルパスが合わないはずなので、=jan() ってアドインファイルないやん!ってエラーが出てしまいます。

セキュリティの警告 リンクの自動更新が無効にされました
みたいなエラーが出るはずです(バージョンによって違います)
=jan() のセルを見るとわかるとおもいますが、
='C:\(ファイルパス)\JANCODE-nicotan用エクセル.xla'!jan(A1)みたいにファイルパスが入力されているとおもいます。

このファイルパスに保存されているアドインファイルの=jan()

ということです。

これが存在しないからエラーなのです。

アドインファイルの保存先はユーザー名なので、ユーザー名が一致しない限り存在しない
だったら

ファイルパス同じにすりゃいんじゃね?←コレです。


置換よりやはりリンク先の修正で。
アドイン導入済みであれば、単純に痴漢でおkです。お尻を触ってください。
検索する文字列→'C:\(ファイルパス)\JANCODE-nicotan用エクセル.xla'!
置換後の文字列→

こうすれば、ファイルパスが空白の文字列(削除)となり、=jan(A1) だけが残ります。
アドイン導入済みなので=jan(A1)が生きます


いろいろあるけどね、リンク先を正しいファイル先にするとか
別PCで使用する場合は、文字列化してしまうとか(コピペの値の貼り付け)

和文フォントにしておいたことでアンドロイドでも表示できた

2014年7月5日 13:50:40
この画像は google の nexus7 ちゃんです。
写っている画面の文字などは、この記事を書くためにわざわざガーーッと作ったテストなので気にせずにw
あ~でもこんなのを作ってる最中です

アンドロイドの端末に自分の作ったJANコードのフォントをインストールできるもんなのか グーグル先生に聞く前に、
『 css に font-face で指定すればPCにインストールされていないフォントでも表示できた。』
→ということはネクサス7ちゃんでも表示できんじゃね?!

ということでやってみたのがこの画像というわけです。

これでいったい何ができるかというと、WEBブラウザなのでタブレットにJANコードを動的に表示させることができます。
一旦画像にしないといけなかったものが、うちのフォントの場合は数字を文字に変換してそれをフォントを変えるだけで バーコードになります。
これによって、紙媒体に印刷したものをスキャンするのではなく、 タブレットに表示されたバーをそのまま読めばいいのです!!

使い方はいろいろできるでしょうね
ご覧のような注文を受け、お会計時に該当の商品をスキャンするのではなく、 画面に表示されたバーを読んでいけばおしまい。とか。

ローカルサーバーを持っている人限定というwすっごい限られますがw
css

@font-face {
  font-family: "JANCODE-nicBAR";
  src: url("JANCODE-nicBAR.ttf");
}
@font-face {
  font-family: "JANCODE-nicotan";
  src: url("JANCODE-nicotan.ttf");
}
.barcode {
  padding: 10px 40px;
  font-family: "JANCODE-nicBAR";
  font-size: 60px;
}
.barcode2 {
  padding: 10px 40px;
  font-family: "JANCODE-nicotan";
  font-size: 60px;
}

html

<article>
  <h2>スキャン台帳</h2>
  <table border="1">
    <tr>
      <th>てりやきマックバーガー</th>
    </tr>
    <tr>
      <td class="barcode">X9A10IFKLLPLSPZ</td>
    </tr>
    <tr>
      <th>ブラジルバーガービーフBBQ</th>
    </tr>
    <tr>
      <td class="barcode2">X9A10IFKLLPLSPZ</td>
    </tr>
  </table>
</article>

表示できたのは数字なしのバーのみの方(JANCODE-nicBAR.ttfの方)
下のほうは残念ながらフォントを表示できず文字のみの表示となっています。
数字付きの「シンボルフォント」はWEBブラウザでは表示できないようです?。(JANCODE-nicotan.ttfの方)

表示を確認したブラウザは、firefoxとchromeです。 どちらも数字付は表示されませんでした。

PCの場合はchromeはどちらも表示されます。(すげー)

ブラウザで表示できたってことはアンドロイドのアプリとか表示できそうですよね
ブルートゥースのバーコードリーダーつけてJANを読んでーとか
商品情報のページにバーコード表示させてーとか
つくれませんけども(;´ρ`)

お知らせ =jan() のアドイン簡単でしたw

2014年6月4日 16:11:12
エクセルのアドイン調べたら難しくなかった
てっきり、ツールバーに配置がどうのこうのとか、なんやかんやしなきゃいけないとか思ってたけど
function test() があればアドインとして保存して登録するだけで =test() ができるようになるそうです。

というわけで、専用エクセル名前を付けて保存。「エクセルのアドインとして保存」すればアドインになりますw

詳しい使用方法をエクセル版のページに追加しました。
※ページキャッシュで表示されると思うので、ページを更新してね



アドインの登録方法は、エクセルのバージョンによって画面が違います。
※2007は↓↓

保存先を指定してチェックボックスにレ点を入れると使用できます。
※2003は【ツール】→【アドイン】→おなじ

アドインを削除する場合は、アドインを削除すれして上記の手順を踏むと、
『ファイルが見つかりません。削除しますか?』と表示されるので消すことができます。

アドイン登録後は専用エクセルじゃなくとも =jan() が利用できます