Excel読み取りコマンドができた。ただしOpen usp Tukubai依存

Pocket
LINEで送る

小児科の待合室からこんにちは。

エクシェル芸の修行の一環であるオフィス用コマンドをこの前から作ってますが、とりあえずシートの数字の文字列を読み込んで標準出力にゴモゴモと出すコマンドが完成しました。

続きを読む Excel読み取りコマンドができた。ただしOpen usp Tukubai依存

Pocket
LINEで送る

タブ・スペース問題に対するopen usp Tukubaiの対応および余計な一言

Pocket
LINEで送る

やっと確変が終わりました。あまり釣りに走らず、しっかり技術の話を書いておきます。検索で「Tukubai、スペース、タブ」でこのサイトに来てしまった人がいたので、ちゃんと説明しなければならんと。ただ、これはオープン版に対する私の解釈ですので、会社は関係ありません。

知ってる人は知っていて、私もいろんなところで説明を求められるのですが、Open usp Tukubaiはスペースでデータを区切ります。

やっと確変が終わりました。技術の話を書いておきます。検索で「Tukubai、スペース、タブ」でこのサイトに来てしまった人がいたので、ちゃんと説明しなければならんと。ただ、これはオープン版に対する私の解釈ですので、会社は関係ありません。

知ってる人は知っていて、私もいろんなところで説明を求められるのですが、Open usp Tukubaiはスペースでデータを区切ります。

ということはスペースを入れたかったらアンダースコアなどを代替せねばなりません。これがcsvにしろとか、tsv(タブ区切り)にしろとか、いろいろ言われる原因になってるわけです。普通に聞いてくれるならいいのですが、時間がないのに滔々と持論を並べる人がたまにいるものですから、うるさいと口に出してしまって互いに血まみれになることがあるわけです。

理由1: データのバグ防止

catした時にタブとスペースは区別がつきません。これがシェル芸的な作業の敵になります。

理由2: 普通のコマンドも大概スペース区切りのデータを扱う

残念ながらコマンドは英語圏で発達したので、テキスト処理系のコマンドは単語がスペース区切りになっていることが前提になってます。open usp Tukubaiもそれに合わせてスペース区切りです。

結局・・・

人の扱う文書やデータを扱っている以上、たとえスペースをアンダースコアに変換が必要であっても、今のところopen usp Tukubaiはスペース区切りを選んでいます。常に人の書くデータ、人の読むデータを扱う上では、そのような選択もお認めいただきたく。

夕飯。 続きを読む タブ・スペース問題に対するopen usp Tukubaiの対応および余計な一言

Pocket
LINEで送る

Haskell版のcgi-nameとketa

Pocket
LINEで送る

Haskell版のOpen usp Tukubaiのコマンド:cgi-namea.hsketa.hsをリリースしましたー。他にやることが山積みですが。

正月は実家に帰りますが基本、ずっと仕事の模様。

南無阿弥陀仏。

使い方

まずGHCでコンピャイル。

uedamac:COMMANDS.HS ueda$ ghc keta.hs 
[1 of 1] Compiling Main             ( keta.hs, keta.o )
Linking keta ...
uedamac:COMMANDS.HS ueda$ ghc cgi-name.hs 
[1 of 1] Compiling Main             ( cgi-name.hs, cgi-name.o )
Linking cgi-name ...

続きを読む Haskell版のcgi-nameとketa

Pocket
LINEで送る

Haskell版dayslash作った

Pocket
LINEで送る

前回に引き続きOpen usp Tukubaiネタ.dayslash.hsを作りました.日付けをフォーマットしたり,逆に取り除いたりするコマンドです.

コードが汚い・・・

https://github.com/usp-engineers-community/Open-usp-Tukubai/blob/master/COMMANDS.HS/dayslash.hs

コードは汚いけど,便利なんです.

uedamac:COMMANDS.HS ueda$ ghc dayslash.hs 
[1 of 1] Compiling Main             ( dayslash.hs, dayslash.o )
Linking dayslash ...
uedamac:COMMANDS.HS ueda$ echo 20130101 | ./dayslash "yyyy/mm/dd" 1
2013/01/01
uedamac:COMMANDS.HS ueda$ echo 20130101 | ./dayslash "yyyy/m/d" 1
2013/1/1
uedamac:COMMANDS.HS ueda$ echo "10時12分14秒" | ./dayslash -r "H時M分S秒" 1
101214
uedamac:COMMANDS.HS ueda$ echo 1970/12/20:12:34:50 | ./dayslash -r "yyyy/mm/dd/HH/MM/SS" 1
19701220123450

寝る!

Pocket
LINEで送る

Haskell版のformhame

Pocket
LINEで送る

HTMLのフォームに値をはめ込むというマニアックコマンドformhameをHaskell化しました.

GitHub | Open-usp-Tukubai / COMMANDS.HS / formhame.hs

半日しか時間がなかったので半日なりにとても汚いコードになってしもうたのですが,htmlがformhameの想定している書式になっていれば,という非常にわがままな条件付きでマニュアル通りに動きます.ただし,まだ-iや-dには対応してません.

formhameの想定しない書式というのは,例えばinput要素で途中に改行を入れると動かないとか,最後が「/>」で終わっていないとか,そういう,HTMLでは許されているようなことですので,ちょっとこのままではいかんなーと思います.

その上,Tukubaiコマンドは伝統的にhtmlを扱うときには真面目にパースしないので,それに準じて真面目にパースしないコードになってます.若い人が見たら発狂しそうだ・・・.

こんなコードを晒すくらいならちゃんとParsecでパースした方がいいような気もする.まあ,何もアップしないよりはマシ.

収穫はHaskellで正規表現を使う方法をマスターしたこと.しかしこれ,Haskellっぽくない.乱用は禁物かも.

寝る.

Pocket
LINEで送る

江頭問題の解決

Pocket
LINEで送る

以前、
http://www.usptomo.com/PAGE=20130326HSTARR
で、「Haskellでopen usp Tukubaiのコマンドを作ったけど、ByteStringを使うと『江頭』という単語が文字化けする」とで騒いでいました。このときはStringを使う事で回避したのですが、入力データが大きくなるとやはり激烈に遅い。

この問題、words関数を自作したらあっさり解決しましたのでここに書いておきます。

まず、だめな例。

bsd /home/ueda$ cat egashira.hs 
import System.Environment
import System.IO
import Data.ByteString.Lazy.Char8 as BS hiding (length,take,drop,filter,head)

main :: IO ()
main = BS.getContents >>= BS.putStrLn . BS.unwords . BS.words

bsd /home/ueda$ echo "栃木 江頭 江頭 栃木" | ./egashira 
? ?木 江? ? 江? ? ? ?木

以下が小手先の修正。

bsd /home/ueda$ cat egashira.hs
import System.Environment
import System.IO
import Data.ByteString.Lazy.Char8 as BS hiding (length,take,drop,filter,head)

main :: IO ()
main = BS.getContents >>= BS.putStr . BS.unwords . egaWords

egaWords :: BS.ByteString -> [BS.ByteString]
egaWords str = split ' ' str
bsd /home/ueda$ echo "栃木 江頭 江頭 栃木" | ./egashira 
栃木 江頭 江頭 栃木

うーん。open usp Tukubai についてはとりあえずこれでいいか・・・。Python版をHaskell版のコマンドに置き換える作業、やる気がでてきた。

Pocket
LINEで送る