在 Rascal 中读取文件行作为位置
Reading the file lines as locs in Rascal
在文件IO模块中有一个从文件中读取行的函数。
list[str] fileLines = readFileLines(fileLoc);
函数整齐returns字符串。这些字符串中的每一个也可以表示为具有 fileLoc(O, L, , ) 格式的 loc。如何从文件中加载行作为 loc 资源?
简答:库函数readFiles
将源位置作为参数并读取文件的内容。如果该源位置包含位置信息,则它只会读取与该位置信息对应的文件部分。
答案有点长:
这是一个例子:
module Example
void main() {
str text = "a\nbc\ndef\n";
loc tmpLoc = |home:///tmp.txt|;
writeFile(tmpLoc, text); // write example text to file
// Read lines back and print them
println("Using readFileLines:");
for(s <- readFileLines(tmpLoc)) println(s);
// Add position information to tmpLoc that corresponds to each of the lines,
// read it back and print it:
println("Using source location with position info:");
println(readFile(tmpLoc[offset=0][length=1]));
println(readFile(tmpLoc[offset=2][length=2]));
println(readFile(tmpLoc[offset=5][length=3]));
}
预期输出为:
Using readFileLines:
a
bc
def
Using source location with position info:
a
bc
def
最后备注:
- 通常位置信息是自动生成的
通过工具(例如解析器);程序员大多 使用 这些信息,他们不必创建它(但他们可以)。
- 解析器通常会生成完整的行和列信息,这里我们只使用
offset
和length
。
在文件IO模块中有一个从文件中读取行的函数。
list[str] fileLines = readFileLines(fileLoc);
函数整齐returns字符串。这些字符串中的每一个也可以表示为具有 fileLoc(O, L,
简答:库函数readFiles
将源位置作为参数并读取文件的内容。如果该源位置包含位置信息,则它只会读取与该位置信息对应的文件部分。
答案有点长:
这是一个例子:
module Example
void main() {
str text = "a\nbc\ndef\n";
loc tmpLoc = |home:///tmp.txt|;
writeFile(tmpLoc, text); // write example text to file
// Read lines back and print them
println("Using readFileLines:");
for(s <- readFileLines(tmpLoc)) println(s);
// Add position information to tmpLoc that corresponds to each of the lines,
// read it back and print it:
println("Using source location with position info:");
println(readFile(tmpLoc[offset=0][length=1]));
println(readFile(tmpLoc[offset=2][length=2]));
println(readFile(tmpLoc[offset=5][length=3]));
}
预期输出为:
Using readFileLines:
a
bc
def
Using source location with position info:
a
bc
def
最后备注:
- 通常位置信息是自动生成的 通过工具(例如解析器);程序员大多 使用 这些信息,他们不必创建它(但他们可以)。
- 解析器通常会生成完整的行和列信息,这里我们只使用
offset
和length
。