LISP文件读取循环条件和序号

LISP file reading Loop condtion and sequential number

您好,我对文件读取中的 LISP 循环条件有疑问 关于循环中的序号

我想做的是读取文件并保存数据(我简单实现了)

但是要进行这种迭代,我不知道如何完成循环。

我只想在到达文件末尾时结束循环。

并且希望在循环中使用序号

比如我想在struct s1, s2, s3, s4.....中每次循环保存数据,但是如何做呢?

简单的用C语言伪代码来表达

int i=0;
while( != EOF){

    read file in line
    save data into struct[i]
    i++
}

我的代码是这样的

(loop 
    ??(setf p(n) (make-player
        :name (read-line *file nil)
        :team (read-line *file nil)
        :game-number (read-line *file nil)
    )
    ??(setf (gethash (player-name p(n) Player_DB) p(n))

    ??(when ( = (read-line *file) " ") (return 0))  
)   

)

你有两个选择:

with read-line it returns nil,所以你可以停止那个或者指定一个值来当行是 nil 来停止它

举个例子:

  • 停止使用自定义交易品种

    (with-open-file (stream "/Users/toni/learn/lisp/cl-l/Whosebug/scripts/list-file.txt")
      (loop for line = (read-line stream nil 'foo)
            until (eq line 'foo)
            do (print line)))
    

    结果:

    "-rw-r--r--  1 toni  staff     22 18 abr 09:34 calimero_1.txt" 
    "-rw-r--r--  1 toni  staff      1 18 abr 09:34 calimero_2.txt" 
    "-rw-r--r--  1 toni  staff      0 18 abr 09:34 calimero_3.txt" 
    "-rw-r--r--  1 toni  staff    149 18 abr 09:34 charpos.lisp" 
    "-rw-r--r--  1 toni  staff    485  3 may 16:14 distributive-lists.org" 
    "-rw-r--r--  1 toni  staff   1237 18 abr 09:34 do-macro.lisp" 
    "-rw-r--r--  1 toni  staff    120 18 abr 09:34 download-all-pdfs.lisp" 
    "-rw-r--r--  1 toni  staff   3111 18 abr 09:34 emacs-rest-client" 
    "-rw-r--r--  1 toni  staff   1111 30 may 15:46 equal-function-in-common-lisp.org" 
    "-rw-r--r--  1 toni  staff     12 18 abr 09:34 filename.txt" 
    "-rw-r--r--  1 toni  staff    757 18 abr 09:34 find-all-objects-in-apackage.lisp" 
    "-rw-r--r--  1 toni  staff    355 18 abr 09:34 flatten-one-level.lisp" 
    "-rw-r--r--  1 toni  staff    813 18 abr 09:34 format-money.lisp" 
    "-rw-r--r--  1 toni  staff   2137 18 abr 09:34 hash-table-eficiency.lisp" 
    "-rw-r--r--  1 toni  staff   4230 18 abr 09:34 instrospection.lisp" 
    "-rw-r--r--  1 toni  staff    919 18 abr 09:34 mapcar_and_lambda.lisp" 
    "-rw-r--r--  1 toni  staff  11713 18 abr 09:34 mastermind.lisp" 
    "-rw-r--r--  1 toni  staff    368 18 abr 09:34 method-missing.lisp" 
    "-rw-r--r--  1 toni  staff    614 18 abr 09:34 method_missing.rb" 
    "-rw-r--r--  1 toni  staff      2 18 abr 09:34 patofante_1.txt" 
    "-rw-r--r--  1 toni  staff    314 24 may 18:29 profiling.org" 
    "-rw-r--r--  1 toni  staff   1265 18 abr 09:34 recursion-more-one-function.lisp" 
    "-rw-r--r--  1 toni  staff   1154 18 abr 09:34 size-explosing-file.lisp" 
    "-rw-r--r--  1 toni  staff    592 18 abr 09:34 sorting-coordinates.lisp" 
    "-rw-r--r--  1 toni  staff    485 18 abr 09:34 Whosebug-mongo.lisp" 
    "-rw-r--r--  1 toni  staff   8174 29 may 14:06 test-with-c-variables.org" 
    "-rw-r--r--  1 toni  staff  11121 25 abr 11:18 test.html" 
    "-rw-r--r--  1 toni  staff    690 25 abr 13:45 test.org" 
    "-rw-r--r--  1 toni  staff    236 18 abr 09:34 text.txt" 
    "-rw-r--r--  1 toni  staff  61194 18 abr 09:34 train.csv" 
    "-rw-r--r--  1 toni  staff    218 26 abr 17:17 variables-package.lisp" 
    "-rw-r--r--  1 toni  staff   1792 18 abr 09:34 vectors-vs-lisp.lisp" 
    "-rw-r--r--  1 toni  staff    190 18 abr 09:34 weird-code.lisp" 
    "-rw-r--r--  1 toni  staff    629 18 abr 09:34 write-a-list.lisp"
    
  • 停止为 nil

    (with-open-file (stream "/Users/toni/learn/lisp/cl-l/Whosebug/scripts/list-file.txt")
      (loop for line = (read-line stream nil)
            until (null line)
            do (print line)))
    

    结果:

    "-rw-r--r--  1 toni  staff     22 18 abr 09:34 calimero_1.txt" 
    "-rw-r--r--  1 toni  staff      1 18 abr 09:34 calimero_2.txt" 
    "-rw-r--r--  1 toni  staff      0 18 abr 09:34 calimero_3.txt" 
    "-rw-r--r--  1 toni  staff    149 18 abr 09:34 charpos.lisp" 
    "-rw-r--r--  1 toni  staff    485  3 may 16:14 distributive-lists.org" 
    "-rw-r--r--  1 toni  staff   1237 18 abr 09:34 do-macro.lisp" 
    "-rw-r--r--  1 toni  staff    120 18 abr 09:34 download-all-pdfs.lisp" 
    "-rw-r--r--  1 toni  staff   3111 18 abr 09:34 emacs-rest-client" 
    "-rw-r--r--  1 toni  staff   1111 30 may 15:46 equal-function-in-common-lisp.org" 
    "-rw-r--r--  1 toni  staff     12 18 abr 09:34 filename.txt" 
    "-rw-r--r--  1 toni  staff    757 18 abr 09:34 find-all-objects-in-apackage.lisp" 
    "-rw-r--r--  1 toni  staff    355 18 abr 09:34 flatten-one-level.lisp" 
    "-rw-r--r--  1 toni  staff    813 18 abr 09:34 format-money.lisp" 
    "-rw-r--r--  1 toni  staff   2137 18 abr 09:34 hash-table-eficiency.lisp" 
    "-rw-r--r--  1 toni  staff   4230 18 abr 09:34 instrospection.lisp" 
    "-rw-r--r--  1 toni  staff    919 18 abr 09:34 mapcar_and_lambda.lisp" 
    "-rw-r--r--  1 toni  staff  11713 18 abr 09:34 mastermind.lisp" 
    "-rw-r--r--  1 toni  staff    368 18 abr 09:34 method-missing.lisp" 
    "-rw-r--r--  1 toni  staff    614 18 abr 09:34 method_missing.rb" 
    "-rw-r--r--  1 toni  staff      2 18 abr 09:34 patofante_1.txt" 
    "-rw-r--r--  1 toni  staff    314 24 may 18:29 profiling.org" 
    "-rw-r--r--  1 toni  staff   1265 18 abr 09:34 recursion-more-one-function.lisp" 
    "-rw-r--r--  1 toni  staff   1154 18 abr 09:34 size-explosing-file.lisp" 
    "-rw-r--r--  1 toni  staff    592 18 abr 09:34 sorting-coordinates.lisp" 
    "-rw-r--r--  1 toni  staff    485 18 abr 09:34 Whosebug-mongo.lisp" 
    "-rw-r--r--  1 toni  staff   8174 29 may 14:06 test-with-c-variables.org" 
    "-rw-r--r--  1 toni  staff  11121 25 abr 11:18 test.html" 
    "-rw-r--r--  1 toni  staff    690 25 abr 13:45 test.org" 
    "-rw-r--r--  1 toni  staff    236 18 abr 09:34 text.txt" 
    "-rw-r--r--  1 toni  staff  61194 18 abr 09:34 train.csv" 
    "-rw-r--r--  1 toni  staff    218 26 abr 17:17 variables-package.lisp" 
    "-rw-r--r--  1 toni  staff   1792 18 abr 09:34 vectors-vs-lisp.lisp" 
    "-rw-r--r--  1 toni  staff    190 18 abr 09:34 weird-code.lisp" 
    "-rw-r--r--  1 toni  staff    629 18 abr 09:34 write-a-list.lisp"