JS
savedStream = originalStream
Size: a a a
JS
savedStream = originalStream
АБ
createProcess
или что-то в таком духе, то лови вывод с помощью этого самого createProcessPL
splitTranslation :: String -> [String]
splitTranslation string = do
let withoutSemicolumn = replace (pack ";") (pack "") (pack string)
let splited = splitOn (pack ", ") withoutSemicolumn
map unpack splited
containTranslation :: String -> String -> String -> IO String
containTranslation word phrase translation = do
text <- capture_ $ parse $ drop (length phrase + 1) translation
let russianWords = filter (\a -> a =~ regexp ("^[^\\(].*[ёа-яА-Я].*")) (lines text)
let words = concat $ map splitTranslation russianWords
if any (== word) words
then return $ phrase
else return $ ""
filterTranslations :: String -> [String] -> [String] -> IO()
filterTranslations word list dictionary = do
let translationArray = filter (\a -> a =~ regexp ("^.*" ++ word ++ ".*$")) dictionary
let indexArray = map (\a -> fromJust $ elemIndex a dictionary) translationArray
stringArray <- sequence $ map (\i -> containTranslation word (list !! i) (dictionary !! i)) indexArray
putStrLn $ mconcat $ intersperse ", " $ filter (( /= 0) . length) stringArray
PL
АБ
splitTranslation :: String -> [String]
splitTranslation string = do
let withoutSemicolumn = replace (pack ";") (pack "") (pack string)
let splited = splitOn (pack ", ") withoutSemicolumn
map unpack splited
containTranslation :: String -> String -> String -> IO String
containTranslation word phrase translation = do
text <- capture_ $ parse $ drop (length phrase + 1) translation
let russianWords = filter (\a -> a =~ regexp ("^[^\\(].*[ёа-яА-Я].*")) (lines text)
let words = concat $ map splitTranslation russianWords
if any (== word) words
then return $ phrase
else return $ ""
filterTranslations :: String -> [String] -> [String] -> IO()
filterTranslations word list dictionary = do
let translationArray = filter (\a -> a =~ regexp ("^.*" ++ word ++ ".*$")) dictionary
let indexArray = map (\a -> fromJust $ elemIndex a dictionary) translationArray
stringArray <- sequence $ map (\i -> containTranslation word (list !! i) (dictionary !! i)) indexArray
putStrLn $ mconcat $ intersperse ", " $ filter (( /= 0) . length) stringArray
PL
PL
АБ
АБ
֍֎
V
PL
PL
֍֎
stdout
результат?PL
stdout
результат?֍֎
АБ
splitTranslation :: String -> [String]
splitTranslation string = map unpack splited
where
withoutSemicolon = replace (pack ";") (pack "") (pack string)
splited = splitOn (pack ", ") withoutSemicolon
getText :: String -> IO String
getText translation = capture_ $ parse $ drop (length phrase + 1) translation
containTranslation :: String -> String -> String -> Maybe String
containTranslation word phrase text = if any (== word) words then Just phrase else Nothing
where
russianWords = filter (\a -> a =~ regexp ("^[^\\(].*[ёа-яА-Я].*")) (lines text)
words = concat $ map splitTranslation russianWords
filterTranslations :: String -> [String] -> [String] -> IO()
filterTranslations word list dictionary = do
let translationArray = filter (\a -> a =~ regexp ("^.*" ++ word ++ ".*$")) dictionary
let indexArray = map (\a -> fromJust $ elemIndex a dictionary) translationArray
maybeArray <- sequence $ map (\i -> containTranslation word (list !! i) (dictionary !! i)) $ getText <$> indexArray
putStrLn $ mconcat $ intersperse ", " $ catMaybes maybeArray
PL
LO