packages feed

cursedcsv 0.1.2 → 0.1.3

raw patch · 2 files changed

+34/−14 lines, 2 filesdep +conduitdep +conduit-extradep +csv-conduitdep −csv-enumeratordep −enumerator

Dependencies added: conduit, conduit-extra, csv-conduit, primitive, vector

Dependencies removed: csv-enumerator, enumerator

Files

code/CursedCSV.hs view
@@ -7,17 +7,14 @@  module Main where -import Control.Applicative import Control.Arrow-import Control.Exception(throwIO) import Control.Monad.State.Strict import Data.Char(isSpace) import Data.ByteString.Char8(unpack,pack,ByteString) import qualified Data.ByteString.Char8 as B-import Data.CSV.Enumerator-import qualified Data.Enumerator as E-import Data.Enumerator (($$))-import Data.Enumerator.Binary (enumHandle)+import Data.CSV.Conduit+import qualified Data.Conduit as C+import qualified Data.Conduit.Binary as C import Data.Function(on) import Data.List(insertBy, intercalate, mapAccumL, sortBy, transpose, find) import Data.Maybe(fromMaybe, isNothing)@@ -26,10 +23,15 @@ import System.Exit import System.IO import Text.Regex.TDFA-import UI.HSCurses.Curses+import UI.HSCurses.Curses hiding (rs, bs) import UI.HSCurses.CursesHelper import qualified Algorithms.NaturalSort as NS import System.Console.ParseArgs+import qualified Data.Vector.Generic                as GV+import qualified Data.Vector.Generic.Mutable        as GMV+import           Control.Monad.Primitive+import qualified Data.Vector as V+ #if defined(mingw32_HOST_OS) || defined(__MINGW32__) #else import System.Posix.Signals@@ -773,6 +775,26 @@   +sinkVector :: (PrimMonad m, GV.Vector v a) => Int -> C.ConduitM a o m (v a)+sinkVector by = do+    v <- lift $ GMV.new by+    go 0 v+  where+    -- i is the index of the next element to be written by go+    -- also exactly the number of elements in v so far+    go i v = do+        res <- C.await+        case res of+          Nothing -> do+            v' <- lift $ GV.freeze $ GMV.slice 0 i v+            return $! v'+          Just x -> do+            v' <- case GMV.length v == i of+                    True  -> lift $ GMV.grow v by+                    False -> return v+            lift $ GMV.write v' i x+            go (i+1) v'+ main :: IO () main = do   pargs <- parseArgsIO ArgsComplete@@ -783,13 +805,13 @@           ]   when (gotArg pargs "Help") $ usageError pargs ""   let sepChar = fromMaybe ',' $ join $ fmap headMay $ getArg pargs "Separator"-      foldCSVHandle h csvs f acc = E.run (enumHandle 4096 h $$ iterCSV csvs f acc)-      readCSVHandle s h = fmap reverse <$> foldCSVHandle h s collectRows []+      growthFactor = 10+      readCSVHandle set h = runResourceT $ C.runConduit $ C.sourceHandle h C..| intoCSV set C..| C.transPipe lift (sinkVector growthFactor)    inHandle <- getArgStdio pargs "Infile" ReadMode   canRead <- hReady inHandle   when (not canRead) $ usageError pargs ""-  mydata <- {-fmap (map (map unpack))$ -} either throwIO return =<< readCSVHandle (defCSVSettings {csvSep = sepChar}) inHandle+  mydata <- V.toList <$>  readCSVHandle (defCSVSettings {csvSep = sepChar}) inHandle   start   -- [headsty,tbsty] <- convertStyles [AttributeStyle [Bold] DarkGreenF BlackB, Style DarkGreenF DefaultB]   (_h, w) <- myScrSize@@ -798,5 +820,3 @@       as = AppState [nums, (w - 5, myTbl)] 1 (tcols myTbl) (trows myTbl) [] [] Nothing 0 Nothing   evalStateT (processKeys keyTree) $ as   bye--
cursedcsv.cabal view
@@ -1,5 +1,5 @@ Name:                cursedcsv-Version:             0.1.2+Version:             0.1.3 Synopsis:            Terminal tool for viewing tabular data Description:         Curses-based tool for quick display, searching, sorting, etc. of                      tabular data. Help available in the app with either '?' or 'h'.@@ -17,7 +17,7 @@   Main-is: CursedCSV.hs   Build-depends: base >= 4 && < 6, parseargs >= 0.1.3, natural-sort >= 0.1.1,                  hscurses >= 1.4, regex-tdfa >= 1.1.8, safe >= 0.3, mtl >= 2,-                 csv-enumerator > 0.9, enumerator >= 0.4, bytestring > 0.9+                 csv-conduit > 0.7, conduit >= 1.2.8 && < 2.0, conduit-extra, vector >=0.12 && < 0.13, bytestring > 0.9, primitive >=0.6.1 && < 0.7   if !os(windows)     Build-depends: unix >= 2.4   ghc-options:     -Wall