Условие цикла чтения файла LISP и порядковый номер

Здравствуйте, у меня есть вопрос об условии LISP LOOP при чтении файла и о порядковом номере в цикле.

Что я хочу сделать, это прочитать файл и сохранить данные (я реализовал это просто)

Но чтобы сделать эту итерацию, я не знаю, как закончить цикл.

Я просто хочу закончить цикл, когда будет достигнут конец файла.

И я надеюсь использовать порядковый номер в цикле.

Например, я хочу сохранять данные в структурах 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))  
)   

)


person 오충현    schedule 06.06.2017    source источник


Ответы (1)


у вас есть два варианта:

с read-line возвращает ноль, так что вы можете остановиться на этом или указать значение, когда строка равна нулю, чтобы остановить ее

Например:

  • остановка с пользовательским символом

    (with-open-file (stream "/Users/toni/learn/lisp/cl-l/stackoverflow/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 stackoverflow-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"
    
  • остановиться на нуле

    (with-open-file (stream "/Users/toni/learn/lisp/cl-l/stackoverflow/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 stackoverflow-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" 
    
person anquegi    schedule 06.06.2017