0

特定の ID に新しい価格を追加するたびにファイルを更新しようとしています。

ID、Name、Address、State、Zip、Age、Ordered などの複数の行を含む .csv ファイルがあります。Ordered フィールドはすべて 0 から始まります。

現在、ID を選択して価格を挿入できるフォームがあります..その価格を .csv の注文合計に追加したいと思います。

基本的に、Ordered が 0 から始まり、11.45 の価格を追加すると、新しい .csv は Ordered 行に 11.45 を反映するはずです..次に、フォームを再度開いて別の価格 2.00 を追加すると...新しい注文は 13.45 です。

    public void Customer()
    {
        string name = "";
        string address = "";
        string state = "";
        int customerID = 0;
        int zip = 0;
        int age = 0;
        double Ordered = 0;

        Customer[] Array = Customer.getAll();

        for (int k = 0; k < Array.Length; k++)
        {
            if (Array[k] != null)
            {
                ID = Array[k].getID();
                if (Convert.ToInt32(Field.Text) == ID)
                {
                    ID = Array[k].getID();
                    name = Array[k].getName();
                    address = myCustArray[k].getAddress();
                    state = myCustArray[k].getState();
                    zip = myCustArray[k].getZip();
                    age = myCustArray[k].getAge();
                    Ordered = (Array[k].getOrdered()
                    + Convert.ToDouble(PriceField.Text));

                    using (FileStream fs = new FileStream(@"customer.csv",FileMode.Append, FileAccess.Write))
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        sw.WriteLine(customerID + "," + name + "," + address + "," + state + "," + zip + "," + age + "," + totalOrdered + "/r/n");
                    }
                }
            }
        }
    }
}

}

4

1 に答える 1

1

これを行う唯一の方法は、ファイルを新しいデータで書き直すことです。

理論的には、書き込み用にファイルを開き、変更したい値の位置をシークし、新しい値を書き込むことができますが、その新しい値は (文字数の点で) 同じサイズでなければなりません。ファイル内で使用可能なスペースを拡大または縮小できないため、置き換えられます。また、ファイルを解析して、値を配置する適切な場所を見つけるという手間もかかります。

アップデート

あなたが提案するように、データを完全な行として書き出すことは、それを行うためのより簡単な方法です。ただし、次のことを行う必要があります。

  1. ソースファイルを読み取り用に開く
  2. 書き込み用の新しいファイルを作成する
  3. ソースファイルから行を読み取り、変更したい行が見つかるまでターゲットファイルに書き込みます
  4. ソースファイルの行ではなく、配列のデータを使用して新しい行を書き込みます
  5. ソースからターゲットへの行のコピーを続行します。
  6. 両方のファイルを閉じる
  7. ソースファイルを削除
  8. ターゲット ファイルの名前を変更して、ソース ファイルを置き換えます。

または、配列に CSV のすべてのデータが含まれている場合は、それを新しい CSV にダンプしてから、上記の 7 と 8 を実行できます。

于 2012-12-13T03:15:41.220 に答える