通过使用C#解析文本从文本文件中提取文本

时间:2011-04-08 10:16:32

标签: c# file createfile

我有一个充满非结构化数据的文本文件。

在该数据中,我有我想要提取的电话号码并将其放入新的文本文件中。

文件中的数字都是我关心的。

我想知道C#或VB中是否有方法可以做到这一点?

我知道IBM有一个名为Omnifind的软件包来进行数据分析,但是想要编写一个只执行上述主题的应用程序。

P.S。数据的一个例子 -

John Smith London 123456 
Hayley Smith Manchester 234567 
Mike Smith Birmingham 345678

所以我想创建一个只有 -

的新文件
123456 
234567 
345678

3 个答案:

答案 0 :(得分:3)

没有运气 - 没有这样的方法。我建议这样的事情 -

List<string> result = new List<string>();
      using(StreamReader content = File.OpenText("text"))
      {
        while(!content.EndOfStream)
        {
          string line = content.ReadLine();
          var substrings = line.Split(' ');
          result.Add(substrings[substrings.Length-1]);
        }
      }

答案 1 :(得分:1)

好吧,你可以使用像regular expressions这样的东西,或者在这种情况下你可能只是做一些基本的字符串操作:

using (StreamReader reader = new StreamReader("infile.txt"))
{
    using (StreamWriter writer = new StreamWriter("outfile.txt"))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            int index = line.LastIndexOf(' ');
            if (index > 0 && index + 1 < line.Length)
            {
                writer.WriteLine(line.Substring(index + 1));
            }
        }
    }
}

答案 2 :(得分:1)

试试这个

using System.IO;
using System.Text.RegularExpressions;
public List<string> NaiveExtractor(string path)
{
    return 
    File.ReadAllLines(path)
        .Select(l => Regex.Replace(l, @"[^\d]", ""))
        .Where(s => s.Length > 0)
        .ToList();
}

顾名思义,这很天真,也会在名字中删除数字,如果一行有两个电话号码,他们就会聚在一起。