Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
35 / 114 ツリー <前へ | 次へ>

〔730〕CSV 形式の農薬登録情報ダウンロードサービスを開始しました Hidemi Oya (07/11/17 22:46)

〔740〕Re:ACFinder 071119test版 [名前なし] (07/11/20 9:53)
〔742〕Re:ACFinder 071119test版 Hidemi Oya (07/11/21 1:05)
〔749〕Re:ACFinder 071119test版 kabe (07/11/21 23:39)

〔740〕Re:ACFinder 071119test版
 [名前なし] WEB  (07/11/20 9:53)

引用なし
   >Hidemi Oyaさん

kabe です。

> CSV の場合、csv->acis.db変換が 11.4 秒、データベース更新が 20.8 秒でした。薬検のデータを使うと、xls->acis.db 変換が 15.2秒、データベース更新が 24.9 秒なので、トータルで8秒弱短縮できたことになります。もうちょっと速いかと思ったんですが、データベースの書込にそれなりに時間がかかってるってことですかね。
CSVファイルを読みながら、1行をそのままINSERT INTO すると、おそらくかなり早いのではないかと思います。
登録基本部の方は屋号を取りながら通称名を加える作業をしていますが、これはデータ数も少ないのでそれほど時間はかからない思います。
適用部の方はデータ数が多いので、何らかの変換作業を加えると、その分時間がかかります。
現在のところ次のような処理をしています。
テキストモードで開いて readln
1行を TStringList.DelimitedText にセット(QuoteChar を ' にするため)
(CommaTextだと 2,4PA などが別のカラムになってしまう)
テーブルに入れる時にカラム数を25に揃える必要があるので、不足している行(有効成分2〜5の有無により異なる)
は、カラム数を増やす。(StringListに空文字を Add)
テーブルに INSERT INTO
その際、再度各カラムを ' でくくる処理をする。
(その他、m2 の u変換なども行う)
という感じです。

括弧記号の半角変換のチェックが不要になったので、あとはカラム数が25になるようにカンマを付加していただければ、そのまま読み込むことも可能です。
ただ現状では、適用部の実テーブルである m_tekiyo には登録番号をキーにして登録基本部から参照できる農薬名などのカラムは入れていません。別にこれはあってもかまわないのですが、その分データベースのファイルサイズは増えます。

〔742〕Re:ACFinder 071119test版
 Hidemi Oya WEB  (07/11/21 1:05)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>テーブルに入れる時にカラム数を25に揃える必要があるので、不足している行(有効成分2〜5の有無により異なる)
 プログラムは、フィールド数固定になるように作ってあるつもりだったんですが…。実は、xls を xdoc2txt で TAB 区切りテキストに変換し、それを perl で CSV に変換しています。で、xdoc2txt が余分な行末 TAB を削除してしまうのをすっかり忘れてました(^_^;)。

>括弧記号の半角変換のチェックが不要になったので、あとはカラム数が25になるようにカンマを付加していただければ、そのまま読み込むことも可能です。
 CSV データをフィールド数固定にしました。
 なお、「u」は「m2」ではなく、「m^2」になっているので、ご注意ください。Delphi で1行読み込んだら、下記の方法で変換すれば、それほど時間はかからないと思います。
line := AnsiReplaceStr(line, 'm^2', 'u');

>ただ現状では、適用部の実テーブルである m_tekiyo には登録番号をキーにして登録基本部から参照できる農薬名などのカラムは入れていません。別にこれはあってもかまわないのですが、その分データベースのファイルサイズは増えます。
 INSERT INTO のフィールドとしては指定できるけど、実際には保存されないダミーフィールドがあれば話は簡単なんですけどね。
 とりあえずは、最初に CSV ファイルをそのまま INSERT INTO したテンポラリテーブルを作成し、そこから必要フィールドだけにした実テーブルにするって手もありますね。Delphi 側で処理するのとどっちが速いだろう?

〔749〕Re:ACFinder 071119test版
 kabe WEB  (07/11/21 23:39)

引用なし
   >Hidemi Oyaさん

kabe です。

> とりあえずは、最初に CSV ファイルをそのまま INSERT INTO したテンポラリテーブルを作成し、そこから必要フィールドだけにした実テーブルにするって手もありますね。Delphi 側で処理するのとどっちが速いだろう?
勘違いしてました。
適用部は最初にテンポラリテーブルに読み込んだ後で、作物、病害虫IDを付加した実テーブルを作成します。
なので、CSVをそのまま読み込むのに何の問題もありません。

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
35 / 114 ツリー <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.