하스켈에서 파일을 읽으려고합니다.
원래 나는 시도했다 :
import System.IO
import Control.Monad
main = do
let list = []
handle <- openFile "data.txt" ReadMode
contents <- hGetContents handle
let singlewords = words contents
list = f singlewords
print list
hClose handle
f :: [String] -> [Int]
f = map read
나는 그 이후로 다음과 같이 업데이트했습니다.
import System.IO
import Control.Monad
main = do
handle <- openFile "data.txt" ReadMode
contents <- hGetContents handle
print contents
그러나 이제 출력은 다음과 같습니다.
"hdhdhdhhdhdhd\n"
"hdhdhdhdhh\n"
출력이 다음과 같기를 바랍니다.
hdhdhhdhhdhdhdhd
hdhdhhshshshshshshh
첫 번째 문제는 함수로 설명 할 수 있습니다 f = map read
. 이 함수는 개별 문자열을 정수 값으로 구문 분석하여 문자열 목록을 정수 목록으로 변환하려고합니다. 파일에이 포함되어 있기 때문에 hdhdhdhdhdhdhd\nhdhdhdhdhdhh
해당 문자는 짝수 숫자 read
가 아니며 Int
s 로 구문 분석하지 못했다 는 오류가 발생 했습니다 .
두 번째 문제는 파일 읽기를 수행하기 위해 구문 분석 단계를 제거한 print
후 텍스트를 화면에 출력하는 데 사용하는 반면 여기에서 사용할 적절한 함수는 putStr
또는 putStrLn
입니다. 차이점은 print
로 정의되어 print x = putStrLn (show x)
있으므로 값을 화면에 넣기 전에 자동으로 문자열 표현으로 변환합니다. 이미가있는 String
경우 문자열 x = "hello"
,의 출력 show x
은 "\"hello\""
이므로 따옴표와 다른 이스케이프 문자가 포함됩니다. 이것은이 너무 read (show x) == x
경우, read
그것은 즉, 따옴표 사이에 적절하게 이스케이프 문자로, 소스 코드에 정의 된 것처럼 문자열을 구문 분석합니다. 따라서 putStrLn
인쇄하고자 할 때 간단히 사용해야 합니다.String
화면에 print
문자열이 아닌 값 (예 : Int
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다