2012-01-23 72 views
11

我想寫一個簡單的函數使用'\n'作爲分隔符其將一個ByteString[ByteString]。我嘗試:Haskell如何創建一個Word8?

import Data.ByteString 

listize :: ByteString -> [ByteString] 
listize xs = Data.ByteString.splitWith (=='\n') xs 

這將引發一個錯誤,因爲'\n'Char而非Word8,這是什麼Data.ByteString.splitWith期待。

如何打開這個簡單的字符轉換爲Word8ByteString會玩?

回答

14

你可以只使用數字文字10,但是如果你想要將字符轉換文字可以使用fromIntegral (ord '\n')(該fromIntegral需要將Intord收益轉換成Word8)。您必須輸入Data.Char以獲得ord

您也可以導入Data.ByteString.Char8,它提供了在同一個ByteString數據類型上使用Char而不是Word8的功能。 (事實上​​,它有一個lines功能,你想要做什麼。)但是,這通常是建議,如ByteString小號店Unicode代碼點(這是什麼Char代表),而是原始的八位字節(即Word8 s)。

如果您正在處理文本數據,你應該考慮使用的Text代替ByteString

+0

哦,哇。優秀。我想,我將不得不深入探討個性表徵。我不知道這些角色的數字文字是什麼。有什麼地方的清單嗎? –

+0

我寫一個程序,將解析蛋白質數據庫文件,其中包含字符串,整數和雙打。字符串將主要用於從列表中識別正確的項目,而整數和雙打將用於數學運算。我不確定我應該使用什麼課程。 –

+1

你可以在GHCi中使用'ord'來查找字符的碼點數:)我通常從[fileformat.info](http://www.fileformat.info/info/unicode/index.htm)獲取Unicode數據; [基本拉丁語](http://www.fileformat.info/info/unicode/block/basic_latin/index.htm)嵌段包含來自ASCII繼承了128碼點。 – ehird