2016-06-24 65 views
0

我有一個包含100列和1095行的文本文件。我需要編寫一個方案代碼,在每個循環中讀取我的txt文件的一行,並將原始數據中的100個數字分配給100個不同的變量,然後重複1095次。SCHEME - 如何編寫一個從文本文件讀取值並將其分配給變量的循環

這些是我在手現在:

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))))) 
    ) 
) 
) 

,我想要做的是: 我想刪除的「如果」條件(A項),並使用的流量 - 時間的價值,我想循環的計數器代碼來讀取我的txt文件的每一行。 而不是'1.0 in(set!flow-wt-1'1.0)我想引用(例如)第一行的第二列。

我的問題是: 我可以連接這兩段代碼嗎?我怎樣才能從txt文件中調用一個值?

我真的很感激任何建議和意見。

非常感謝!

+0

第一個代碼是寫在計劃,第二個是Common Lisp中。他們是2種不同的語言。 – uselpa

+0

哦! 如何在Scheme中逐行讀取文本文件?它是寫表單來打開文本文件並在線閱讀嗎? ((call-with-input-file「doorstate.txt」 (lambda(flow-wt) (let *((a(read flow-wt)) (b(read flow-wt)) 讀取flow-wt))) ) ) ) – Negar

+0

所以你想製作100,000個變量,那麼什麼? – Sylwester

回答

0

這可能是有益的(使用GNU狡詐,細節可能有所不同):

(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))))))) 
+0

謝謝Micheal Vehrs! 但是我應該如何在後面的代碼中引用每行? – Negar

+0

輸入文件的每一行都被分配給變量'line'。因此,在循環中的某個時刻,你可以調用'(我的程序行)'。 –

+0

它似乎沒有將我的輸入行分配給變量行。 我收到此錯誤: 錯誤:讓語法:綁定不是一個列表 錯誤對象:行 我不知道我的輸入文件(* .txt)是問題還是使用let是錯誤的。 我也試過讓*並設置和設置!他們沒有工作。 – Negar

相關問題