2015-12-08 30 views
5

मेरे पास एक फ़ाइल है जिसमें प्रत्येक पंक्ति में द्वि-आयामी सरणी है। मुझे फ़ाइल को वास्तविक सरणी में पार्स करने का तरीका ढूंढने में परेशानी हो रही है और उन्हें एक सूची में डाल दिया गया है।LISP - एक सरणी को एक सरणी के प्रतिनिधित्व के साथ एक स्ट्रिंग को परिवर्तित करना

फ़ाइल इस तरह दिखता है, सरणियों अलग लाइनों में कर रहे हैं, भले ही यह प्रतीत नहीं होता: file with matrixes

उत्तर

9

तुम बस with-open-file का उपयोग कर पढ़ने के लिए फ़ाइल को खोलने और फिर आप के रूप में कार्य read का उपयोग के रूप में अक्सर पसंद करेंगे या जैसे ही सरणी होती है। प्रत्येक read एक सरणी देता है। loop का उपयोग करके आप उन्हें एक सूची में एकत्र कर सकते हैं।

मूल रूप से कुछ इस तरह:

(with-open-file (s filename) 
    (let ((*read-eval* nil)) 
    (loop with eof = '#:eof 
      for object = (read s nil eof) 
      until (eq object eof) 
      collect object))) 

यह भी ध्यान रखें कि यह कोई फर्क नहीं पड़ता कि क्या प्रत्येक सरणी अपनी पंक्ति में है। यदि वे एक पंक्ति पर हैं तो यह अभी भी काम करेगा। अभिव्यक्तियों के बीच न्यूलाइन लिस्प पाठक के लिए अभिव्यक्तियों के बीच व्हाइटस्पेस है।

+1

धन्यवाद! इतना आसान है कि मैंने सोचा :) –

+3

@LidiaFreitas: ऐसा इसलिए है क्योंकि सरणी सामान्य लिस्प वाक्यविन्यास में पहले ही मुद्रित है। :-) –

+1

... और अविश्वसनीय स्रोतों से 'पढ़ने' से पहले हमेशा '* read-eval *' to 'nil' को बांधें। – Svante

संबंधित मुद्दे