C# 如何从文件中读取长度为1或2个字符的数字

C# 如何从文件中读取长度为1或2个字符的数字,c#,C#,如何从文本文件中读取仅由一个或两个字符组成的数字。 例如: 123 32 40 14124 491 1 我需要得到:32401 我所做的是: OpenFileDialog ls = new OpenFileDialog(); int numbersFromFile; if (ls.ShowDialog() == DialogResult.OK) { StreamReader read = new StreamReader(ls.FileName); } 我不知道该怎么办,我想我需要读

如何从文本文件中读取仅由一个或两个字符组成的数字。 例如:

123 32 40 14124 491 1
我需要得到:
32401

我所做的是:

OpenFileDialog ls = new OpenFileDialog();
int numbersFromFile;
if (ls.ShowDialog() == DialogResult.OK)
{
    StreamReader read = new StreamReader(ls.FileName);
}

我不知道该怎么办,我想我需要读取字符串中的所有字符,然后才能使用子字符串函数?

您可以使用以下方法:

string lines = File.ReadAllText(ls.FileName);
string[] words = lines.Split(new[] {' ', '\n'}, StringSplitOptions.RemoveEmptyEntries);
string result = String.Join(" ", words.Where(w => w.Length < 3));

// result == "32 40 1" given above input
string lines=File.ReadAllText(ls.FileName);
string[]words=lines.Split(新[]{'','\n'},StringSplitOptions.RemoveEmptyEntries);
字符串结果=string.Join(“,words.Where(w=>w.Length<3));
//结果==“32 40 1”给出上述输入

匹配项将包含长度为1或2的字符串
IEnumerable
。不过,这并不检查它是否是字符串,但可以很容易地更改代码以执行此操作。

您可以将内容读入一个字符串,然后将单词拆分以测试长度。如下

            //create the Stream reader object
            StreamReader sr = new StreamReader("FilePath");
            //open and get the contents put into a string
            String documentText = sr.ReadToEnd();
            //close the reader
            sr.Close();
            //split out the text so we can look at each word
            String[] textStrings = documentText.Split(' ');
            //create a list to hold the results
            List<String> wordList = new List<String>();

            //loop through the words and check the length
            foreach (String word in textStrings)
            {   //if it is less then 3 add to our list
                if (word.Length < 3)
                {
                    wordList.Add(word);
                }
            }


            //...do what you need to with the results in the list
            foreach (String wordMatch in wordList)
            {
                MessageBox.Show("There are " + wordList.Count.ToString() + " items in the list");
            }
//创建流读取器对象
StreamReader sr=新的StreamReader(“文件路径”);
//打开并将内容放入字符串中
String documentText=sr.ReadToEnd();
//关闭阅读器
高级关闭();
//把课文分开,让我们看每个单词
String[]textStrings=documentText.Split(“”);
//创建一个列表来保存结果
List wordList=新列表();
//循环单词并检查长度
foreach(文本字符串中的字符串字)
{//如果小于3,则添加到我们的列表中
如果(字长<3)
{
添加(word);
}
}
//…根据列表中的结果执行需要的操作
foreach(单词列表中的字符串单词匹配)
{
MessageBox.Show(“列表中有“+wordList.Count.ToString()+”项”);
}

我只需要用一个简单的正则表达式就可以了

string strRegex = @"(?<=\ )\d{1,2}(?!\d)";
RegexOptions myRegexOptions = RegexOptions.Multiline;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"123 32 40 14124 491 1"; // read.ReadToEnd();

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}

string stregex=@”(?没有反馈的向下投票不会增加任何价值。但是,用现有的FAQ和明确的使用条款提供反馈也不会增加任何价值。
string lines=string.Join(“,File.ReadAllText(ls.FileName));
:)@L.B是的-愚蠢(而且是固定的,尽管它也会起作用);)我不太喜欢占位符答案。我可以问一下字符w是怎么回事吗?它代表单词数组中的每个字符?是一个Linq方法,w是集合中每个实例类型使用的变量。所以这就像说每个w在单词中的位置(=>)bit为true,返回true w的集合。您的前3行代码可以缩减为
var documentText=File.ReadAllText();
我知道这一点。我是按照海报上的原始内容来使用StreamReader的。不会是
\b\d{1,2}\b
这样做更容易吗?事实上,是的,那样会更整洁!
string strRegex = @"(?<=\ )\d{1,2}(?!\d)";
RegexOptions myRegexOptions = RegexOptions.Multiline;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"123 32 40 14124 491 1"; // read.ReadToEnd();

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}