删除CSV文件中的换行符

时间:2018-12-10 12:50:03

标签: c# csv

需要打开我的 CSV文件,并替换c#中第44列中的换行符。

这是CSV文件上的字符串:

9|D60||08/12/2018 19:09:19|08/12/2018 19:30:07|00:20:48|08/12/2018 22:00|A|L|M|D60 SM |D60 MA    |0|19|0|3175|0|3|00:03:25|20,98|0,017|0|0|NO|NO|-|CO|CH|CA|-|D60 - B|DP6 - F|DP6 - L|NO|-|-|DP6 - L|- - -|ND|ND|NO|-|NO|--dic

-acc |-|-|0|0|

我已经成功尝试了以下代码:

   output = System.Web.HttpContext.Current.Server.MapPath("csv/target_" + DateTime.Now.AddDays(-1).ToString("dd-MM-yyyy") + ".csv")
   string so = System.IO.File.ReadAllText(output);
   string[] arr = so.Split('-');
   for (int i = 2; i < arr.Length; i = i + 44)
      {
         arr[i] = arr[i].Replace(Environment.NewLine, " ");
       }
   string res = String.Join("", arr);
   System.IO.File.WriteAllText(output, res);

对于仅一行的新输出:

9|D60||08/12/2018 19:09:19|08/12/2018 19:30:07|00:20:48|08/12/2018 22:00|A|L|M|D60 SM |D60 MA    |0|19|0|3175|0|3|00:03:25|20,98|0,017|0|0|NO|NO|-|CO|CH|CA|-|D60 - B|DP6 - F|DP6 - L|NO|-|-|DP6 - L|- - -|ND|ND|NO|-|NO|--dic-acc |-|-|0|0|

该如何解决?

4 个答案:

答案 0 :(得分:1)

您可以在此代码后删除换行符:

string so = System.IO.File.ReadAllText(output);
// replace line break here
so = so.Replace("\r\n", "");

现在变量so将包含"9|D60||08/12/2018 19:09:19|08/12/2018 19:30:07|00:20:48|08/12/2018 22:00|A|L|M|D60 SM |D60 MA |0|19|0|3175|0|3|00:03:25|20,98|0,017|0|0|NO|NO|-|CO|CH|CA|-|D60 - B|DP6 - F|DP6 - L|NO|-|-|DP6 - L|- - -|ND|ND|NO|-|NO|--dic-acc |-|-|0|0|",没有任何换行符。

答案 1 :(得分:1)

好的,让我们尝试新的方法。

想法是逐行读取csv文件。然后,在foreach行中,通过在管道符号分隔符上将其拆分来检查有多少个字段。

如果少于49个字段(这是我在示例中计算的字段数),请在其后附加下一行。 将所有这些行(行)存储在列表中,最后将其输出为新文件。

int fieldsExpected = 49;  // I have counted 49 fields per row of the CSV file. You should check this!
string fileOut     = "<PATH-AND-FILENAME-FOR-THE-OUTPUT-CSV>";
string fileIn      = System.Web.HttpContext.Current.Server.MapPath("csv/target_" + DateTime.Now.AddDays(-1).ToString("dd-MM-yyyy") + ".csv");

// Read the file line by line.
string[] lines = System.IO.File.ReadAllLines(fileIn);
List<string> newLines = new List<string>();

// If your csv file has a header row, uncomment this next line
// newLines.Add(lines[0]);
// and have the loop start at 'i = 1'
for (int i = 0; i < lines.Length; i++) {
    string temp = lines[i];
    // Split the line on the separator character. In this case the pipe symbol "|"
    string[] fields = temp.Split('|');
    // Check if the number of fields in this line is correct.
    // It will be less if any of the fields contained a line break.
    // If this is the case, append the next line to this one.
    while (fields.Length < fieldsExpected && i < (lines.Length - 1)) {
        i++;
        temp += lines[i];
        fields = temp.Split('|');
    }
    newLines.Add(temp);
}

System.IO.File.WriteAllLines(fileOut, newLines.ToArray());

答案 2 :(得分:0)

您尝试过以下吗? (替换\ n \ r而不是仅替换Env.newline)

var output = @"C:\TEMP\target.csv";
string so = System.IO.File.ReadAllText(output);

Console.WriteLine("without replace");
Console.Write(so);

Console.WriteLine("");
Console.WriteLine("with replace");
Console.Write(so.Replace("\n", "").Replace("\r", ""));
Console.ReadLine();

答案 3 :(得分:0)

以下代码打开一个文件,并从文件中的字符串中删除换行符:

static string OpenFileWithoutCRLF()
    {
        var sr = new StreamReader("LineBreak.txt");
        return sr.ReadToEnd().Replace("\r", "").Replace("\n", ""); 
    }

.Replace(“ \ r”,“”).Replace(“ \ n”,“”)删除换行符。