2017-11-17 11 views
1

CSVファイルからデータをインポートし、それをプログラムで使用できるように行単位で変換するにはどうすればよいですか?私はそれを文字列にしたいが、それでもまだリストかリストのリストであるというエラーメッセージが出てくる。NetlogoでCSVを1行ずつインポートするにはどうすればよいですか?

私は、Netlogo User Manualに記載されている例をコピーして、ティックごとにファイルを1行読み込んでいます(下記参照)。私は簡単な例を作りました。

extensions [CSV] 
globals [date] 


to setup 
    clear-all 
    file-close-all 
    file-open "S&PDate.csv" 
    set date current-date 
    reset-ticks 
end 

to go 
    if file-at-end? [stop] 
    set date current-date 
    tick 
end 

to-report current-date 
    file-open "S&PDate.csv" 
    let result csv:from-row file-read-line 
    while [ not file-at-end? ] [ 
    let row csv:from-row file-read-line 
    set result (map result row) 
    ] 
    file-close 
    report result 
end 

From NetLogo User Manual

+2

なぜ「行単位」ですか?それは必須条件ですか?それが巨大なファイルでない限り、 'csv:from-file'を使ってファイル全体を一読してください。その後、いつでも結果の項目を取得できます。 (別に 'map'の使い方が間違っています) – Alan

+0

なぜ結果を文字列にしたいのですか? CSVは、リストのリストを格納するための形式です。ファイルの生の文字列の内容だけが必要な場合は、NetLogoに組み込まれた 'file-'プリミティブを使用することができます。 –

答えて

2

私の考えは、ダニの数(すなわち、ライン・バイ・ライン)のリストから値を抽出し、その後、すべてを一度にリストとしてCSVデータをインポートすることです。

extensions [csv] 
globals [data variable] 

to setup 
file-close-all 
file-open "S&PDate.csv" 
;; read the data all at once by using csv:from-file 
set data csv:from-file "S&PDate.csv" 
reset-ticks 
end 

to go 
if file-at-end? [stop] 
;;extract value from the list, using item 0 to remove the list, and just keep the value 
set variable item 0 item ticks data 
tick 
if ticks = length data [stop] 
show variable 
end 

希望します。それ以上の説明が必要な場合はお知らせください。

+0

このコードスニペットにいくつかコメントを追加できますか? @ゆったり? –

+1

こんにちはスチュアート。申し訳ありませんが、私はいくつかのコメントと説明を追加しました。今はっきりしていることを願っています。 –

+0

それは動作します!ゆう(と会社)ありがとう! –

関連する問題