プログラムでCSVファイルを1行ずつ読み込む方法
これは、InterSystems FAQサイトの記事です。
%SQL.Util.Proceduresクラスの CSV() プロシジャを使用することにより、実現できます。
下記が使用例のコードとなります。(test.csvというファイルが c:\temp にあるという前提)
Set rowtype="Name VARCHAR(50),UID VARCHAR(50), PHONE VARCHAR(50)"
Set filename="c:\temp\test.csv"
Set result=##class(%SQL.Statement).%ExecDirect(,"call %SQL_Util.CSV(,?,?)",.rowtype,.filename)
Set rset =result.%NextResult()
// 全件表示したい場合は、do rset.%Display()
While rset.%Next() {
Write "Name:",rset.%GetData(1)," UID:",rset.%GetData(2)," PHONE:",rset.%GetData(3),!
}
Set rset="",result=""
Quit
Set filename="c:\temp\test.csv"
Set result=##class(%SQL.Statement).%ExecDirect(,"call %SQL_Util.CSV(,?,?)",.rowtype,.filename)
Set rset =result.%NextResult()
// 全件表示したい場合は、do rset.%Display()
While rset.%Next() {
Write "Name:",rset.%GetData(1)," UID:",rset.%GetData(2)," PHONE:",rset.%GetData(3),!
}
Set rset="",result=""
Quit
上記を実行することにより結果セットとして各行およびフィールドにアクセスできます。
実行例:
USER>do ^CSV
Name UID PHONE
山田,太郎 0001 080-1111-1111
bbb 0003 090-2222-2222
ccc 0009 "050-3333-3333"
ddd 0010 0120-17-1972
4 Rows(s) Affected
Name UID PHONE
山田,太郎 0001 080-1111-1111
bbb 0003 090-2222-2222
ccc 0009 "050-3333-3333"
ddd 0010 0120-17-1972
4 Rows(s) Affected
%SQL.Util.Proceduresクラスのクラスリファレンスも併せてご確認ください。
クラスリファレンス:%SQL.Util.Procedures.CSV()