首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反斜杠读写和F#交互式控制台

反斜杠读写和F#交互式控制台
EN

Stack Overflow用户
提问于 2011-01-25 02:21:18
回答 2查看 618关注 0票数 2

编辑:从文件中读取反斜杠并将其写入交互式窗口与直接将字符串写入交互式窗口有什么不同?

例如

代码语言:javascript
复制
let toto = "Adelaide Gu\u00e9nard" 

toto;;

交互式窗口打印"Adelaide Guénard“。

现在,如果我用一行Adelaide Gu\u00e9nard保存一个txt文件。然后读一读:

代码语言:javascript
复制
System.IO.File.ReadAllLines(@"test.txt")

交互式窗口打印|"Adelaide Gu\u00e9nard"|

在交互式窗口打印方面,这两个语句有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-25 03:30:19

据我所知,没有库可以为您解码字符串的F#/C#转义,因此您必须自己实现该功能。在使用正则表达式的解决方案中,how to do that in C#上也有类似的问题。

您可以将其重写为F#,如下所示:

代码语言:javascript
复制
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#编译器将解释转义)

票数 4
EN

Stack Overflow用户

发布于 2011-01-25 02:29:12

它使用F# PowerPack中的StructuredFormat内容。对于你的字符串,它实际上是在做printfn toto;;

您可以在文本文件中实现相同的行为,如下所示:

代码语言:javascript
复制
open System.IO;;
File.WriteAllText("toto.txt", toto);;

File.WriteAllText使用的默认编码是UTF-8。您应该能够在记事本或Visual Studio中打开toto.txt并正确地看到é。

编辑:如果想要在干净的F#交互式打印中将test.txt的内容写入另一个文件,我该如何处理?

看起来fsi在打印test.txt的内容时太聪明了。它将其格式化为有效的F#表达式,包括引号、[| |]括号和Unicode字符转义。File.ReadAllLines返回的字符串不包含任何这些内容;它只包含单词Adelaide Guénard。

您应该能够获取File.ReadAllLines返回的数组并将其传递给File.WriteAllLines,而不会损坏其内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4785572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档