【问题标题】:Loop Help For Storing Values From Text File [closed]从文本文件存储值的循环帮助[关闭]
【发布时间】:2014-05-13 23:44:17
【问题描述】:

我正在读取一个文本文件并将其拆分为定界点。 : 之前的所有内容都是左值,之后的所有内容都是右值。什么是通过行的最佳循环并将字符串值存储到 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 

        }

              }

【问题讨论】:

  • 你的代码不完整,甚至没有编译。
  • 您的意思是文本文件中的每一行都有一个 ':' 吗?你想分割每一行吗?
  • @elgonzo 不,只是人们在争论谁是对的,我什至没有要求我的代码被处理我要求方向,没有人带我去那里。
  • @Smith.h.Neil 是的,它用 : 和 ; 分隔
  • 啊,好吧,我没看答案。实在是太糟糕了……

标签: c# string loops streamreader


【解决方案1】:

这应该可行。不确定你是否想要最后的分号,所以我把它删除了。

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]);
            }
        }
    }
}

可以稍微清理一下,但你明白了。您正在阅读整个文件,然后拆分。你怎么知道每行的左边和右边是哪个?也许检查偶数和赔率?这很糟糕,但是当您可以只读取一行然后将其拆分时。然后只需抓住数组中的第一个和第二个项目,你就有了两个项目。

【讨论】:

  • 这很好用,但应用程序仍然打开,你能推荐运行 eof 的最佳位置吗?
  • 'eof or' 是什么意思?如果您只想在此执行后关闭并且这是唯一的形式,只需在末尾添加 this.Close() 即可。
【解决方案2】:

对于您提供的内容,foreach 就可以了。

至于如何存储它们,这完全取决于您需要对它们做什么。如果“left”上的项目都是唯一的,您可以制作一个字典,其中“left”是键,“right”是值。那将很容易使用。否则,如果“left”不是唯一的,您可以拥有一个元组列表 (List&lt;Tuple&lt;string,string&gt;&gt;) 或 KeyValuePairs (List&lt;KeyValuePair&lt;string,string&gt;&gt;)。

【讨论】:

  • 就是这样,左边是一个键,右边是那个值
  • 好的。然后你就可以使用字典了。
猜你喜欢
  • 1970-01-01
  • 2010-10-17
  • 2022-01-24
  • 2023-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
相关资源
最近更新 更多