2014-01-18 2 views
0
private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog save = new SaveFileDialog(); 
    save.FileName = txtRecipeName.Text + ".MyRecipe"; 
    save.Filter = "Recipe File | *.MyRecipe"; 
    if (save.ShowDialog() == DialogResult.OK) 
    { 
     StreamWriter writer = new StreamWriter(save.OpenFile()); 

     for (int i = 0; i < ingredients.Count; i++) 
     { 
      writer.Write(ingredients[i] + ","); 
      writer.Write(amount[i] + ","); 
      writer.Write(units[i] + "\n"); 
     } 

     writer.Dispose(); 
     writer.Close(); 
    } 

} 

private void openToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog open = new OpenFileDialog(); 
    open.ShowDialog(); 
    open.Filter = "Recipe Files|*.MyRecipe|All Files|*.*"; 
    open.FilterIndex = 1; 

    StreamReader reader = new StreamReader(open.FileName); 
} 

Мой вопрос в том, как я могу сделать это так, чтобы считыватель потока просматривал текстовый файл, чтобы первое слово после новой строки было сохранено в список ингредиентов, а затем второе слово сохраняется в списке сумм, а третье слово сохраняется в списках единиц.Как я могу сериализовать текстовый файл в элементы массива C#

Вот выход на текстовый файл:

egg,5,Ounce 
milk,54,Pint 

ответ

1

Вы можете использовать разделительную функцию строки:

IList<string> lstIngredients = new List<string>(); 
IList<string> lstAmount = new List<string>(); 
IList<string> lstUnits = new List<string>(); 

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

    lstIngredients.Add(parts[0]); 
    lstAmount.Add(parts[1]); 
    lstUnits.Add(parts[2]); 
} 

ingredients = lstIngredients.ToArray(); 
amount = lstAmount.ToArray(); 
units = lstUnits.ToArray(); 
+0

Вы должны создать массивы соответствующего размера до –

+0

I personall y будет использовать динамические списки, но вы правы, добавите к примеру – David

+0

согласитесь, 'List ' - хороший вариант. Вы можете использовать 'ToArray()' для присвоения значений этим массивам –

1

Использование File.ReadAllLines и ForEach вы можете это сделать в одном операторе, как:

var lstIngredients = new List<string>(); 
var lstAmount = new List<string>(); 
var lstUnits = new List<string>(); 

File.ReadAllLines("filePath") 
    .ToList() 
    .ForEach((line) => { 
          var words = line.Split(','); 
          lstIngredients.Add(words[0]); 
          lstAmount.Add(words[1]); 
          lstUnits.Add(words[2]); 
         }); 
Смежные вопросы