0

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

假设我们有一个名为“register”的字符串(并且只能(必须)最多保存 5 个字符),并且 register 字符串将接收从文件中读取的数字,例如:

文件 1.txt:

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

所以寄存器将填写以下内容:“10400”

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

04000

接着...

40003

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

4

4 回答 4

1

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

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

这给了t = "04000". 重复:

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

这给了u = "40003".

那么,你还想要什么?弄清楚最后添加什么的逻辑是你的工作。

于 2012-04-11T14:14:27.627 回答
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');
于 2012-04-11T14:34:12.807 回答
0

好的...

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

归结起来,您想从文件中读取字符,当该字符是数字时,将其存储在寄存器中,以这种方式继续,直到寄存器中有五个数字字符。然后,您将执行一些逻辑,导致第一个数字不再有用,因此您将其截断并获取下一个值。

这些方面的东西怎么样?

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();
}

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

于 2012-04-11T14:31:29.507 回答
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;
    }
于 2012-04-11T14:55:34.493 回答