0

ファイルから数字(0〜9の文字)を取り込んでメモリに保存しようとしています。

「register」という文字列があり(最大5文字しか保持できない(必須))、レジスタ文字列はファイルから読み取られた数値を受け取るとしましょう。たとえば、次のようになります。

File1.txt:

家番号は10、価格は4000と3です。

したがって、レジスタは次のように入力されます:「10400」

次に、文字列に対していくつかのロジックが実行され、最初の文字が文字列から削除され、すべてが1から左にシフトし、ファイルから別の文字(数値)が追加されます。例:

04000

その後...

40003

うまくいけば、誰かがこれに光を当て、これを達成するためのいくつかの方法を提供することができます:)

4

4 に答える 4

1

さて、文字列から最初の文字を削除し、最後に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

わかった...

まず、FileStreamと関連するStreamReaderを使用すると、ファイルからほぼすべての形式で読み取ることができます。特定のアルゴリズムが取得方法を決定するため、これは重要です。

要約すると、ファイルから文字を読み取り、その文字が数字の場合はレジスタに格納し、レジスタに5つの数字が入るまでこの方法を続けます。次に、最初の数値が役に立たなくなるロジックを実行するので、それを切り捨てて次の値を取得します。

これらの線に沿った何かはどうですか?

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

次のように、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

正しい文字列をフェッチするためのメソッドを値に入れる可能性があります。例については、以下を参照してください。

    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 に答える