需要打开我的 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|
该如何解决?
答案 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”,“”)删除换行符。