2017-01-23 16 views
0

私は最近、トレーディングカード用のデータを保持するコードについて尋ねました。私は、CSVファイル内のカードの全体的なリストを含むファイルを持っています。私は、カード番号が選択され、送信ボタンが押されたときに、CSVファイルから行を削除する方法があるかどうか疑問に思っていました。私は現在持っているコードは次のとおりです。コンボボックスから選択され、ボタンが押されたときにcsvファイルから行を削除する

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 

namespace YuGiOh_Card_List 
{ 
    public partial class frmAddLOB : Form 
    { 
     List<string> cardNo = new List<string>(); 
     List<string> cardName = new List<string>(); 
     List<string> cardRarity = new List<string>(); 
     List<string> cardType = new List<string>(); 

     public frmAddLOB() 
     { 
      InitializeComponent(); 

      StreamReader reader = File.OpenText("..\\Debug\\lobList.csv"); 

      while (!reader.EndOfStream) 
      { 
       var line = reader.ReadLine(); 
       var values = line.Split(','); 

      cardNo.Add(values[0]); 
      cardName.Add(values[1]); 
      cardRarity.Add(values[2]); 
      cardType.Add(values[3]); 

      cboCardNo.Items.Add(values[0]); 
     } 

     reader.Close(); 
    } 

    private void cboCardNo_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     lblCardNoFinal.Text = cardNo[cboCardNo.SelectedIndex]; 
     lblCardNameFinal.Text = cardName[cboCardNo.SelectedIndex]; 
     lblCardRarityFinal.Text = cardRarity[cboCardNo.SelectedIndex]; 
     lblCardTypeFinal.Text = cardType[cboCardNo.SelectedIndex]; 
    } 

    private void btnAdd_Click(object sender, EventArgs e) 
    { 
     string file = ("..\\Debug\\LOB.csv"); 
     string delimiter = ",";    

     var card = new Card(lblCardNoFinal.Text, lblCardNameFinal.Text, lblCardRarityFinal.Text, lblCardTypeFinal.Text); 
     Global.card.Add(card); 
     File.AppendAllLines(file, new[] { card.CardNo + delimiter + card.CardName + delimiter + card.CardRarity + delimiter + card.CardType }); 

     MessageBox.Show("Card Added");    
    } 
} 

}

だから私は行が「loblist.csv」から除去し、(それが現在やっている)LOBファイルに追加することにしたいです。ありがとう

+0

ではなく、各カードの特定の側面を表す並列コレクション、それは容易になるだろうが、(エラーが発生しにくい)、1つのコレクションであるCardクラスを作成します。保存は2-3行のシリアライゼーションまたはループであり、コレクション内にあるものを書き込むことができます – Plutonix

+0

ソースファイル内のすべての行は一意ですか? –

+0

すべてのラインが一意です – fg2210

答えて

0

これはうまくいくはずです。残念ながら、テキストファイルのインプレース編集のために.Net(AFAIK)で使用できるクラス/メソッドはありません(私が推測すると思います)。免責事項 - あなたは上記のPlutonixで説明したアプローチを含め、ここでは機能単位を目指しているものを行うには非常にクリーンな方法があります:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 

namespace YuGiOh_Card_List 
{ 
    public partial class frmAddLOB : Form 
    { 
     List<string> cardNo = new List<string>(); 
     List<string> cardName = new List<string>(); 
     List<string> cardRarity = new List<string>(); 
     List<string> cardType = new List<string>(); 
     List<string> Lines = new List<string>(); 

     public frmAddLOB() 
     { 
      InitializeComponent(); 

      StreamReader reader = File.OpenText("..\\Debug\\lobList.csv"); 

      while (!reader.EndOfStream) 
      { 
       var line = reader.ReadLine(); 

       var values = line.Split(','); 

       Lines.Add(line); 
       cardNo.Add(values[0]); 
       cardName.Add(values[1]); 
       cardRarity.Add(values[2]); 
       cardType.Add(values[3]); 

       cboCardNo.Items.Add(values[0]); 
      } 

      reader.Close(); 
     } 

     private void cboCardNo_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      lblCardNoFinal.Text = cardNo[cboCardNo.SelectedIndex]; 
      lblCardNameFinal.Text = cardName[cboCardNo.SelectedIndex]; 
      lblCardRarityFinal.Text = cardRarity[cboCardNo.SelectedIndex]; 
      lblCardTypeFinal.Text = cardType[cboCardNo.SelectedIndex]; 
     } 

     private void btnAdd_Click(object sender, EventArgs e) 
     { 
      string file = ("..\\Debug\\LOB.csv"); 
      string delimiter = ","; 

      var card = new Card(lblCardNoFinal.Text, lblCardNameFinal.Text, lblCardRarityFinal.Text, 
       lblCardTypeFinal.Text); 
      Global.card.Add(card); 
      var newLine = card.CardNo + delimiter + card.CardName + delimiter + card.CardRarity + delimiter + 
          card.CardType; 
      File.AppendAllLines(file, 
       new string [] {newLine}); 

      if (Lines.Contains(newLine)) 
      { 
       Lines.Remove(newLine); 
       File.WriteAllLines("..\\Debug\\lobList.csv", Lines); 
      } 

      MessageBox.Show("Card Added"); 
     } 
    } 
} 
+0

はい、完璧に動作します、ありがとう!私はいつも自分がハハという単純なことを混乱させているのを見つけます。再度、感謝します :) – fg2210

関連する問題