2014-01-18 28 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

之前創建適當大小的數組Ÿ會使用動態列表,但你說得對,會加上 – David

+0

的例子,'List '是個不錯的選擇。你可以使用'ToArray()'爲這些數組賦值 –

1

使用File.ReadAllLinesForEach你能做到在一個語句,如:

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]); 
         }); 
相關問題