0

テキスト ファイルから、1 文字または 2 文字のみで構成される数字を読み取るにはどうすればよいですか。例えば:

123 32 40 14124 491 1

私は取得する必要があります:32 40 1

私がしたこと:

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

どうすればよいかわかりません。文字列内のすべての文字を読み取ってから、部分文字列関数を使用する必要があると思いますか?

4

4 に答える 4

0

内容を 1 つの文字列に読み取ってから、単語を分割して長さをテストできます。以下のように

            //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");
            }
于 2012-10-01T20:43:21.233 に答える
0

単純な正規表現でこれを行うだけです。

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
  }
}

(?) コンストラクトは、一致をスペースと数字以外で囲むことを保証し、\d{1,2} は 1 文字または 2 文字の長さの一連の数字と一致します。

于 2012-10-01T20:43:56.830 に答える
0

次のようなものを使用できます。

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
于 2012-10-01T20:37:46.070 に答える
0
string numbers = string.Empty;
using (var reader = new StreamReader(@"C:\Temp\so.txt"))
{
    numbers = reader.ReadToEnd();
}

var matches = numbers.Split(' ').Where(s => s.Length == 1 || s.Length == 2);
foreach (var match in matches)
{
    Console.WriteLine(match);
}

matchesには、長さが 1 または 2 の文字列であるが含まれますIEnumerable<string>。ただし、これは文字列であるかどうかを確認しませんが、そのようにコードを簡単に変更できます。

于 2012-10-01T20:42:59.860 に答える