csvファイルの読み込みについて
皆様、いつもお世話になっております。
本年もよろしくお願いいたします。
質問事項
・csvファイルを読み込み、フォーム上に表示する
・フォーム上で編集して異なるcsvファイルとして出力
上記にはどのような操作・方法があるのでしょうか、調べてみましたがこれだという資料が見つからなかったためこちらで質問させていただいた次第です。
-
yutoさん、
基本的な流れとして、まず次の手順を試してみてください。
1. APGを利用して「出力」、「入力」のプログラムを作成してみる。
2. それらの作りを真似して、手作業で同じプログラムを作ってみる。
3. 区切り文字をカンマ区切りとかに変えて試してみる。あと、最近ではCSV関連の関数も増えていたり、データ出力ウィザードというものが登場したりして、昔に比べて何かと便利になってきています。
Magicのヘルプで次のような用語で検索されるといいですよ。
「CSV」、「データ入力」、「データ出力」、「データ出力ウィザード」
何か作ってみて、うまく動かないとかありましたら遠慮なく質問してください。
-
tandaさん
いつもありがとうございます。
ヘルプ等を参考にしてデータ出力ウィザードを利用することでxmlファイルの出力はできるようになりました。
-
yutoさん、
ご質問にあったcsvのほうはどうですか?
-
yutoさん、
csvファイルの読み込みのほうは、APGプログラムの区切り文字を「固定長」から「単区切」に変えて、区切り文字を「,」にするだけでうまくいくと思いますよ。
-
tandaさん、
承知しました。その方法で試してみます。
いつもありがとうございます。
-
tnadaさん、
APGプログラムの区切り文字を単区切に変更したところ
csvファイルの読み込みができました。
ありがとうございました。
読み込んだcsvファイルに追加で情報を記載
名前 ID
田中 1
のcsvを読み込み
csvファイルに
名前,ID
田中,1
山田,2
を加筆して読み込むと

このようなエラーが出てしまいます。
1度読み込んだcsvファイルに加筆して再度読み込むことはできないのでしょうか
-
こんにちはPuです。
読み込む前にimport先のTBLをdropしましょう
でわ~でわ~ -
Puさん、
コメントありがとうございます。
すみませんが、具体的にどういうことなのかもう少し詳しくお伺いしたいです。
-
yutoさん、こんばんは
タスク特性「初期モード」を「登録」で読込されてませんか。
その場合、CSVから読込した内容をデータテーブルに「登録」しますので、
同じコード等のまま再読込すると、テーブル定義したインデックスの重複項目でエラーになります。
一度タスク特性「初期モード」を「修正」にして試してみてください。
-
yutoさん、こんばんは
import先のTBLをmemoryにして(仮にmem_work)
1)import前にdbdel関数でmem_workをDROPする
2)importプログラムでcsv==>mem_work
3)imem_workを表形式で表示して修正
4)mem_work==>実TBLへ更新処理(エラーチェック等も行う)
上記は自分のやり方です
でわ~でわ~ -
yutoさん、
そのエラーは「1番の田中さんの登録が重複しています」というエラーになります。2番の山田さんは正常に追加登録されているはずです。
で、そのエラーを回避する方法ですが、次の2通りがあります。
1. そのバッチを起動する前に、あらかじめ既存のテーブルを空にしておく。
2. バッチで読み込むデータは、追加分のみのレコードを含んだcsvにしておく。1の方法はPuさんがアドバイスしている方法で、dbdel() 関数を使って事前にテーブルを空にする方法です。
2の方法は、あらかじめExcel等で追加分だけのデータを用意しておくという方法です。なお、dbdel() 関数を用いる場合は、同じタスクの中では削除されませんので、別バッチを用意して、そこで削除したあとに登録バッチを起動してやる必要があります。この処理は、登録バッチのサブタスクでやってもよいですし、あるいは別プログラムからプログラムコールで処理してもいいです。
慣れないうちは、2番の方法である「あらかじめExcel等で追加分だけのデータを用意しておく」という方法が分かりやすいと思いますよ。
-
皆様コメントありがとうございます。
tandaさん、
そのエラーは「1番の田中さんの登録が重複しています」というエラーになります。2番の山田さんは正常に追加登録されているはずです。
とのことですが、確認してみたところ2番目の情報の追加登録はできていませんでした。
2. バッチで読み込むデータは、追加分のみのレコードを含んだcsvにしておく。に関して
読み込むcsvファイルから1,2行目を削除してバッチの実行を行いましたが同様にインデックスの重複のエラーが表示されてしまいました。
-
yutoさん、
重複レコードが存在しないとすれば、「インデックス重複」のエラーが出るということはありませんので、どこかに重複レコードが存在しているということになります。
おそらく、どこかにゴミのデータが残っているのだと思います。データリポジトリで全件のレコードを明示的に削除してから、もう一度試してみるといいですよ。
「ID」と「名前」でやっておられますので、インデックスは「ID」ですよね?
-
こんにちはPuです。
そんな事はないと思いますが、念のため
IDが空白のレコードが存在してたりして(まさか)
でわ~でわ~ -
tandaさん、
インデックスはIDで行っています。
ID(品目コード)の入力のみで試してみました。
・入力に用いるcsvファイルに 1 だけを入力してAPGを実行
・1がDBに入力されていることを確認
・入力に用いるcsvファイルの 1を消して 2 だけを入力してAPGの実行
・インデックス重複のエラーが発生
データリポジトリで全件のレコードを削除とはどのように行いますか。
下の写真のようにプログラムの中でレコードを削除するとcsvの読み込みができますが、内容を変更したものを読み込ませようとするとインデックス重複エラーとなってしまいます。
何度も申し訳ありません。。。

-
yutoさん、こんにちは。
csvファイルをテキストで開いて見てください。
余分な行はありませんか?
あと、ほかにキーはないですか?
-
kagoさん、こんにちは
csvファイルをテキストで開いて確認してみましたが余分な行・スペースは見つかりませんでした。
キーについては確認はどちらでできますでしょうか。
-
yutoさん、
Kagoさんのアドバイスは的確なアドバイスだと思います。
「キー」というのは「インデックス」のことを意味しますので、データリポジトリの「インデックス」欄で確認できますよ。
あと、データリポジトリでレコードを削除するには、APG(Ctrl+G)でテーブルを開いて、Ctrl+Mで「修正」モードに切り替え、F3の削除キーで個々のレコードを削除することができます。
込み入ったテーブルでテストするより、最初のご質問にありましたように「ID」と「名前」だけのような簡単なテーブルで、まずは基本的な動きを検証されたほうがいいと思いますよ。
-
tandaさん、
時間が空いてしまいましたが、簡単なテーブルで作成した場合
重複のエラーがでるものの新しい情報は追加されていました。
どこで間違っていたのかはわかりませんでしたが、簡単なものからテストを行う習慣をつけようと思います。
みなさま、ありがとうございました。
今後ともよろしくお願いいたします。
-
yutoさん、
うまくいって良かったですね。
ちなみに、重複エラーが出るのはインデックス項目の値がだぶっているものがあるからです。その点に注意して操作すれば、重複エラーも出なくなりますよ。
サインインしてコメントを残してください。
コメント
20件のコメント