使用DCL,我有一个包含3行的.txt文件
Line 1 test.
Line 2 test.
Line 3 test.
我正在努力确保每个都包含预期的内容。我目前正在使用f @ extract函数,它将为我提供第1行的输出,但我无法弄清楚如何验证第2行和第3行。我可以使用哪些函数来确保第2行和第3行是正确的?
$ OPEN read_test test.dat
$ READ/END_OF_FILE=ender read_test cc
$ line1 = f$extract(0,15,cc)
$ if line1.nes."Line 1 test."
$ then
$ WRITE SYS$OUTPUT "FALSE"
$ endif
$ line2 = f$extract(??,??,cc) ! f$extract not possible for multiple lines?
$ if line2.nes."Line 2 test."
$ then
$ WRITE SYS$OUTPUT "FALSE"
$ endif
答案 0 :(得分:2)
对于正好3行,您可能只想做3次读取和3次比较......
$ READ READ/END_OF_FILE=ender read_test cc
$ if f$extract(0,15,cc).nes."Line 1 test." ...
$ READ READ/END_OF_FILE=ender read_test cc
$ if f$extract(0,15,cc).nes."Line 2 test." ...
$ READ READ/END_OF_FILE=ender read_test cc
$ if f$extract(0,15,cc).nes."Line 3 test." ...
还有你希望在回复的循环中。 要跟进Chris的方法,您可能需要先准备一组值,然后在有值的情况下循环读取和比较。 未测试的:
$ line_1 = "Line 1 test."
$ line_2 = "Line 2 test."
$ line_3 = "Line 3 test."
$ line_num = 1
$ReadNext:
$ READ/END_OF_FILE=ender read_test cc
$ if line_'line_num'.nes.cc then WRITE SYS$OUTPUT "Line ", line_num, " FALSE"
$ line_num = line_num + 1
$ if f$type(line_'line_num').NES."" then GOTO ReadNext
$ WRITE SYS$OUTPUT "All provided lines checked out TRUE"
$ GOTO end
$Ender:
$ WRITE SYS$OUTPUT "Ran out of lines too soon. FALSE"
$end:
$ close Read_Test
HTH, 海因。
答案 1 :(得分:1)
尝试此变体(未经测试,因此可能需要一些调试)。使用符号替换来跟踪您所在的行。
$ OPEN read_test test.dat
$ line_num = 1
$ ReadNext:
$ READ/END_OF_FILE=ender read_test cc
$ line'line_num' = f$extract(0,15,cc)
$ if line'line_num'.nes."Line ''line_num' test."
$ then
$ WRITE SYS$OUTPUT "FALSE"
$ endif
$ goto ReadNext
$ !
$ Ender:
$ close Read_Test
$ write sys$output "line1: "+line1
$ write sys$output "line2: "+line2
$ write sys$output "line3: "+line3
$ exit