c# - 从文件中搜索特定数据

标签 c#

我有一个包含文本和少量数字的文件。我只想从中提取数字。我该怎么做???

我尝试使用所有拆分的东西,但到目前为止运气不好。 我的文件是这样的:

AT+CMGL="全部" +CMGL: 5566,"REC READ","Ufone" 尊敬的客户,您的 DAY_BUCKET 订阅将于 02/05/09 到期 +CMGL: 5565,"REC READ","+923466666666"

请告诉我如何从该文件中提取像 +923466666666 这样的数字,以便我可以将它们放入另一个文件或文本框中。

谢谢

最佳答案

这是一个使用 String.Split 的示例。 “数字”包含一个“+”,所以实际上它应该被视为一个字符串而不是一个数字。我假设它是一个带有可能用于国际电话的“+”的电话号码?如果是电话号码,则需要注意号码中的破折号、空格以及末尾添加的分机号码,例如“+9234 666-66666 ext 235”等...

无论如何 - 希望这个例子对掌握 Split 有用。

代码包括使用 NUnit v2.4.8 的单元测试

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using System.Text.RegularExpressions;

namespace SO.NumberExtractor.Test
{
    public class NumberExtracter
    {
        public List<string> ExtractNumbers(string lines)
        {
            List<string> numbers = new List<string>();
            string[] seperator = { System.Environment.NewLine };
            string[] seperatedLines = lines.Split(seperator, StringSplitOptions.RemoveEmptyEntries);

            foreach (string line in seperatedLines)
            {
                string s = ExtractNumber(line);
                numbers.Add(s);
            }

            return numbers;
        }

        public string ExtractNumber(string line)
        {
            string s = line.Split(',').Last<string>().Trim('"');
            return s;
        }

        public string ExtractNumberWithoutLinq(string line)
        {
            string[] fields = line.Split(',');
            string s = fields[fields.Length - 1];
            s = s.Trim('"');

            return s;
        }
    }

    [TestFixture]
    public class NumberExtracterTest
    {
        private readonly string LINE1 = "AT+CMGL=\"ALL\" +CMGL: 5566,\"REC READ\",\"Ufone\" Dear customer, your DAY_BUCKET subscription will expire on 02/05/09 +CMGL: 5565,\"REC READ\",\"+923466666666\"";
        private readonly string LINE2 = "AT+CMGL=\"ALL\" +CMGL: 5566,\"REC READ\",\"Ufone\" Dear customer, your DAY_BUCKET subscription will expire on 02/05/09 +CMGL: 5565,\"REC READ\",\"+923466666667\"";
        private readonly string LINE3 = "AT+CMGL=\"ALL\" +CMGL: 5566,\"REC READ\",\"Ufone\" Dear customer, your DAY_BUCKET subscription will expire on 02/05/09 +CMGL: 5565,\"REC READ\",\"+923466666668\"";

        [Test]
        public void ExtractOneLineWithoutLinq()
        {            
            string expected = "+923466666666";

            NumberExtracter c = new NumberExtracter();
            string result = c.ExtractNumberWithoutLinq(LINE1);

            Assert.AreEqual(expected, result);            
        }

        [Test]
        public void ExtractOneLineUsingLinq()
        {
            string expected = "+923466666666";

            NumberExtracter c = new NumberExtracter();
            string result = c.ExtractNumber(LINE1);

            Assert.AreEqual(expected, result);
        }

        [Test]
        public void ExtractMultipleLines()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(LINE1);
            sb.AppendLine(LINE2);
            sb.AppendLine(LINE3);

            NumberExtracter ne = new NumberExtracter();
            List<string> extractedNumbers = ne.ExtractNumbers(sb.ToString());

            string expectedFirst = "+923466666666";
            string expectedSecond = "+923466666667";
            string expectedThird = "+923466666668";

            Assert.AreEqual(expectedFirst, extractedNumbers[0]);
            Assert.AreEqual(expectedSecond, extractedNumbers[1]);
            Assert.AreEqual(expectedThird, extractedNumbers[2]);
        }
    } 
}

关于c# - 从文件中搜索特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/814960/

相关文章:

c# - 更改 .NET 通用字典中的顺序

c# - 在 C# 中生成 List<List<KeyPairValue<string, string>>> 子集的排列

c# - 为什么 JsonConvert.DeserializeObject 返回空值?

c# - 外键列可以首先是 Entity Framework 6 代码中的枚举吗?

c# - 链接时 IAuthenticationHandler 出现错误 XA2006

c# - 加载程序集无法正常工作

c# - AJAX 路径不对

c# - CSLA 可编辑网格

javascript - 如何在 ASP.Net 中使用 javascript 函数设置查询字符串值?

c# - ASP.NET 回发会在 URL 重写中产生问题?