Чтение и запись с обратной косой чертой и F # интерактивная консоль - PullRequest
2 голосов
/ 24 января 2011

Редактировать: в чем разница между чтением обратной косой черты из файла и записью его в интерактивное окно по сравнению с записью непосредственно строки в интерактивное окно?

Например

let toto = "Adelaide Gu\u00e9nard" 

toto;;

интерактивные отпечатки окон «Аделаида Геннард».

Теперь, если я сохраню текстовый файл с одной строкой, Аделаида Гуард. И читать это в:

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

В интерактивном окне печатается [| "Аделаида Гу'нард" |]

В чем разница между этими двумя утверждениями с точки зрения печати в интерактивном окне?

Ответы [ 2 ]

4 голосов
/ 24 января 2011

Насколько я знаю, нет библиотеки, которая расшифровывала бы экранирование строки F # / C #, поэтому вам придется реализовать эту функцию самостоятельно. Был похожий вопрос на , как это сделать в 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 # интерпретирует экранирование)

3 голосов
/ 24 января 2011

Используется структура StructuredFormat из F # PowerPack. Для вашей строки это эффективно делает printfn toto;;.

Вы можете добиться такого же поведения в текстовом файле следующим образом:

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

Кодировка по умолчанию, используемая File.WriteAllText, - UTF-8. Вы должны иметь возможность открыть toto.txt в Блокноте или Visual Studio и правильно увидеть его.

Редактировать: Если бы я хотел записать содержимое test.txt в другой файл на чистой интерактивной печати F #, как бы я поступил?

Похоже, что fsi слишком умна при печати содержимого test.txt. Он форматирует его как допустимое выражение F # с кавычками, [| |] скобками и экранированием символа Юникод. Строка, возвращаемая File.ReadAllLines, не содержит ничего из этого; он просто содержит слова Аделаида Геннард .

Вы должны быть в состоянии взять массив, возвращенный File.ReadAllLines, и передать его в File.WriteAllLines без искажения содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...