簡體   English   中英

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

[英]how to search for a string in text file in C#

我正在處理文本文件。.我想知道如何在文本文件中搜索字符串,然后對該字符串執行操作。我已經編寫了代碼,但是當特定字符串時,“ 如果條件 ”存在一些問題來,控件跳到下一行。.它不對該字符串執行任何操作。.下面是文本文件中的行,我正在嘗試從該文件中找到“ MerchantNo:105838015”,然后對其執行Substring操作以僅獲取該行之間有一個空格。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);

請說我該怎么辦?

我懷疑這是問題所在:

if (str.ToString()...)

您正在字符串數組上調用ToString 我懷疑你的意思是:

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

話雖如此,目前還不清楚為什么要使用該作為子字符串-或為什么在MNo1已經是字符串的情況下調用MNo1.ToString() ...

我還建議您使用:

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

(或類似的內容,具體取決於您要使用的文化),而不是大寫每個部分。

您還應該考慮使用foreach循環而不是for循環:

foreach (string part in line.Trim().Split(' '))
{
    if (part.IndexOf(...) > -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);

該代碼應該執行的操作有點令人困惑,但是我想您想確定文件是否包含該商人嗎? 您應該使用正則表達式而不是子字符串處理。

帶有文本文件:

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解析)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM