Haskell Language
Data.Text
खोज…
टिप्पणियों
हास्केल के मानक String
प्रकार के लिए Text
एक अधिक कुशल विकल्प है। String
को हस्केल रिपोर्ट के अनुसार मानक प्रस्तावना में पात्रों की एक सूची के रूप में परिभाषित किया गया है:
type String = [Char]
Text
को यूनिकोड वर्णों के एक पैक्ड सरणी के रूप में दर्शाया गया है। यह समान है कि अधिकांश उच्च-स्तरीय भाषाएं स्ट्रिंग का प्रतिनिधित्व कैसे करती हैं, और सूची संस्करण की तुलना में बहुत बेहतर समय और स्थान दक्षता देती है।
सभी उत्पादन उपयोग के लिए String
पर Text
को प्राथमिकता दी जानी चाहिए। एक उल्लेखनीय अपवाद एक पुस्तकालय पर निर्भर करता है जिसमें String
एपीआई है, लेकिन उस मामले में भी पुस्तकालय के साथ इंटरफेस करने से पहले आंतरिक रूप से Text
का उपयोग करने और String
परिवर्तित करने का लाभ हो सकता है।
इस विषय के सभी उदाहरण OverloadedStrings
भाषा एक्सटेंशन का उपयोग करते हैं ।
पाठ का साहित्य
OverloadedStrings
भाषा विस्तार Text
मानों के लिए सामान्य स्ट्रिंग शाब्दिक का उपयोग करने की अनुमति देता है।
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "overloaded"
धारीदार व्हाट्सएप
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "\n\r\t leading and trailing whitespace \t\r\n"
strip
Text
मूल्य के प्रारंभ और अंत से व्हाट्सएप को हटा देती है।
ghci> T.strip myText
"leading and trailing whitespace"
stripStart
शुरू से ही stripStart
को हटाता है।
ghci> T.stripStart myText
"leading and trailing whitespace \t\r\n"
stripEnd
एंड केवल stripEnd
को हटाता है।
ghci> T.stripEnd myText
"\n\r\t leading and trailing whitespace"
व्हाट्सएप, या अन्य वर्णों को बीच से हटाने के लिए filter
का उपयोग किया जा सकता है।
ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"
स्प्लिट टेक्स्ट वैल्यू
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
splitOn
एक टूट जाता है Text
की एक सूची में ऊपर Texts
सबस्ट्रिंग की घटनाओं पर।
ghci> T.splitOn "ss" myText
["mi","i","ippi"]
splitOn
का उल्टा होता है intercalate
।
ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"
split
एक Text
मूल्य को एक बूलियन विधेय को संतुष्ट करने वाले पात्रों पर विखंडू में तोड़ता है।
ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]
एन्कोडिंग और डिकोडिंग टेक्स्ट
यूनिकोड एनकोडिंग की एक किस्म के लिए एन्कोडिंग और डिकोडिंग कार्य Data.Text.Encoding
मॉड्यूल में पाए जा सकते हैं।
ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"
ध्यान दें कि decodeUtf8
अमान्य इनपुट पर एक अपवाद फेंक देगा। यदि आप अमान्य UTF-8 को स्वयं संभालना चाहते हैं, तो decodeUtf8With
उपयोग decodeUtf8With
।
ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData
यह जाँचना कि क्या एक पाठ दूसरे पाठ का विकल्प है
ghci> :set -XOverloadedStrings
ghci> import Data.Text as T
isInfixOf :: Text -> Text -> Bool
चेक करता है कि क्या एक Text
दूसरे Text
भीतर कहीं भी समाहित है।
ghci> "rum" `T.isInfixOf` "crumble"
True
isPrefixOf :: Text -> Text -> Bool
चेक करता है कि क्या एक Text
दूसरे Text
की शुरुआत में दिखाई देता है।
ghci> "crumb" `T.isPrefixOf` "crumble"
True
isSuffixOf :: Text -> Text -> Bool
चेक करता है कि कोई Text
दूसरे Text
के अंत में दिखाई देता है या नहीं।
ghci> "rumble" `T.isSuffixOf` "crumble"
True
अनुक्रमण पाठ
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
index
फ़ंक्शन द्वारा विशिष्ट सूचकांकों पर वर्ण लौटाए जा सकते हैं।
ghci> T.index myText 2
's'
findIndex
फ़ंक्शन प्रकार (Char -> Bool)
और पाठ का एक फ़ंक्शन लेता है और किसी दिए गए स्ट्रिंग की पहली घटना के सूचकांक को लौटाता है या ऐसा नहीं होने पर कुछ भी नहीं।
ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing
count
फ़ंक्शन किसी अन्य Text
भीतर क्वेरी Text
होने की संख्या को लौटाता है।
ghci> count ("miss"::T.Text) myText
1