Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从长字符串中提取10个数字_C# - Fatal编程技术网

C# 从长字符串中提取10个数字

C# 从长字符串中提取10个数字,c#,C#,我手头拮据。我正在阅读一个不带分隔符的文本文件,除了一个细节外,我已经成功了:我需要在作为员工标识符的字符串行中识别一个10位数的数字,并将其链接到数据库以提取电子邮件并通过电子邮件将该文件发送给员工。我对每个员工单独提取文件(这是一个包含所有员工数据的大型文本文件)没有问题,但我需要通过电子邮件将这个单独的文件发送给他们。现在,我有一个查询,虽然根本没有优化,但不会在操作中造成问题,因为它是一个辅助数据库,很少使用 using (var cnn = new SqlConnection(con

我手头拮据。我正在阅读一个不带分隔符的文本文件,除了一个细节外,我已经成功了:我需要在作为员工标识符的字符串行中识别一个10位数的数字,并将其链接到数据库以提取电子邮件并通过电子邮件将该文件发送给员工。我对每个员工单独提取文件(这是一个包含所有员工数据的大型文本文件)没有问题,但我需要通过电子邮件将这个单独的文件发送给他们。现在,我有一个查询,虽然根本没有优化,但不会在操作中造成问题,因为它是一个辅助数据库,很少使用

 using (var cnn = new SqlConnection(connStr))
        {
            cnn.Open();
            using (var cmd = new SqlCommand("SELECT  EMail from Stubs WHERE CONTAINS (ID, @ID)", cnn))
            {
                cmd.Parameters.AddWithValue("@ID", (line));
                using (var rdr = cmd.ExecuteReader())
                {
                    if (rdr.HasRows)
                    {
                        while (rdr.Read())
                        {
   email = rdr.GetString(0);

                        }
                    }
                }
            }
我检查每一个读取行,并将其与字段进行比较。显然这不起作用,因为字符串总是由以下内容组成:

Acct              0100001170                              180.18   39,870.80 
我需要提取那里的10位数字0100001170,并使用提取的值来标识数据库中的一列并获取电子邮件地址


我怎么能只提取那个数字?有可能吗?

正如Jon Skeet所建议的,正则表达式适用于这种情况

    string id = Regex.Match(line, @"(?<=\s)\d{10}(?=\s)").Value;

string id=Regex.Match(第行,@)(?如果每行中的帐号都位于相同的位置,则此选项有效:

while (rdr.Read())
{
    email = rdr.GetString(0);
    // make sure the string is long enough or you will get an index out of range exception
    if (rdr.GetString().Length() > 29)
    {
        string acctno = rdr.GetString().Substring(19, 10);
        // do something with acctno, maybe cast it to an Int64 if it is numeric
    }
}

您尝试过正则表达式吗?支持读取固定宽度的文本文件。应该可以使用它来提取所需的数据。这太有意义了。嗯……我不知道如何构建这样的正则表达式。
string digits=Regex.Match(str,@“\d+”).Value;
在空格上拆分它,然后抓取第二个元素?如果不是你喜欢的话,它似乎比正则表达式更容易。这几乎完美。我放置了一个消息框,看看它是否正确显示了数字,它确实显示了数字,我在逻辑中遇到的主要问题是,由于变量将不断刷新(每一行),它将被删除。”“擦除”变量。由于这起作用,我将研究如何使用我使用过的代码,以及我使用小if/else逻辑的局限性。谢谢FLG