如何在C#中的文本文件中搜索字符串

时间:2011-09-10 09:40:11

标签: c#

我正在处理文本文件..我想知道如何在文本文件中搜索字符串,然后对该字符串执行操作。我已编写代码但是“ if条件存在问题“,当特定字符串出现时,控件跳到下一行..它不对该字符串执行任何操作。 下面是我试图找到“MerchantNo:105838015”的文本文件中的行,然后对其执行子串操作以仅获取数字。行之间有一个空格。 MERCHANTNO:105838015代理商代码00913

这是代码:

    StreamReader sr = new StreamReader(fldr);
        string line = null;

        while ((line = sr.ReadLine()) != null)
        {
            str = line.Trim().Split(' ');
            for (int i = 0; i < str.Length; i++)
            {
                if (str.ToString().ToUpper().Contains("MERCHANTNO:105838015"))
                {
                        //str = line.Split(' ');
                        string MNo1 = line.Substring(15, 23);
                        MNo = Convert.ToInt32(MNo1.ToString());
                }
                break;

            }

            //MessageBox.Show("Line is:" +line);
        }

        MessageBox.Show("MerchantNo is:" +MNo);

请告诉我我必须做什么?

3 个答案:

答案 0 :(得分:4)

我怀疑这是问题所在:

if (str.ToString()...)

你在字符串数组上调用ToString。我怀疑你的意思是:

if (str[i].ToUpper().Contains(...))

话虽如此,目前还不清楚你为什么要将用于子字符串 - 或者当MNo1.ToString()已经是字符串时你为什么要调用MNo1 ...

我还建议您使用:

if (str[i].IndexOf("MERCHANTNO:105838015",
                   StringComparison.CurrentCultureIgnoreCase) > -1)

(或类似的东西,取决于你想要使用的文化),而不是每个部分的上限。

您还应该考虑使用foreach循环而不是for循环:

foreach (string part in line.Trim().Split(' '))
{
    if (part.IndexOf(...) > -1)
    {
        ...
    }
}

答案 1 :(得分:1)

我认为如果你使用正则表达式,你可以快速解决问题。 首先在变量中读取整个文件,然后将正则表达式应用于该文件。

您可以在表达式中使用分组来单独获取数字,如下所示:

        int number = 0;
        using (var sr = new StreamReader(fileName))
        {
            string fileContent = sr.ReadToEnd();
            Regex regex = new Regex(@"(?<=.*MERCHANTNO:)(?<number>\d*)");
            var match = regex.Match(fileContent);
            if (match.Groups["number"].Success)
            {
                number = Convert.ToInt32(match.Groups["number"].Value);
            }
        }

        MessageBox.Show("MerchantNo is:" + number);

答案 2 :(得分:0)

这个代码应该做什么有点令人困惑,但我想你想确定文件是否包含 merchantno ?你应该使用正则表达式而不是子串玩杂耍。

使用文本文件:

MERCHANTNO:10583218015 AGENT CODE 00913
MERCHANO: 10421523838015 AGENT CODE 00913
Some teeeext MERCHANTNO:105838015 AGENT CODE 00913
Some text salalala ME

代码:

var regi = new Regex(@"MERCHANTNO:\s*([0-9]*)");
string need = "105838015";
bool found = false;

using (StreamReader reader = new StreamReader("file.txt"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        var match = regi.Match(line);
        if (match.Groups.Count == 2)
        {
            if (match.Groups[1].Value == need)
            {
                found = true;
                break;
            }
        }
    }
}

Console.WriteLine("Found: {0}", found);

也许这就是你想要的?整我。

(字符串测试值,以避免012 == 12 int解析)