CSV形式とは「,」(カンマ)で区切られたデータのことです。
「a,b,c」とあったとすると「a」「b」「c」の3データが存在することとなります。
CSV形式以外にどのような形式があるかはご存知ですね?
入門講座で解説した1列が1データとなっているメモリーノート形式というものもあります。
これら以外にもあるのでしょうが私は知りません(^^;
まずはCSVからメモリーノートパッド形式に変換するところからはじめていきましょう。
コレを実行する命令がcsvnote命令です。
書式は「csvnote 結果を入れる変数,変換する文字列」となっていますが、
p2の文字列は文字列でなく変数で指定してもエラー出ず普通に変換されます。
またヘルプには「1行を取り出した文字列」となっていますが、
文字列内で改行があったとしてもこれも一つ一つ別のデータとして扱われるようです。
buf=";aaa,bbb,ccc,ddd\neee,fff,fff"; csvnote chenge,buf pos 50,50 : mes ";変換前\n\n";+buf pos 250,80 : mes ";→"; pos 370,50 : mes ";変換後\n\n";+chenge
残念ながらメモリーノートパッドからCSV形式に変換する命令は用意されていないようです。
上記の命令と似たものでcsvstr命令というものも用意されています。
この命令はp2で指定したcsv形式のデータをp1で指定した配列変数に代入します。
ヘルプにも書かれている通り、配列変数の要素数を上回った場合はエラー出ずに無視されます。
もしこれをDLL使わずにやる場合、オーバーフロー処理に対処させるなければなりません。
TIPSその他編の変数サイズを知るもので配列の要素数を求めてください。
sdim chenge,3,5 ; 5データ分確保 buf=";aaa,bbb,ccc,ddd\neee,fff,fff"; csvstr chenge,buf pos 50,50 : mes ";変換前\n\n";+buf pos 250,80 : mes ";→"; pos 370,50 : mes ";変換後\n"; repeat 5 mes chenge.cnt ; 最後のデータは無視される loop
上記を実行して気づいた方がいるかと思いますが、
この命令はcsvnoteと違い変換元変数に改行が含まれていると改行された部分の文字列は無視されます。
人に使ってもらうためのモジュールでなく、自分だけが使うものなら大きめに配列を確保しておくか、
配列の要素数までしか読み込まないのであれば標準命令だけでできます。
sdim chenge,3,5 buf=";aaa,bbb,ccc,ddd,eee"; repeat 5 getstr chenge.cnt,buf,ichi,',' ichi+=strsize loop pos 50,50 : mes ";変換前\n\n";+buf pos 250,80 : mes ";→"; pos 370,50 : mes ";変換後\n"; repeat 5 mes chenge.cnt ; 最後のデータは無視される loop
CSV関係はコレで終わります。
hspda.dllは8個しか命令がありませんので、次のソート編で終了となるでしょう。