0

C# を使用して、テキスト ファイルを入力として受け入れ、それを読み取り、そのテキスト ファイル内のデータのセクションを、インデックス # を含む個別のグループに分割する作業アプリを作成することが目標です。セクションの最初の部分にあります。

これはおそらく、プレーンテキストファイルでデータを取得し、それをデータの「グループ」のセクションに分割する方法についての質問です。何らかの管理された形式でファイルを出力します。

テキスト入力ファイルには 13 のフィールドがあり、さらにステータス用の追加フィールドがあり、14 のフィールドになります。

テキスト入力ファイルには、約 1500 から 2000 のグループのデータ セクションが含まれるため、最大 2000 のエントリがインデックス化され、エントリの名前が最初のフィールドである「パッケージ名」になります。データのセクションは次のようになります。

Package:  horse
Version:  1.2.3
Depends:  libgcc
Provides:
Status:  user installed
Other:   other info
Other2:  other info 2

Package:  cow
Version:  2.3.4
Depends:  libhay
Provides: milk
Status:   user installed
Other:    white with black spots
Other2:   has a red cow bell around her neck

Package:  tractor
Version:  0.9.22
Depends:  diesel
Provides:

等...

データを読み取って、適切なテーブル、エントリ、またはデータセットに配置するにはどうすればよいですか?

ps前回の編集ありがとう

4

1 に答える 1

0

単純な解決策は、一度に 1 行ずつファイルを読み取り、「:」で分割し、それぞれを に格納し、Dictionary<string, string>それ自体を に格納し、Packageそれを に追加することList<Package>です。キーワード「パッケージ」を取得するたびに、新しいPackageインスタンスを作成してリストに追加します。以下のコードはそのトリックを実行しますが、あまり防御的にコーディングされていません。

    static void Main(string[] args)
    {
      string line;
      List<Package> packages = new List<Package>();
      Package package = null;
      StreamReader file = new System.IO.StreamReader("TextFile1.txt");
      while ((line = file.ReadLine()) != null)
      {
        string[] pair = line.Split(new string[] { ": " }, StringSplitOptions.None);
        if (pair.Length != 2)
          continue;
        if (pair[0] == "Package")
        {
          package = new Package();
          packages.Add(package);
        }
        package.Values.Add(pair[0].Trim(), pair[1].Trim());
      }
      file.Close();
      Console.WriteLine(packages.Count);
      foreach (Package p in packages)
      {
        Console.WriteLine(p);
        foreach (KeyValuePair<string, string> pair in p.Values)
          Console.WriteLine("{0}={1}", pair.Key, pair.Value);
      }
      Console.ReadLine();
    }
  }

  class Package
  {
    public Dictionary<string, string> Values;
    public Package()
    {
      Values = new Dictionary<string, string>();
    }
  }
于 2012-07-01T08:00:30.777 に答える