2012-12-13 23 views
0

我試圖每次向某個ID添加新價格時更新我的​​文件。使用陣列更新文件

我有一個.csv文件包含多行,如ID,名稱,地址,州,郵編,年齡,有序。所有已訂購字段的起始值爲0.

現在,我有一個表單,您可以選擇ID並插入價格....我希望將該價格添加到.csv中的總排序中。

因此,基本上,如果訂購從0開始,我添加了11.45的價格。新的.csv應在有序行中反映11.45。然後,如果我再次打開表單並添加另一個2.00的價格。 ..新Ordered將是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"); 
        } 
       } 
      } 
     } 
    } 
} 

}

+0

我只是做安德魯在下面說,並使用你的數組重寫該文件:http://stackoverflow.com/a/7405989/771928。使用創建,因爲它會覆蓋當前文件。一定要關閉你的讀者和作家! – KreepN

回答

1

做到這一點的唯一方法是將文件改寫新數據。

理論上,您可以打開文件進行寫入,尋找想要更改值的位置,然後寫入新值,但是新值必須是相同大小(以字符數量計) ),因爲您無法擴展或縮小文件中可用的空間。而且您還有解析文件的麻煩,以找到放置該值的正確位置。

更新

寫入數據作爲一個comlete線,正如你提到的,會做一個簡單的方法。不過你需要做以下的事情。

  1. 開放閱讀
  2. 從源文件寫入
  3. 讀線創建一個新的文件,並將其寫入到目標文件,直到你找到你想要改變
  4. 寫行的源文件新行使用數組中的數據而不是源文件中的行
  5. 繼續將行從源複製到目標。
  6. 關閉這兩個文件
  7. 刪除源文件
  8. 重命名目標文件替換源文件。

或者,如果您的數組包含CSV中的所有數據,您可以將其轉儲爲新的CSV,然後執行上述7和8操作。

+0

好吧讓我編輯真的很快...... – HNVDB

+0

編輯我的帖子,我可以保存在下拉菜單中選擇客戶ID的整個行嗎? (姓名,地址,州,郵編,年齡,累計總數) – HNVDB

+0

同一答案。只有該行的字符數與它所替換的字符數完全相同。 –