我正在处理文本文件..我想知道如何在文本文件中搜索字符串,然后对该字符串执行操作。我已编写代码但是“ 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);
请告诉我我必须做什么?
答案 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解析)