2011-01-24 10 views
2

편집 : 파일에서 백 슬래시를 읽고 대화 형 창에 쓰는 것과 대 문자열을 직접 대화 형 창에 쓰는 것의 차이점은 무엇입니까? 백 슬래시 읽기 및 쓰기 및 F # 대화 형 콘솔

let toto = "Adelaide Gu\u00e9nard" 

toto;; 

대화 형 윈도우 인쇄 "애들레이드 Guénard"예를

를 들어

.

이제 단일 라인 Adelaide Gu \ u00e9nard로 txt 파일을 저장하면.

는 대화 형 윈도우 인쇄의 측면에서이 두 문장의 차이 무엇입니까 [| | "애들레이드 구 \의 u00e9nard"]

System.IO.File.ReadAllLines(@"test.txt") 

대화 형 윈도우 인쇄 : 그리고 그것을 읽어?

+0

텍스트 파일에 백 슬래시와 'u'와 일부 숫자가 들어있는 것처럼 들리겠습니까? 그리고 F # 문자열 리터럴과 같은 문자를 '해석'하고 싶습니까? 질문을 명확하게하려고 할 때, 나는 답을 모른다. – Brian

+0

@Brian 나는 질문을 편집했다. 감사합니다 – jlezard

답변

4

필자가 아는 한 F #/C# 이스케이프 문자열을 디코드 할 라이브러리가 없으므로이 기능을 직접 구현해야합니다. 정규 표현식을 사용하는 솔루션으로 how to do that in C#에 유사한 질문이있었습니다.

이 같은 F 번호에 그것을 다시 작성할 수 있습니다 :

open System 
open System.Globalization 
open System.Text.RegularExpressions 

let regex = new Regex (@"\\[uU]([0-9A-F]{4})", RegexOptions.IgnoreCase) 
let line = "Adelaide Gu\\u00e9nard" 
let line = regex.Replace(line, fun (m:Match) -> 
    (char (Int32.Parse(m.Groups.[1].Value, NumberStyles.HexNumber))).ToString()) 

을 (당신은 당신이 텍스트 파일에서 읽어 줄 것과 같은 일을 포함 문자열을 만들 "some\\u00e9etc"를 작성하는 경우 - 당신이 사용하는 경우를 단일 백 슬래시, F # 컴파일러가 이스케이프 해석)

+0

나는 그것을 지금 얻으십시오, 감사합니다 – jlezard

3

F # PowerPack의 StructuredFormat 항목을 사용합니다. 문자열의 경우 실제로는 printfn toto;;입니다. 다음과 같이

당신은 텍스트 파일에 동일한 동작을 얻을 수 있습니다

open System.IO;; 
File.WriteAllText("toto.txt", toto);; 

File.WriteAllText 사용하는 기본 인코딩은 UTF-8입니다. 메모장이나 Visual Studio에서 toto.txt를 열고 é를 올바르게 볼 수 있어야합니다.

편집 :test.txt의 내용을 깨끗한 F # 대화 형 인쇄의 다른 파일에 쓰고 싶다면 어떻게해야합니까?

test.txt의 내용을 인쇄 할 때 fsi가 너무 똑똑한 것처럼 보입니다. 유효한 F # 표현식으로 서식을 지정하고 따옴표, [| |] 대괄호 및 유니 코드 문자 이스케이프를 사용합니다. File.ReadAllLines에 의해 반환 된 문자열에는 이러한 것들이 포함되어 있지 않습니다. 그것은 단지 애들레이드 Guénard이라는 단어를 포함합니다.

File.ReadAllLines에 의해 반환 된 배열을 가져 와서 내용을 맹 글링하지 않고 File.WriteAllLines으로 전달할 수 있어야합니다.

+0

답변을 주셔서 감사합니다 나는 내 문제를 더 설명하기 위해 내 질문을 편집했습니다. – jlezard

+0

그래서 ReadAllLines을 시도한 다음 WriteAllLines를 시도했습니다. 작동하지 않습니다.도움을 주셔서 감사합니다 – jlezard