【问题标题】:File contents filtering文件内容过滤
【发布时间】:2013-08-13 16:11:21
【问题描述】:

我正在尝试开发一个应用程序,该应用程序将从数据网格中获取数据并基于下拉菜单选项返回一个仅包含所选客户端的 csv 文件。我的代码如下所示,此链接指向我发布的上一个问题,但是我仍然没有得到任何值,我真的需要解决这个问题,所以我想知道是否有人可以看到我是否出错或提供替代方案

    //Master inventory export 
    private void ExportClass_Click(object sender, EventArgs e)
    {
        StringBuilder str = new StringBuilder();
        objSqlCommands2 = new SqlCommands("MasterInventory", "ClientName");
        string strString = str.ToString();
        string Filepath = txtSaveShareClass.Text.ToString();
        str.Append("ISIN ,FundName,Status,Share CCY,Benchmark,NAV  Freq,CLASSCODE,SIMULATION,HEDGED,FUNDCCY");

        StringManipulation sm = new StringManipulation();

        foreach (DataRow dr in this.CalcDataSet.MasterInventory)
        {
            foreach (object field in dr.ItemArray)
            {
                str.Append(field.ToString() + ",");
             }

            str.Replace(",", "\n", str.Length - 1, 1);
        }

        try
        {
            System.IO.File.WriteAllText(Filepath, str.ToString());

        }
        catch (Exception ex)
        {
            MessageBox.Show("Write Error :" + ex.Message);
        }

        List<string[]> lsClientList =  objStringManipulation.parseCSV(Filepath,cmbClientList .Text.ToCharArray());


        foreach (string[] laClient in lsClientList)
        {
            sm.parseCSV2(Filepath, cmbClientList.Text.ToCharArray());
            List<string[]> newFoo = lsClientList.Where(x =>  x.Contains(cmbClientList.Text)).ToList();
            List<string[]> Results = sm.parseCSV2(Filepath,    cmbClientList.Text.ToCharArray()).Where(x => x.Contains(cmbClientList.Text)).ToList();

            //Refreshs the Client table on display from the 
            System.IO.File.WriteAllText(Filepath, Results.ToString());             
        }

        this.TableAdapter.Fill(this.CalcDataSet.MasterInventory);

        dataGridView2.Update();

    }

【问题讨论】:

  • 那么问题出在哪里? CSV 文件是否正确写入?它读回正确吗? newFoo 是否得到您期望的结果? Results 是否得到您期望的结果?在Results 上调用ToString() 不会给您任何有用的信息。您必须枚举它以获取字符串。您需要让我们知道您的问题出在哪里,否则我们无处可开始为您提供帮助。
  • 我不知道问题出在哪里,我所看到的其他人我已经证明它应该可以工作,是的 csv 是正确的,不它得到 0 结果....好吧抱歉,我认为问题已经表明,问题是它说我需要得到正确的结果,正如问题所说的那样
  • 您是否在调试器中运行此程序,单步执行并检查每个操作的结果?只有这样才能找出问题所在。
  • 是的,同样的,我看不到问题,变量填充正确

标签: c# csv file-io


【解决方案1】:

如果您的所有变量都正确填写并且您的Results 列表包含您期望的数据,那么问题出在您的WriteAllText 调用上。你有:

System.IO.File.WriteAllText(Filepath, Results.ToString());

这不会产生您似乎期望的输出。它可能只会给你类名。

Results 是一个List&lt;string[]&gt;。如果要将其输出为 CSV,则必须枚举它:

using (var outfile = new StreamWriter(Filepath))
{
    foreach (var line in Results)
    {
        StringBuilder sb = new StringBuilder();
        foreach (var field in line)
        {
            sb.Append(field + ",");
        }
        sb.Length = sb.Length -1;
        outfile.WriteLine(sb.ToString());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2013-09-16
    • 2019-09-24
    • 2012-06-14
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多