[英]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.