Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过迭代Haskell中PK压缩归档中的一组文件来提取行_Haskell - Fatal编程技术网

通过迭代Haskell中PK压缩归档中的一组文件来提取行

通过迭代Haskell中PK压缩归档中的一组文件来提取行,haskell,Haskell,作为Haskell的新手,我认为编写一个小型实用工具将是学习它的一个良好开端。我的目标是实现某种linux“more”命令,用于显示PK压缩归档文件的内容。到目前为止,我只列出了归档文件中的文件名: module Main where import Codec.Archive.Zip import Path import Path.IO (resolveFile') import Data.List (sortBy) import Data.Ord (comparing) import qua

作为Haskell的新手,我认为编写一个小型实用工具将是学习它的一个良好开端。我的目标是实现某种linux“more”命令,用于显示PK压缩归档文件的内容。到目前为止,我只列出了归档文件中的文件名:

module Main where

import Codec.Archive.Zip
import Path
import Path.IO (resolveFile')
import Data.List (sortBy)
import Data.Ord (comparing)
import qualified Data.Map as Map
import qualified Data.ByteString.Char8 as Byte (ByteString)

loadTicks :: Path Abs File -> EntrySelector -> IO Byte.ByteString
loadTicks ticksArchivePath entry = withArchive ticksArchivePath (getEntry entry)

extractEntries :: Path Abs File -> IO [EntrySelector]
extractEntries ticksArchivePath = withArchive ticksArchivePath loadEntries

loadEntries :: ZipArchive [EntrySelector]
loadEntries = fmap Map.keys getEntries

-- not really useful since only natural ordering is required
customSort :: Ord a => a -> a -> Ordering
customSort elem1 elem2 = compare elem1 elem2

main :: IO ()
main = do
    let ticksArchivePath = resolveFile' "data/data-small.zip" :: IO (Path Abs File)  
    let entries = extractEntries =<< ticksArchivePath :: IO [EntrySelector]  
    sortedEntries <- fmap (sortBy customSort) entries :: IO [EntrySelector]
    print sortedEntries

根据经验,箭头
mapM(loadTicks-ticksArchivePath)sortedEntries
我尝试了类似的操作,但出现了以下错误:“无法将预期类型的'Path Abs File'与实际类型的'IO(Path Abs File)匹配”'在'loadTicks'的第一个参数中,即'mapM'的第一个参数中的'ticksArchivePath',即'(loadTicks ticksArchivePath)'表达式中的'mapM(loadTicks ticksArchivePath)sortedEntries',通过添加fmap(代码编辑)我们的建议有效,我得到了一个ByTestRing数组。你应该写
ticksArchivePath@arrowd。我想给你答案点。。。
{-# LANGUAGE OverloadedStrings #-}
module Main where

import Codec.Archive.Zip
import Path
import Path.IO (resolveFile')
import Data.List (sortBy)
import Data.Text (takeEnd)
import Data.Ord (comparing)
import Prelude hiding (concat)
import Data.ByteString.Char8 (concat)
import qualified Data.Map as Map
import qualified Data.ByteString.Char8 as Byte (ByteString)

loadTicks :: Path Abs File -> EntrySelector -> IO Byte.ByteString
loadTicks ticksArchivePath entry = withArchive ticksArchivePath (getEntry entry)

extractEntries :: Path Abs File -> IO [EntrySelector]
extractEntries ticksArchivePath = withArchive ticksArchivePath loadEntries

loadEntries :: ZipArchive [EntrySelector]
loadEntries = fmap Map.keys getEntries

-- not really useful since only natural ordering is required
customSort :: Ord a => a -> a -> Ordering
customSort elem1 elem2 = compare elem1 elem2

isCSVFile :: EntrySelector -> Bool
isCSVFile entry = takeEnd 4 (getEntryName entry) == ".csv"

main :: IO ()
main = do
    ticksArchivePath <- resolveFile' "data/data-small.zip" :: IO (Path Abs File)
    entries <- extractEntries ticksArchivePath :: IO [EntrySelector]
    let sortedEntries = sortBy customSort entries :: [EntrySelector]
    let ticks = loadTicks ticksArchivePath
    contents <- mapM ticks sortedEntries :: IO [Byte.ByteString]
    print (concat contents)
ticksArchivePath <- resolveFile' "data/data-small.zip" :: IO (Path Abs File)
let ticksArchivePath = resolveFile' "data/data-small.zip" :: IO (Path Abs File) 
entries <- extractEntries ticksArchivePath :: IO [EntrySelector]
let entries = extractEntries =<< ticksArchivePath :: IO [EntrySelector]
let sortedEntries = sortBy customSort entries