0

DCLを使用して、3行の.txtファイルがあります

Line 1 test.
Line 2 test.
Line 3 test.

私は、それぞれが期待どおりのものを正確に含んでいることを非常に試みています。現在、1行目の出力を提供するf @ extract関数を使用していますが、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
4

2 に答える 2

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." ...

もう、あなたは答えられたようにループになりたいです。クリスのアプローチをフォローアップするには、最初に値の配列を準備してから、値がある限り読み取りと比較をループすることをお勧めします。未テスト:

$ 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、ハイン。

于 2013-02-08T13:46:31.637 に答える
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
于 2013-02-08T12:29:44.693 に答える