2012-01-23 27 views
11

Tôi muốn viết một hàm đơn giản chia tách một ByteString thành [ByteString] bằng cách sử dụng '\n' làm dấu phân tách. nỗ lực của tôi:Haskell Làm thế nào để tạo một Word8?

import Data.ByteString 

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

này ném một lỗi vì '\n' là một Char chứ không phải là một Word8, đó là những gì Data.ByteString.splitWith được mong đợi.

Làm cách nào để biến ký tự đơn giản này thành một số Word8ByteString sẽ phát cùng?

Trả lời

14

Bạn chỉ có thể sử dụng số chữ 10, nhưng nếu bạn muốn chuyển đổi các ký tự chữ bạn có thể sử dụng fromIntegral (ord '\n') (các fromIntegral là cần thiết để chuyển đổi Int rằng ord trở thành một Word8). Bạn sẽ phải nhập Data.Char cho ord.

Bạn cũng có thể nhập Data.ByteString.Char8, cung cấp chức năng để sử dụng Char thay vì Word8 trên cùng một kiểu dữ liệu ByteString. (Trên thực tế, nó có một chức năng lines thực hiện chính xác những gì bạn muốn.) Tuy nhiên, điều này thường là không đề nghị, như ByteString s không cửa hàng codepoints Unicode (đó là những gì Char đại diện) nhưng thay vì octet liệu (ví dụ Word8 s).

Nếu bạn đang xử lý dữ liệu văn bản, bạn nên cân nhắc sử dụng Text thay vì ByteString.

+0

Ồ, wow. Xuất sắc. Tôi sẽ phải đào sâu vào các biểu diễn nhân vật, tôi đoán vậy. Tôi không biết các chữ số cho các nhân vật là gì. Có một danh sách nào đó ở đâu đó không? –

+0

Tôi đang viết một chương trình sẽ phân tích các tệp cơ sở dữ liệu protein, chứa các chuỗi, số nguyên và tăng gấp đôi. Các chuỗi sẽ được sử dụng chủ yếu để xác định đúng mục trong danh sách, trong khi các số nguyên và số nhân đôi sẽ được sử dụng trong các phép toán. Tôi không chắc mình nên sử dụng lớp nào cho việc này. –

+1

Bạn có thể sử dụng 'ord' trong GHCi để tìm ra các số ký tự của các mã ký tự. Tôi thường lấy dữ liệu Unicode từ [fileformat.info] (http://www.fileformat.info/info/unicode/index.htm); khối [Basic Latin] (http://www.fileformat.info/info/unicode/block/basic_latin/index.htm) chứa 128 codepoint được thừa hưởng từ ASCII. – ehird

Các vấn đề liên quan