使用c#从文本文件中删除备用行
本文关键字:删除 备用 文件 文本 使用 | 更新日期: 2023-09-27 18:03:57
我正在做一个项目,我必须从。txt文件中读取数据,然后使用查询将每一行插入表中。
现在,例如文本文件的内容将是
11111年1111 x 22222年2222 x 33333年3333 x等等
现在你可以看到,交替行几乎是重复的,所以我想删除交替行,以便可用的数据变成
11111年22222年33333年,然后处理剩下的代码。
我有什么办法可以做到吗?
到目前为止,我一直在使用数组列表来获取这个using (StreamReader sr = new StreamReader(Server.MapPath("03122013114450.txt"), true))
{
string txtValues = sr.ReadToEnd();
string[] txtValuesArray1 = Regex.Split(txtValues, "'r'n");
ArrayList array = new ArrayList();
foreach (string value in txtValuesArray1)
{
array.Add(value);
}
for (int i = 0; i < array.Count; i++)
{
if (array.Count % 2 != 0)
array.RemoveAt(i + 2);
else
array.RemoveAt(i + 1);
}
}
基本思想是删除替代行,无论是从数组列表的索引还是从文本文件
刚刚用LINQ试过了
string[] lines = File.ReadAllLines("your_file_name");
var result = lines.Where((s, idx) => idx % 2 == 0);
当然,如果你的文件非常大,那么你需要逐行工作,在阅读
快速优化,
static IEnumerable<string> OddLines(string path)
{
var flipper = true;
foreach (var line in File.ReadLines(path))
{
if (flipper) yield return line;
flipper = !flipper;
}
}
你可以这样使用,
var oddlines = OddLines(Server.MapPath("03122013114450.txt"));
或者更简单的
var oddlines = File.ReadLines(Server.MapPath("03122013114450.txt"))
.Where((l, i) => i % 2 == 0);
另一个优化:
using (var sr = new StreamReader(Server.MapPath("03122013114450.txt"), true))
{
var line = sr.ReadLine();
while (line != null)
{
// Do stuff here. Add to the list, maybe?
if (sr.ReadLine()!= null) //read the next line and ignore it.
line = sr.ReadLine();
}
}
如果您想忽略奇数行而不是偶数行,请将line = sr.ReadLine();
从while-loop的末尾移动到开始
您通常想要做的是每次读取文件的一行,而不是将磁盘上的所有数据缓冲到内存中。想象一下,如果它是一个2GB的文本文件(这不是一个不寻常的问题)-在您开始处理它之前,您正在等待首先加载2GB的文件。
ulong count = 0;
using (StreamReader sr = new StreamReader(Server.MapPath("03122013114450.txt"), true))
{
while (!sr.EndOfStream) {
count++;
String line = sr.ReadLine();
if ((count % 2) == 0) {
// do additional processing here
// like insert row into database
}
}
}
(我的c#是生锈的)