C# 使用c从csv文件中删除空列#

C# 使用c从csv文件中删除空列#,c#,csv,C#,Csv,我有包含数据的csv文件 ABC,BCA,AAA CBA,BSH,updated XYZ ,Marketing,YYY 我尝试了下面的代码,但得到的结果如下 结果:- ABC,BCA,AAA CBA,BSH,updated XYZ ,Marketing,YYY 代码:- using System; using System.Collections.Generic; using System.IO; using

我有包含数据的csv文件

   ABC,BCA,AAA 
   CBA,BSH,updated 
   XYZ



   ,Marketing,YYY
我尝试了下面的代码,但得到的结果如下

结果:-

 ABC,BCA,AAA 
 CBA,BSH,updated 
 XYZ
    ,Marketing,YYY
代码:-

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;

    namespace RemoveEmptyLines
    {
       class Program
        {
    static void Main(string[] args)
    {

        string path = @"C:\Users\Test\Downloads\222.csv";
        Test test = new Test();
        test.RemoveBlankRowsFromCVSFile(path);      
    }

   }}

   public class Test
    {
       public void RemoveBlankRowsFromCVSFile(string filepath)
         {
              if (filepath == null || filepath.Length == 0)
                  {
                     throw new ArgumentNullException("filepath");
                   }

               if (!File.Exists(filepath))
                  {
                   throw new FileNotFoundException("Could not find CVS      file.", filepath);
                   }

    var tempFileName = Path.GetTempFileName();
    try
    {
        using (var streamReader = new StreamReader(filepath))
        using (var streamWriter = new StreamWriter(tempFileName))
        {
            string line;
            while ((line = streamReader.ReadLine()) != null)
            {
                if (!string.IsNullOrWhiteSpace(line))
                {
                    streamWriter.WriteLine(line);
                }
            }
        }
        File.Copy(tempFileName, filepath, true);
    }
    finally
    {
        File.Delete(tempFileName);
    }
}}
但我希望输出像

ABC,BCA,AAA 
CBA,BSH,updated 
XYZ,Marketing,YYY
请帮我做这个,提前谢谢

有什么办法可以让我得到想要的结果。

  • 用新数据更新。但所有的建议都是一样的
这不是一个解决方案,而是一个让你真正找到解决方案的建议:

  • 如果事先不知道每行中预期有多少列,这是无法正确完成的,而且在这之后,问题所在的结果解决方案将是不充分的:您的数据仍然不是正确的CSV格式
  • 有关可接受的CSV格式,请参见此处:

  • 即使在知道了列数之后,如果前面的数据不正确,您要求的结果似乎是删除空行并将数据从一行合并到另一行
  • 例如:

    ABC,BCA,AAA 
    CBA,BSH,updated 
    XYZ
    
    
    
    ,Marketing,YYY
    
    预期结果:

    ABC,BCA,AAA 
    CBA,BSH,updated 
    XYZ,Marketing,YYY
    
    您对该请求的要求是:

    • 删除空行
    • 删除空白(包括未转换的换行符)
    • 将多行数据合并为一行

    • 这会导致大量其他问题
    例如,此处的预期内容:

    A,,
    ,B,
    C,D,E
    
    或在此:

    A,B
    ,,C,D
    
    A,B,C
    ,,D,
    E,F,G
    
    A,B,
    C,D,E
    
    A,B
    C,D,E
    
    或在此:

    A,B
    ,,C,D
    
    A,B,C
    ,,D,
    E,F,G
    
    A,B,
    C,D,E
    
    A,B
    C,D,E
    
    或在此:

    A,B
    ,,C,D
    
    A,B,C
    ,,D,
    E,F,G
    
    A,B,
    C,D,E
    
    A,B
    C,D,E
    
    或在此:

    A,B
    ,,C,D
    
    A,B,C
    ,,D,
    E,F,G
    
    A,B,
    C,D,E
    
    A,B
    C,D,E
    
    还是在这里

    A,B,C
    D
    
    E,
    
    F G H
    , I
    
  • 我认为这是一个真实可靠的输入数据的唯一情况是,有更多的信息没有提供来帮助解决这个问题:关于文件格式以及列中的数据是如何构造的
  • 因此,可能的前进方向是:

    • 这个问题有很多含糊不清的地方。请 重申
    • 如果这是一个真实的问题,那么就像乔·菲利普斯所说的 修复数据生成器
    • 以不同的方式看待问题并识别 如何才能最好地识别新行线和其他畸形并逃脱 正确地使用它们并编写正确的CSV解析器,而不是尝试 在一行中获取所有内容
      • 这将有助于您:

        using System.IO;
        using System.Text;
        using System.Text.RegularExpressions;
        
        namespace CSVFixer
        {
            public class CSV
            {
                public void fixCSV(string filePath)
                {
                    string content = File.ReadAllText(filePath, Encoding.UTF8);
                    string reEx = "\\r\\n\\s+";
                    content = Regex.Replace(content, reEx,"");                       
                    File.WriteAllText(filePath, content, Encoding.UTF8);            
                }
            }
        }
        
        你只需要通过prameter

        string filePath = @"C:\Users\Ivan\Documents\csv.txt";
        

        可能您需要修改名为reEx的常规表达式,如果您的文件也是.csv,则该表达式会很好地工作。

        您称为csv的文件不是有效的csv,所以我们不要这样称呼它。问题是csv文件一开始就不正确。您应该首先修复创建CSV文件的任何问题。它是一个有效的CSV(就其本身而言),但由于正在输入换行符,因此它对您的目的无效。修复原始CSV,而不是症状。如果你不能,那么你必须检查每一行,以确保它有3个非空值,如果没有,从下一行读取它们。是的,是正确的,这不是一个有效的csv文件,我已经更正了csvfile@VenkateshVenky我想你不明白。还是不对。换行是错误的原因。您的问题与csv文件无关,它与格式有关text@VenkateshVenky解决方案是首先输出一个有效的CSV文件。如果试图“修复”一个文件并将其转换为有效的CSV文件,您将遇到很多问题