【问题标题】:Adding text items from a csv file, to a listbox only when certain a string matches a string from that csv file仅当某个字符串与该 csv 文件中的字符串匹配时,才将 csv 文件中的文本项添加到列表框
【发布时间】:2014-11-03 04:10:14
【问题描述】:

所以我一直在试图弄清楚如何带入一整行 .csv 文件,但只有第一个字符串与另一个字符串匹配。 这就是我到目前为止所得到的,所有我回到我的列表框中的信息都是来自同一随机行的信息。 如果你们能帮助我的逻辑,那将很有帮助,谢谢

cbocustinfo.Items.Clear();
lstcustinfo.Items.Clear();
StreamReader infile, transdata;
infile = File.OpenText(@"E:\AS2customers.csv");
transdata= File.OpenText(@"E:\AS2data.csv");
string[] custinfo, names;
string[] custtrans;
do
{
    custtrans = transdata.ReadLine().Split(',');
    if (custinfo[1] == custtrans[0])
    {
        lstcustinfo.Items.Add(custtrans[3] + " " + custtrans[4]);
    }
}
while (transdata.EndOfStream != True);
infile.Close(); 
transdata.Close();

这里是我初始化 custinfo 的地方

do
{ 
    custinfo = infile.ReadLine().Split(',');
    names = custinfo[0].Split(' ');
    cbocustinfo.Items.Add(names[0] +" "+ names[1]+ " " + custinfo[1]);
}
while (infile.EndOfStream != true);

【问题讨论】:

  • 在我看来,这会产生一个运行时错误:if (custinfo[1],因为您从未初始化 custinfo 数组。
  • 另外,你的 streamReader 应该在 using 语句中,因为它们实现了 IDisposable()
  • 何时将数据填充到custinfo 数组中?目前它似乎从未被初始化。
  • 我把 using 当作 using Systems.IO;在我开始编程之前,我早些时候初始化了 custinfo,我只是不想包含它,因为太长可能会更加混乱
  • 好吧,在您刚刚添加的 do 循环中,您将一遍又一遍地覆盖 custinfonames,直到您到达 infile 的末尾。

标签: c# arrays io listbox streamreader


【解决方案1】:

如果我理解您要正确执行的操作,那么将文件读入两个字符串可能会更容易,然后在这些字符串上进行拆分和循环。我不知道您的文件格式,因此这可能会进行不必要的处理(循环遍历每个客户的所有交易)。

例如:

cbocustinfo.Items.Clear();
lstcustinfo.Items.Clear();

var customers = File.ReadAllText(@"E:\AS2customers.csv")
    .Split(new []{Environment.NewLine}, StringSplitOptions.None);

var transactions = File.ReadAllText(@"E:\AS2data.csv")
    .Split(new []{Environment.NewLine}, StringSplitOptions.None);

foreach (var customer in customers)
{
    var custInfo = customer.Split(',');
    var names = custInfo[0].Split(' ');
    cbocustinfo.Items.Add(names[0] + " " + names[1]+ " " + custinfo[1]);

    foreach (var transaction in transactions)
    {
        var transInfo = transaction.Split(',');

        if (custInfo[1] == transInfo[0])
        {
            lstcustinfo.Items.Add(transInfo[3] + " " + transInfo[4]);
        }
    }
}

【讨论】:

  • 我对 foreach 没有太多经验,您在哪里初始化客户变量?还是仅代表文件中的各个行?
  • 在这里初始化:foreach (var customer in customers)。 var 是一种快捷形式,可以在设计时推断类型时使用。在这种情况下,它是一个字符串。在这种情况下,它与写foreach (string customer in customers)相同。
  • 好的,是的,这是有道理的,它确实有助于我理解,谢谢。我尝试使用您提供的方法,但对于 custinfo[1] 的每个实例,它都会给我一个超出范围的数组错误
  • 我不知道这是否重要,但我对来自组合框的 selectedindex 事件执行所有这些操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多