读取文件行和查询结果的编程函数


programming functions to read file lines and query results

这个问题可能会得到其中一个分数,但我仍然想问并希望得到一个答案,这对知识渊博的程序员来说可能非常简单。

所以在C++中,有一个getline()函数,它只读取一行接一行的while循环。在PHP中,数据库查询结果可以通过mysql_fetch_row等获取。可能还有更多的例子(如果你知道的话,在你的答案中列出它们肯定会得到我的支持)。所以我想知道这些函数是如何进入下一行或结果的?有某种内置迭代器,函数可以跟踪和更新吗?

我们非常感谢描述性的答案。

  1. 对于文件读取,有一个EOF(文件结束)标记或is_eof(pointer)函数来检测文件结束(它们通常链接到操作系统内核内部)。文件行由系统EOL分隔符'n'r'n'r'n标记。

  2. 对于数据库结果集读取,有一个由数据库开发人员提供的通用API,它允许使用几乎相同的功能,即"是结果集的结尾"或"转到行"。例如,在php(+MySQLi)中,有一个mysqli_data_seek()函数或方法。

因此,读取的常见循环可能看起来像以下伪代码:

handle = getResourceHandle(args); // create a pointer to resource
while(not isEOF(handle)){ // while end of resource is not reached
    row = getRow(handle); // read current row
    // some processing
    nextRow(handle); // move system row pointer to the next row
}
closeResourceHandle(handle); // free pointer to resource

前面的例子显示了函数方法,但是对于OOP,封装了很多细节:

Resource r = new Resource(args); // getResourceHandle() + other operations
while(not r->isEnd()){ // while not isEOF(handle) 
    row = r->getRowAndMoveToNext(); // getRow(handle) + nextRow(handle);
    // some processing
}
destroy r; // closeResourceHandle(handle) + other operations

因此,最后,对于"低级别编程"的函数方法,您"必须"跟踪行/行,并自己检查资源是否为非空。在OOP中,大多数常见的操作已经由提供者为您完成。