c# - 从C#中的特定行删除回车符
问题描述
我在文本文件(csv)中有这种类型的数据:
column1|column2|column3|column4|column5 (\r\n)
column1|column2|column3|column4|column5 (\r\n)
column1|column2 (\r\n)
column2 (\r\n)
column2|column3|column4|column5 (\r\n)
我想删除第 3 行和第 4 行的 \r\n :
column1|column2|column3|column4|column5 (\r\n)
column1|column2|column3|column4|column5 (\r\n)
column1|column2/column2/column2|column3|column4|column5 (\r\n)
我的想法是,如果该行没有 4 个列分隔符(“|”),则删除 CRLF,并重复该操作,直到只有正确的行。
这是我的代码:
String path = "test.csv";
// Read file
string[] readText = File.ReadAllLines(path);
// Empty the file
File.WriteAllText(path, String.Empty);
int x = 0;
int countheaders = 0;
int countlines;
using (StreamWriter writer = new StreamWriter(path))
{
foreach (string s in readText)
{
if (x == 0)
{
countheaders = s.Where(c => c == '|').Count();
x = 1;
}
countlines = 0;
countlines = s.Where(d => d == '|').Count();
if (countlines == countheaders)
{
writer.WriteLine(s);
}
else
{
string s2 = s;
s2 = s2.ToString().TrimEnd('\r', '\n');
writer.Write(s2);
}
}
}
问题是我一次性读取文件,所以第 4 行的换行符被删除,第 4 行和第 5 行在一起......
解决方案
您可能可以执行以下操作(现在无法测试,但应该可以):
IEnumerable<string> batchValuesIn(
IEnumerable<string> source,
string separator,
int size)
{
var counter = 0;
var buffer = new StringBuilder();
foreach (var line in source)
{
var values = line.Split(separator);
if (line.Length != 0)
{
foreach (var value in values)
{
buffer.Append(value);
counter++;
if (counter % size == 0)
{
yield return buffer.ToString();
buffer.Clear();
}
else
buffer.Append(separator);
}
}
}
if (buffer.Length != 0)
yield return buffer.ToString();
你会像这样使用它:
var newLines = batchValuesIn(File.ReadLines(path), "|", 5);
这个解决方案的好处是您永远不会将整个原始源加载到内存中。您只需即时构建线条。
免责声明:这对于格式错误的输入字符串可能会表现得很奇怪。
推荐阅读
- database - 在运行时在数据库上下文之间切换(ASP.NET Core、依赖注入)
- python - 抑制 matplotlib 中的科学记数法 offsetText
- c# - C# 中 DDD 枚举的 swagger 文档和 swag 客户端代码
- python - 如何通过函数传递矩阵?
- sanity - Sanity.io CMS – 编写模式类型
- android - Flutter 地点选择器应用程序在运行时崩溃(Android)
- docker - 到端口 54663(bamboo tcp 端口)的连接问题
- python - Jetson Nano UART 将损坏的字符 CH340G UART 传输到串行
- php - SQLite3 选择 * 从表排序
- javascript - 单击链接时如何关闭菜单?