2017-01-23 1 views
0

Недавно я спросил о фрагменте кода для хранения данных для моих торговых карт. У меня есть файл, который содержит общий список карт в CSV-файле. Мне было интересно, есть ли способ удалить строку из файла CSV, когда выбран номер карты и нажата кнопка отправки. Код, который я в настоящее время является:Удаление строки из файла csv, когда оно выбрано из comboBox, и нажатой кнопки

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

, а не параллельно коллекция, представляющая определенные стороны каждой карты, было бы проще (и меньше ошибок), чтобы создать класс карты, а затем одну коллекцию. Сохранение может составлять 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

Смежные вопросы