Sun Jul 21 16:01:36 JST 2013 (modified: Fri Sep 29 21:38:45 JST 2017)
views: 1056, keywords:プログラミング,Haskell,open,USP友の会,江頭 この記事は最終更新日が7年以上前のものです。

江頭問題の解決

以前、 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版のコマンドに置き換える作業、やる気がでてきた。

ノート   このエントリーをはてなブックマークに追加 
 

prev:pmat version 0.021pmat version 0.021 next:mallocの分かりやすくない説明

やり散らかし一覧

記事いろいろ