当前位置: 首页 > 知识库问答 >
问题:

如何在其中使用检查条件并保存文件。C中的csv文件#

曾修真
2023-03-14

我有一个. csv文件。我想使用此文件创建文件。这是. csv文件的格式。这是我的. csv文件的一小部分。我的原始文件中还有60000多行。

Date,Pass,CutMark1,Marks1,CutMark2,Marks2,
22/06/2017 13:04:18,FALSE,TRUE,40,FALSE,35,
22/06/2017 13:04:20,FALSE,TRUE,35,FALSE,35,
22/06/2017 13:04:35,FALSE,TRUE,55,FALSE,55,
22/06/2017 13:04:37,FALSE,TRUE,100,FALSE,55,
22/06/2017 13:04:37,FALSE,TRUE,38,FALSE,55,
22/06/2017 13:04:38,FALSE,FALSE,35,FALSE,55,
22/06/2017 13:04:39,FALSE,FALSE,35,FALSE,38,
22/06/2017 13:04:40,FALSE,FALSE,35,TRUE,38,
22/06/2017 13:04:41,FALSE,FALSE,55,TRUE,38,
22/06/2017 13:04:42,FALSE,FALSE,55,TRUE,55,
22/06/2017 13:04:44,FALSE,FALSE,38,TRUE,55,
22/06/2017 13:04:45,TRUE,FALSE,38,TRUE,40,
22/06/2017 13:04:46,TRUE,FALSE,38,TRUE,40,
22/06/2017 13:04:48,TRUE,FALSE,55,FALSE,40,
22/06/2017 13:04:49,TRUE,FALSE,55,FALSE,25,
22/06/2017 13:04:50,TRUE,FALSE,55,FALSE,45,
22/06/2017 13:04:52,FALSE,TRUE,55,FALSE,60,
22/06/2017 13:04:53,FALSE,TRUE,40,FALSE,80,
22/06/2017 13:04:54,FALSE,TRUE,40,FALSE,80,
22/06/2017 13:04:56,FALSE,TRUE,40,FALSE,75,
22/06/2017 13:04:57,FALSE,TRUE,40,FALSE,90,
22/06/2017 13:04:58,FALSE,TRUE,55,FALSE,88,
22/06/2017 13:05:00,TRUE,TRUE,55,TRUE,23,
22/06/2017 13:05:01,TRUE,TRUE,55,TRUE,45,
22/06/2017 13:05:02,TRUE,TRUE,20,TRUE,78,
22/06/2017 13:05:04,TRUE,TRUE,45,TRUE,45,
22/06/2017 13:05:05,TRUE,TRUE,85,TRUE,69,
22/06/2017 13:05:06,TRUE,TRUE,62,TRUE,45,
22/06/2017 13:05:08,TRUE,TRUE,100,TRUE,35,

我想按如下方式保存这些文件。在这里“通过”列要检查。在False之后是False然后True,然后又是True等等,所以我想使用它来保存文件。例如,我想保存此文件首先将False值保存为False1.csv然后其次是True1.csv然后再次满足False2.csv我想在文件名中添加数字,即True或False在多少次中遇到。我希望行保存此. csv文件中的所有其他列。

我用这个例子来解释,我想首先在不同的文件中保存所有假值和真值。我得到了这个例子。在这里,Pass列的前11行是“False”。因此,我想将这些(1-11)行保存在一个文件中,并应另存为False1。csv,然后满足pass“True”有行(12-16)应另存为True1。csv,则Pass值再次满足“False”,然后将这些行(17-22)保存为False2。csv再次满足传递列为“True”,则该行(23-29)另存为True2。csv,同样我想保存,我的中有60000个RAW。csv文件。

这是我读取. csv文件的代码。

using System.Globalization;

public static string dateFormatString = "dd/MM/yyyy HH:mm:ss";

private void btnSeperateFile_Click(object sender, EventArgs e)
{
    if (tbOutputFilePath2 != null)
    {
        List<DrawNew> ObservingData = new List<DrawNew>(); // List to store all available DrawNew objects from the CSV

        // Loops through each lines in the CSV
        html" target="_blank">foreach (string line in System.IO.File.ReadAllLines(outputFilePath.Text).Skip(1)) // .Skip(1) is for skipping header
        {
            string[] valuesCsvLine = line.Split(',');
            DrawNew mngInstance = new DrawNew();

            mngInstance.Date = DateTime.ParseExact(valuesCsvLine[0], dateFormatString, CultureInfo.InvariantCulture); 
            mngInstance.Pass = (valuesCsvLine[1] == "TRUE" ? true : false);
            mngInstance.CutMark1 = (valuesCsvLine[2] == "TRUE" ?true: false);
            mngInstance.Marks1 = int.Parse(valuesCsvLine[3]);                 
            mngInstance.CutMark2 = (valuesCsvLine[4] == "TRUE" ? true : false);
            mngInstance.Marks2 = int.Parse(valuesCsvLine[5]); 

            ObserveData.Add(mngInstance);
        }            
    }
}

这是存储. csv文件数据的类:

class DrawNew
{
    public DateTime Date { get; set; } // property to store Date 
    public bool Pass { get; set; } // property to store Pass
    public bool CutMark1 { get; set; } // property to store CutMark1
    public int Marks1 { get; set; } // property to store Marks1
    public bool CutMark2 { get; set; } // property to store CutMark2
    public int Marks2 { get; set; } // property to store Marks2
}

共有1个答案

邢焕
2023-03-14

可能不是最好的、最有效的,甚至不是最好的方式,但它可能会让你开始:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;

[...]

public void StoreSeparatedByPass(IEnumerable<DrawNew> observingData)
{
  // keep the file numbers easily accessible
  var fileCounts
    = new Dictionary<bool, int>
      {
        { false, 0 },
        { true, 0 }
      };

  bool? pass = null;
  var lines = new List<DrawNew>();

  foreach (var drawNew in observingData)
  {
    // to differentiate between "starting with false" 
    // and "starting with true".
    // (only interesting on first item)
    if (pass.HasValue == false)
    {
      pass = drawNew.Pass;
    }

    if (pass.Value != drawNew.Pass)
    {
      // the value of drawNew.Pass changed, the previous "part" has ended.
      // now we need to do store the collected lines (if there are any)...
      if (lines.Any())
      {
        fileCounts[pass.Value]++;
        StoreLines(lines, pass.Value.ToString() + fileCounts[pass.Value] + ".csv");

        // then clear the stored list for the next part...
        lines.Clear();
      }

      // and change the part indicator.
      pass = drawNew.Pass;
    }

    lines.Add(drawNew);
  }

  // don't forget to store the last part...
  if (pass.HasValue && lines.Any())
  {
    fileCounts[pass.Value]++;
    StoreLines(lines, pass.Value.ToString() + fileCounts[pass.Value] + ".csv");
  }
}
public void StoreLines(IEnumerable<DrawNew> lines, string fileName)
{
  // TODO: actually write the DrawNew items to the given filename
}
 类似资料:
  • 问题内容: 我有一个fstream my_file(“ test.txt”),但我不知道test.txt是否存在。如果存在,我也想知道是否也可以阅读。怎么做? 我使用Linux。 问题答案: 我可能会选择: 该方法检查流是否准备好从中读取。

  • 我想确定C 11中是否存在一个文件 我有以下代码: 和 哪一个是正确的和惯用的?

  • 问题内容: Go的标准库没有专门用于检查文件是否存在的函数(如Python的)。什么是 惯用的 方式做到这一点? 问题答案: 要检查文件是否不存在,等同于Python的文件: 要检查文件是否存在,等效于Python的文件: 编辑:根据最近的评论

  • 问题内容: 在打开文件以Java读取之前,如何检查文件是否存在?(相当于Perl的)。 关于SO的唯一类似问题涉及写入文件,因此使用回答了该问题,这显然不适用于此处。 如果可能的话,我宁愿使用真正的API调用返回,而不是使用“调用API来打开文件并在引发异常时捕获并在文本中检查’无文件’的情况下捕获”,但是我可以接受后者。 问题答案: 使用:

  • Go的标准库没有专门用于检查文件是否存在的功能(如Python的)。