【发布时间】:2012-11-24 18:10:46
【问题描述】:
我有许多大型 csv 文件(每个 1-10 gb)要导入数据库。对于每个文件,我需要替换第一行,以便将标题格式化为列名。我目前的解决方案是:
using (var reader = new StreamReader(file))
{
using (var writer = new StreamWriter(fixed))
{
var line = reader.ReadLine();
var fixedLine = parseHeaders(line);
writer.WriteLine(fixedLine);
while ((line = reader.ReadLine()) != null)
writer.WriteLine(line);
}
}
什么是只替换第 1 行而不遍历这些大文件的每一行的更快方法?
【问题讨论】:
-
我可能只是从命令行执行此操作。
copy headerfile+csvfile newfile您可以制作一个包含所有需要更改的文件的批处理文件。 (哦,除了看起来你事先不知道标题是什么。如果不知道,这将无济于事。) -
如果您使用的工具碰巧通过
stdin接受输入:而不是文件,您可以创建一个由标题和正文组成的流,并在您输入时将其输入您的导入工具需要它。例如cat headerfile bigfile | import_tool -
这对fixedLine和第一行的Lengths非常敏感。固定线可以更大吗? line2 可以移动到文件末尾吗?