寻找C#相当于scanf

Lar*_*rry 31 c# scanf

我以前习惯用C语言编写代码,发现这个scanf函数非常有用.不幸的是,C#中没有相应的东西.

我正在使用它来解析半结构化文本文件.

我在这里找到了一个有趣的scanf实施例子.不幸的是,它看起来陈旧且不完整.

有谁知道scanfC#实现?或者至少可以作为逆转的东西string.Format

Mit*_*eat 9

由于文件是"半结构化的",你不能使用ReadLine()和TryParse()方法的组合,或者使用Regex类来解析你的数据?

  • 正则表达并不是那么糟糕.下载其中一个免费工具(如Expresso)和正则表达式更容易创建和使用. (2认同)

Jon*_*ood 7

如果正则表达式不适合你,我刚刚发布了sscanf().NET 的替代品.可以在http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net查看和下载代码.

  • @jurik:我想要求你支持你的陈述会太过分吗?正则表达式很棒,如果您愿意,可以使用它。但是如何在 C# 中实现 scanf 是“黑客”?那只是对你不喜欢的东西持批评态度。这并没有使它成为一个黑客。看在上帝的份上,对那些可能决定做与你喜欢做的事情不同的人有一点宽容。 (2认同)

oku*_*ane 5

您可以直接从C运行时库中使用scanf,但如果您需要使用不同的参数计数运行它,则可能会很困难.我建议您为您执行正则表达式任务或在此描述该任务,也许还有其他方法.


jur*_*rik 5

我发现比使用C的sscanf或某人重写的部分更好的解决方案(无违法)

http://msdn.microsoft.com/zh-cn/library/63ew9az0.aspx 对此文章进行了介绍,它说明了如何使命名组从带图案的字符串中提取所需的数据。当心文章中的小错误以及下面的更好版本。(冒号不属于该组)

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string url = "http://www.contoso.com:8080/letters/readme.html";
      Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",RegexOptions.None, TimeSpan.FromMilliseconds(150));
      Match m = r.Match(url);
      if (m.Success)
         Console.WriteLine(r.Match(url).Result("${proto}:${port}")); 
   }
}
// The example displays the following output: 
//       http::8080
Run Code Online (Sandbox Code Playgroud)