<div dir="ltr">Hi.<br><br>I worte some code. and fixed some errors with the help of good persons.<br>Now, this utility works properly in Stack environment.<br>How can I install this utility in other computer?<br>This utility use text-icu and I coded this utility on windows. Of course, I want to work this utility on other windows OS.<br><br>I copied %stackPath%\.stack-work\install\~\bin\samCheceker-exe.exe to some other folder, and execution through CMD.<br>But I got error message that says "libicuuc57.dll dose not exist. so program can't start. please re-install the program."<br>I copied libicuuc57.dll, and so... as like programming newbees, but failed. "stack install" command was the same result.<br><br>How can I install the Executable File to other windows system?<br><br>Thank you.<br><br>Sincerely, S. Chang.<br><br><br><br>------------------<br>samChecker.cabal<br>------------------<br>name:                samChecker3<br>version:             0.1.0.0<br>-- synopsis:<br>-- description:<br>homepage:            <a href="https://github.com/githubuser/samChecker3#readme">https://github.com/githubuser/samChecker3#readme</a><br>license:             BSD3<br>license-file:        LICENSE<br>author:              Author name here<br>maintainer:          <a href="mailto:example@example.com">example@example.com</a><br>copyright:           2017 Author name here<br>category:            Web<br>build-type:          Simple<br>extra-source-files:  README.md<br>cabal-version:       >=1.10<br><br>library<br>  hs-source-dirs:      src<br>  exposed-modules:     Lib<br>  build-depends:       base >= 4.7 && < 5<br>                     , text<br>                     , text-icu<br>                     , bytestring<br>                     , regex-tdfa<br>  default-language:    Haskell2010<br><br>executable samChecker3-exe<br>  hs-source-dirs:      app<br>  main-is:             Main.hs<br>  ghc-options:         -threaded -rtsopts -with-rtsopts=-N<br>  build-depends:       base<br>                     , samChecker3<br>                     , text<br>                     , text-icu<br>                     , bytestring<br>                     , regex-tdfa<br>  default-language:    Haskell2010<br><br>test-suite samChecker3-test<br>  type:                exitcode-stdio-1.0<br>  hs-source-dirs:      test<br>  main-is:             Spec.hs<br>  build-depends:       base<br>                     , samChecker3<br>  ghc-options:         -threaded -rtsopts -with-rtsopts=-N<br>  default-language:    Haskell2010<br><br>source-repository head<br>  type:     git<br>  location: <a href="https://github.com/githubuser/samChecker3">https://github.com/githubuser/samChecker3</a><br><br>-----------<br>Main.hs<br>-----------<br>module Main where<br><br>import Lib<br>import System.Environment<br>--import System.FilePath.Windows<br>import Data.Text.ICU.Convert       -- There is Codec.Text.IConv, too.<br>import qualified Data.Text         as T<br>import qualified <a href="http://Data.Text.IO">Data.Text.IO</a>      as TIO<br>import qualified Data.ByteString   as BS<br><br>main :: IO ()<br>main = do<br>        args <- getArgs    -- 1st=SAM 2nd=csv<br>        conv <- open "MS949" Nothing<br>        -- byteSAM :: ByteString<br>        --byteSAM <- BS.readFile "C:\\Users\\shaeg\\Documents\\Haskell\\samChecker3\\BoHom.dat"<br>        byteSAM <- BS.readFile (args !! 0)<br>        -- byteRxDxData :: ByteString<br>        --byteRxDxData <- BS.readFile "C:\\Users\\shaeg\\Documents\\Haskell\\samChecker3\\RxDxData.csv"<br>        byteRxDxData <- BS.readFile (args !! 1)<br>        TIO.putStrLn $ T.concat $ checkRxDxSAM (toUnicode conv byteRxDxData) (toUnicode conv byteSAM)<br><br>-----------<br>Lib.hs<br>-----------<br>module Lib<br>--    ( readSAM<br>--    , readCSV<br>--    , checkRxDxSAM<br>--    ) where<br>      where<br><br>import Data.Text                 as T<br>import <a href="http://Data.Text.IO">Data.Text.IO</a>              as TIO<br>import Data.Text.ICU.Convert<br>import qualified Data.ByteString as BS<br>import Text.Regex.TDFA<br>import Data.Text.ICU             as I<br>import Prelude hiding (take, drop, map, lines)<br><br>type RowSAM = Text<br>type SAM = [Text]<br>type Case = Text<br>type RowRxDx = Text<br>type RxDx = [Text]<br>type RxDxList = [[Text]]<br>type Rx = Text<br>type Dx = Text<br>type MediName = Text<br>type Message = Text<br>type ErrorMessage = Text<br>type Date = Text<br>type PtName = Text<br><br>checkRxDxSAM :: RowRxDx -> RowSAM -> [ErrorMessage]<br>checkRxDxSAM rxDx sam = [pickupError r s | r <- (makeTuple rxDx), s <- makeSamData sam]<br><br>makeSamData :: RowSAM -> SAM<br>makeSamData sam = splitIntoCase sam<br><br>makeTuple :: RowRxDx -> [(Rx, Dx, MediName)]<br>makeTuple rxDx = zip3 (makeRxList rxDx) (makeDxList rxDx) (makeMediNameList rxDx)<br><br>makeMediNameList :: RowRxDx -> [MediName]<br>makeMediNameList rxDx = fmap pickupMediName $ makeRxDxList rxDx<br><br>makeDxList :: RowRxDx -> [Dx]<br>makeDxList rxDx = fmap pickupDx $ makeRxDxList rxDx<br><br>makeRxList :: RowRxDx -> [Rx]<br>makeRxList rxDx = fmap pickupRx $ makeRxDxList rxDx<br><br>makeRxDxList :: RowRxDx -> RxDxList<br>makeRxDxList rowRxDx = fmap f (lines rowRxDx)<br>    where<br>        f :: Text -> [Text]<br>        f x = splitOn (pack ",") x<br><br>pickupError :: (Rx, Dx, Message) -> Case -> ErrorMessage<br>pickupError (rxCode, dxCode, errMsg) ptCase =<br>    case isErrorRxDx rxCode dxCode ptCase of<br>        --True  -> append (pickupCaseDate ptCase) $ append (pack " ") $ append (pickupPtName ptCase) $ append (pack " Omit ") $ append dxCode $ append (pack " for ") errMsg<br>        True  -> append (pickupCaseDate ptCase) $ append (pack " ") $ append (pickupPtName ptCase) $ append (pack " Omit ") $ append dxCode $ append (pack " for ") $ append errMsg (pack "\n")<br>        False -> T.empty<br><br>pickupMediName :: RxDx -> MediName<br>pickupMediName rxDx = rxDx !! 0<br><br>pickupDx :: RxDx -> Dx<br>pickupDx rxDx = rxDx !! 2<br><br>pickupRx :: RxDx -> Rx<br>pickupRx rxDx = rxDx !! 1<br><br>pickupPtName :: Case -> PtName<br>pickupPtName ptCase = take 3 $ drop 45 ptCase<br><br>pickupCaseDate :: Case -> Date<br>pickupCaseDate ptCase = take 8 $ drop (348 + 2) ptCase<br><br>isErrorRxDx :: Rx -> Dx -> Case -> Bool<br>isErrorRxDx rxCode dxCode ptCase =<br>    case isExistRx rxCode ptCase of<br>        True  -> if (isExistDx dxCode ptCase) then False else True<br>        False -> False<br><br>isExistDx :: Dx -> Case -> Bool<br>--isExistDx dxCode ptCase = (unpack ptCase) =~ (unpack dxCode)<br>isExistDx dxCode ptCase = <br>    case (I.find (regex [] dxCode) ptCase) of<br>        Just x  -> True<br>        Nothing -> False<br><br>isExistRx :: Rx -> Case -> Bool<br>isExistRx rxCode ptCase = rxCode `isInfixOf` ptCase<br><br>splitIntoCase :: RowSAM -> SAM<br>splitIntoCase = splitOn $ pack "AH021"<br><br>--readCSV :: IO Text<br>--readCSV = pack <$> readFile "/Users/shaegis/Documents/Haskell/samChecker3/RxDxData.csv"<br><br>--readSAM:: IO Text<br>--readSAM = pack <$> readFile "/Users/shaegis/Documents/Haskell/samChecker3/BoHomUTF8.dat"<br><br><br></div>