1

私はC#に非常に慣れておらず、ファイルの書き込みと読み取りにも慣れていません。とにかく、タイマーが数値に達したときにイベントを再生するイベントシーケンスを作成しています。また、そのファイルでは、タイマーはファイルに保存されている数値に応じて速度を調整します。これについてはどうすればよいですか。デコードされたときのそのファイルのテキストは次のとおりです。

 [EventSequence]
{
    DisplayName "Default"
    OFFset = 0
    Resolution = 192

}
 [SyncSequence]
{
0 = B 180000
}
 [EventsNotes]
{
0 = E "section Intro"
15168 = E "Note1"
21120 = E "Note2"
26880 = E "Note3"
38976 = E "Note4"
44928 = E "Note5"
}
 [Events]
{
192 = N 0 0
240 = N 0 0
288 = N 0 0
336 = N 0 0
384 = N 4 0
432 = N 0 0
480 = N 0 0
528 = N 0 0
576 = N 3 0
624 = N 0 0
672 = N 0 0
720 = N 0 0
768 = N 4 0
816 = N 0 0
864 = N 0 0
912 = N 0 0
960 = N 2 0
1008 = N 0 0
1056 = N 0 0
1104 = N 0 0
1152 = N 1 0
 }

タイマーは非常に高速ですが、同期中の値に依存します。大きい値はイベントをトリガーする時間であり、N00などはイベントです。「イベントノート」の同様の設定。残りは基本的な情報です。ヘルプやアドバイスはAdvancedで歓迎されます。

4

1 に答える 1

3

私はあなたの場合のためにこの関数を作りました:

public List<string> GetFileKeyValues(string fileName, string key)
        {
            List<string> res = new List<string>();
            try
            {
                if (!string.IsNullOrEmpty(key))
                {
                    using (System.IO.StreamReader tr = new System.IO.StreamReader(fileName))
                    {
                        bool keyFound = false;
                        while (!tr.EndOfStream)
                        {
                            string s = tr.ReadLine().ToLower();
                            if (s.Contains(key.ToLower())) keyFound = true;
                            else
                            {
                                if (keyFound)
                                {
                                    if (!s.Contains("{") && !s.Contains("}")) res.Add(s);
                                    if (s.Contains("}")) break;
                                }
                            }
                        }
                        tr.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return res;
        }

使用法[SyncSequence]では、値を取得したいとします。

List<string> res = GetFileKeyValues(@"C:\t.txt", "[SyncSequence]");
if(res != null && res.Count > 0) 
{
  //Do Something with res[0], it will return 0 = B 180000
  //So you split it by "=" to get B 180000 or any thing you want... 
} 
于 2012-04-13T07:06:21.527 に答える