Rascal MPL中不加载文件内容高效获取文件行数的方法
高效获取文件总行数的Rascal实现方式
你提到的size(readFileLines(fileLoc))确实会一次性将文件所有行加载到内存中,处理大文件时内存开销大、效率低下。以下是两种更高效的实现方式:
迭代计数法
通过逐行迭代读取文件,仅维护一个计数器,不会占用大量内存:
int countLines(loc fileLoc) { int count = 0; for (line <- readFile(fileLoc)) { count += 1; } return count; }
集合推导求和法
用Rascal的集合推导式简化写法,本质同样是迭代处理,内存开销恒定:
int countLines(loc fileLoc) = sum(1 | line <- readFile(fileLoc));
这两种方法都只在读取每一行时临时占用少量内存,完成计数后就释放,相比原方法更适合处理大文件场景。
内容的提问来源于stack exchange,提问作者Teun M.
相关产品推荐
相关产品推荐

