2014-06-09 4 views
-2

** 이전 **Haskell에서 파일/문자열에서 패턴을 검색하는 방법

패턴이 예를 들어 있다고 가정합니다. "1101000111001110". 이제 검색 할 패턴이 생겼습니다. "1101". 저는 하스켈 세계에 처음 왔어요. 제 마지막으로 그것을 시도하고 있습니다. 에서 할 수 있지만 하스켈에서해야합니다.

지정된 패턴 : = "1101000111001110"

패턴이 검색 할 : -`"110 Desired Output:- "발견 된 패턴은"

** 새로운 **

import Data.List (isInfixOf) 

main = do x <- readFile "read.txt" 
     putStr x 

isSubb :: [Char] -> [Char] -> Bool 
isSubb sub str = isInfixOf sub str 

이 코드라는 이름의 파일을 읽고 "읽기" isInfixOf를 사용하면 문자열에서 "1101"패턴을 확인할 수 있으며 결과는 True가됩니다.

그러나 문제는 "read.txt"에있는 문자열에서 "1101"을 검색 할 수 없다는 것입니다. "read.txt"문자열과 사용자가 제공 한 문자열을 비교해야합니다. 즉

문자열 하나가 "read.txt" 이고 두 번째 문자열 사용자가 제공하고 (사용자 정의) 검색을 수행하고 사용자 정의 문자열이 "read.txt"에있는 문자열에 있는지 확인합니다 "

+1

"바이너리 패턴 찾기"란 무엇을 의미합니까? – ThreeFx

+0

@ThreeFx는 파일에 0s 1s ex 만 있다고 가정합니다. 11011011110. 이제 전 패턴을 검색해야합니다. 그 파일에서 "1101". – Spade

+0

@Spade 왜 예상되는 문제에 대한 샘플 입력 및 출력을 넣으려고하면 질문을 확장하지 않는가? 또한, 지금까지 시도한 것과 말할 수있는 것을 말할 수 있다면 좋을 것입니다. – Sibi

답변

0

대답 새에 :

는이를 달성하기 위해, 당신은 readLn를 사용해야합니다 :

sub <- readLn 

readLn가 발생 \n 01까지 입력을 허용은 결과를 sub에 바인딩합니다. 입력이 문자열이어야한다면 문자열 주위에 "을 명시 적으로 입력해야합니다. 당신이 따옴표를 매번 입력 기분하지 않는 경우 또는

, 당신은 포함 된 모든 기능에 대한 자세한 내용은 sub

에 바인딩 후 String이되는 유형 IO String있다 readLn의 장소에서 getLine을 사용할 수 있습니다 하스켈의 표준 라이브러리에서 Hoogle을 참조하십시오. Hoogle을 사용하면 다양한 기준에 따라 기능을 검색 할 수 있으며 필요에 따라 기능을 찾을 수 있습니다. 옛날에


답변 :

패턴을 검색 Data.List에서 isInfixOf 기능을 사용

import Data.List (isInfixOf) 

isInfixOf "1101" "1101000111001110" -- outputs true 

첫 번째 순서는 달리 두 번째와 거짓에 존재하는 경우는 true를 돌려줍니다.

그 내용이 readFile을 사용하여 파일을 읽고 활용하려면 다음

contents <- readFile "filename.txt" 

당신은 당신이 지금에 표준 기능을 수행 할 수있는 하나의 문자열로 전체 파일을 얻을 것이다.

"Pattern found"을 출력하는 것은 간단합니다.

+0

내가 이것을 시도하자. 고마워요 ThreeFx. – Spade

+0

@Spade 효과가있는 경우 동일한 문제가있는 다른 사용자를 돕기위한 답을 수락하십시오 – ThreeFx

+0

물론입니다. – Spade

관련 문제