在C#中一次从字符串中提取五个数字

时间:2012-04-11 14:10:41

标签: c# .net windows

我试图从文件中取出数字(字符0-9)并将它们存储在内存中。

让我们说我们有一个名为" register" (并且只能(必须)最多保持5个字符)并且寄存器字符串将采用从文件中读取的数字,例如:

File1.txt:

  

门牌号码是10,价格是4000和3。

因此,注册表将填写以下内容:" 10400"

然后会对字符串执行一些逻辑,然后第一个字符串将从字符串中删除,所有内容都会向左移1,并且会添加文件中的另一个字符(数字),例如:

  

04000

然后......

  

40003

希望有人可以对此有所了解,并提供一些实现这一目标的方法:)

4 个答案:

答案 0 :(得分:1)

好吧,如果你想从字符串中删掉第一个字符并在最后添加一个字符,你可以说:

string s = "10400";
string t = s.Substring(1) + "0";

这会给t = "04000"。重复:

string u = t.Substring(1) + "3";

这会给u = "40003"

那么,你还想要什么?确定最终添加内容的逻辑是你的工作。

答案 1 :(得分:0)

行...

首先,FileStream和相关的StreamReader将允许您以几乎任何您想要的格式读取文件。这很重要,因为您的特定算法将决定检索方法。

将其煮沸,你想从文件中读取字符,当该字符是数字时,将其存储在寄存器中,继续以这种方式,直到寄存器中有五个数字字符。然后,你会做一些逻辑导致第一个数字不再有用,所以你截断它并得到下一个值。

这些方面的内容怎么样?

var register = new StringBuilder();

using(var stream = File.Open("File1.txt"))
{
   bool ended, fileEnded;   
   int buffer;
   while(!ended)
   {
      while(register.Length < 5 && !fileEnded)
      {
         buffer = stream.ReadByte();
         if(buffer == -1)
         {
            fileEnded = true;
            break;
         }

         var myChar = (char)buffer;
         if(Char.IsNumber(myChar))
            StringBuilder.Append(myChar);
      }

      //at this point you have 5 characters in register (or have run out of file).
      //perform your logic, then remove the front character
      register.Remove(0,1);

      //repeat the loop. You won't get any more new characters once you reach the end of file,
      //but the main loop will keep running until you set ended to true
      if(WereDone())
         ended=true;
   }
   stream.Close();
}

您还可以将整个文件读入一个字符串变量,然后应用一个可以找到数字字符的正则表达式,将它们连接到一个大缓冲区,然后从中填充您的寄存器。对于小文件来说,这是一种更好的方法,但是这个文件适用于任何文件大小。

答案 2 :(得分:0)

您可以像这样创建一个List的扩展方法:

static class Helper
{
    public static void Push<T>(this List<T> list, T item)
    {

        if (list.Count == 5)
            list.RemoveAt(0);

        list.Add(item);

    }
}

然后您就可以使用它:

 List<char> queue = new List<char>(5);
 queue.Push('1');
 queue.Push('0');
 queue.Push('4');
 queue.Push('0');
 queue.Push('0');

后续调用Push将删除第一个字符并添加最后一个字符

 queue.Push('1');

答案 3 :(得分:0)

我可能会提供一种方法来将正确的字符串提取到值中。请参阅下面的示例:

    static string FetchRegister(string Source, int Max, int StartIndex)
    {
        string Register = string.Empty;
        int RegisterIndex = 0;

        for (int i = 0; i < Source.Length; i++)
        {
            if (char.IsNumber(Source[i]))
            {
                if (RegisterIndex >= StartIndex)
                {
                    Register += Source[i].ToString();
                    if (Register.Length == Max)
                    {
                        return Register;
                    }
                }
                RegisterIndex += 1;
            }
        }
        return Register;
    }