方案 - 如何编写一个从文本文件中读取值并将其分配给变量的循环

时间:2016-06-24 15:33:01

标签: scheme

我有一个包含100列和1095行的文本文件。我需要编写一个方案代码来读取每个循环中的一行txt文件,并将原始的100个数字中的每一个分配给100个不同的变量,这将重复1095次。

这些是我现在掌握的东西:

A。 这是我用于为变量赋值的代码,我通过ANSYS-FLUENT(计算流体动力学工具)读取它。

(define flow-wt-1 0.0)
 (define run
 ( lambda(flow-time)
(if (< flow-time 181)
    (set! flow-wt-1 '1.0)
    (set! flow-wt-1 '0.0))
 (ti-menu-load-string (format #f "def bc outflow 6 ~a" flow-wt-1))
  )
)

B。 我还找到了以下代码来读取txt文件。

(defun load_data (arr column filename)
(setf lnt (first (array-dimensions arr)))
 (with-open-file (str (format nil "~A.txt" filename) :direction :input)
   (loop :for i :from 0 :to (1- lnt) :do
       (setf (aref arr i 0) (read-from-string (nth (1- column) (split-sequence:SPLIT-SEQUENCE #\Space (read-line str)))))
    )
  )
 )

现在,我想做的是:  我想删除“if”条件(在A下)并使用flow-time的值作为我想要编码的循环的计数器来读取我的txt文件的每一行。 而不是'1.0 in(set!flow-wt-1'1.0)我想引用(例如)第一行的第二列。

我的问题是:  我可以将这两段代码连接在一起吗?如何从txt文件中调用值?

我真的很感激任何建议和意见。

非常感谢!

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助(使用GNU guile,细节可能会有所不同):

(with-input-from-file
    "your/file.dat"
  (lambda ()
    (let loop ((line (read-line)))
      (if (not (eof-object? line))
          (let ((fields (string-split line #\space)))
            (display fields) ;; or whatever else you need to do
            (loop (read-line)))))))