2014-05-13 15 views
-4

我正在阅读文本文件并将其分隔为分隔点。在:之前的所有内容都是左边的值,之后的所有内容都是正确的。什么是通过线条的最佳循环,并将字符串值存储到2个列表中,左边还是右边?我不需要它们输出,只需将值存储在列表中。用于从文本文件存储值的循环帮助

namespace WindowsFormsApplication8 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     id newId = new id(); 
     newId.Left = ""; 
     id newId2 = new id(); 
     newId2.Right = ""; 

    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog of = new OpenFileDialog(); 
     of.ShowDialog(); 
     textBox1.Text = of.FileName; 
     using (StreamReader sr = new StreamReader(of.FileName)); 

     string content = File.ReadAllText(of.FileName); 
     string[] split = content.Split(';' , ':'); 
     foreach (string segment in split) 
     { 

      if 

     } 

       } 
+0

你的代码不完整,甚至没有编译。 – LawfulHacker

+0

你是说文本文件中的每一行都有':'?你想分割每一行? –

+0

@elgonzo不,这只是人们争论谁是对的,我甚至不会要求我的代码在我的工作上寻求方向,没有人会把我带到那里。 – user3617347

回答

0

这应该工作。不知道如果你想在最后的分号,所以我只是删除它。

var left = new List<string>(); 
var right = new List<string>(); 
using (var diag = new OpenFileDialog()) { 
    if (diag.ShowDialog() == DialogResult.OK) { 
     using (var sr = new StreamReader(diag.FileName)) { 
      string line; 
      while ((line = sr.ReadLine()) != null) { 
       var split = line.Replace(";", "").Split(':'); 
       if (split[0] != null && split[1] != null) { 
        left.Add(split[0]); 
        right.Add(split[1]); 
       } 
      } 
     } 
    } 
} 

我注意到你提到这是一个键/值的事情,所以我真的做:

var dict = new Dictionary<string, string>(); 
using (var diag = new OpenFileDialog()) { 
    if (diag.ShowDialog() == DialogResult.OK) { 
     using (var sr = new StreamReader(diag.FileName)) { 
      string line; 
      while ((line = sr.ReadLine()) != null) { 
       var split = line.Replace(";", "").Split(':'); 
       if (split[0] != null && split[1] != null) 
        dict.Add(split[0], split[1]); 
      } 
     } 
    } 
} 

可以清理一下,但你看到这一点。您正在阅读整个文件,然后分裂。你怎么知道每条线的左边和右边是哪条?也许检查均衡和赔率?这很糟糕,尽管你可以只读一行然后再分开。然后,只需抓住阵列中的第一个和第二个项目,就可以获得两个项目。

+0

这个工作完美,但应用程序仍然是开放的,你可以推荐最好的地方来运行eof或 – user3617347

+0

你是什么意思的'eof或'?如果你只是想在执行完成后关闭,并且这是唯一的形式,那么只需在末尾添加this.Close()即可。 –

0

对于你所提供的,foreach可以做得很好。

至于如何存储它们,这完全取决于你需要用它们做什么。如果“左边”的项目都是唯一的,您可以创建一个字典,其中“左”是关键字,“右”是值。这很容易处理。否则,如果“左”不是唯一的,你可以有一个元组列表(List<Tuple<string,string>>)或KeyValuePairs(List<KeyValuePair<string,string>>)。

+0

就是这样,左边是关键,右边是那个值 – user3617347

+0

好的。然后你可以使用Dictionary。 – MPelletier