0

我正在用 C# 开发一个文件解析器,这样我就有一个包含很多行的文件。我想将其写入数据库。

我创建了一个循环,在其中读取文件并发出插入。

但是,我想做的是读取 100 行然后提交所有 100 行,然后读取下 100 行并提交它们,依此类推。

我的问题(有点概念性)是如何找出最后一组行,因为它可能小于 100。

例如,如果我的文件有 550 行,我可以读取 5 块 100 并在行计数器上使用模运算符提交它们,但最后一批 50 会发生什么?

这方面的任何想法都将受到高度赞赏。

谢谢。

4

3 回答 3

0

在这里顶一下我的想法:

第一个选项,快速计算'\n',从而获得行数。然后,以 2 的倍数读取块,使得结果非常接近行数,例如如果存在 501 行,则读取 250 和 250 的块。然后只剩下 1 行。首次运行代码时,请检查奇数或偶数。如果奇数,记得提交最后一行,否则如果行数是偶数,则不需要对最后一行进行补偿。希望这可以帮助。

PS:将数字除以2的倍数后,如果很大,可以进一步除以2(分而治之!)

于 2013-04-11T18:43:01.210 回答
0

大概是这样的吧?以下是伪代码:

int rowCount = 0;
while more records to read
{
   // Get record
   // Parse record
   // Do something with results

   if(++rowCount % 100 == 0)
   {
      // Commit
      rowCount = 0;
   }
}
// If you have 0 records, you just did a commit (unless you had zero records to read,
// but I assume you can code your way around that!)  So you only need a final commit 
// if you had more than 0 records still uncommitted. 

if(rowCount > 0) 
{
   // Commit remaining records
}
于 2013-04-11T22:27:10.567 回答
0

如果您的 read 函数在没有其他内容可读取时返回 false。那么你可以试试这个。

int i = 1;
while (read())
{
     if (i % 100 == 0)
     {
        for int (j = 0; j < 100; j++)
        { 
            write();
        }
     }
     i++;
}
for (int j = 0; j < i % 100; j++)
{
     write();
}
于 2013-04-11T20:29:49.440 回答