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

研究会

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

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

〔731〕CSV データを利用した ACFinder 開発のお願い Hidemi Oya (07/11/17 23:01)
〔732〕Re:CSV データを利用した ACFinder 開発のお... kabe (07/11/18 20:51)
〔733〕Re:CSV データを利用した ACFinder 開発のお... Hidemi Oya (07/11/18 22:36)
〔734〕CSV データメモ kabe (07/11/19 13:26)
〔736〕Re:CSV データメモ Hidemi Oya (07/11/19 23:00)
〔738〕Re:CSV データメモ Hidemi Oya (07/11/20 3:29)
〔735〕ACFinder 071119test版 kabe (07/11/19 21:59)
〔737〕Re:ACFinder 071119test版 Hidemi Oya (07/11/19 23:59)
〔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)
〔745〕Re:ACFinder 071119test版 Hidemi Oya (07/11/21 10:29)
〔739〕Re:ACFinder 071119test版 Hidemi Oya (07/11/20 3:40)
〔741〕ACFinder 071120test版 kabe (07/11/20 23:08)
〔743〕Re:ACFinder 071120test版 kabe (07/11/21 9:13)
〔744〕Re:ACFinder 071120test版 Hidemi Oya (07/11/21 10:19)
〔746〕CSV データダウンロード URL のユーザ指定 Hidemi Oya (07/11/21 12:23)
〔747〕アイディア2つ Hidemi Oya (07/11/21 21:21)
〔748〕ACFinder 071121test版 kabe (07/11/21 23:35)
〔750〕Re:ACFinder 071121test版 Hidemi Oya (07/11/22 0:44)
〔752〕Re:ACFinder 071121test版 kabe (07/11/22 20:35)
〔754〕Re:ACFinder 071121test版 Hidemi Oya (07/11/23 1:11)
〔756〕Re:ACFinder 071121test版 kabe (07/11/23 9:10)
〔759〕Re:ACFinder 071121test版 Hidemi Oya (07/11/23 11:22)
〔751〕ACFinder 071121test版バグ kabe (07/11/22 13:18)
〔753〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/22 23:23)
〔755〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/23 9:01)
〔757〕Re:ACFinder 071121test版バグ kabe (07/11/23 9:21)
〔758〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/23 10:47)
〔761〕Re:ACFinder 071121test版バグ kabe (07/11/23 21:08)
〔766〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/24 12:37)
〔760〕ACFinder 071123test版 kabe (07/11/23 21:00)
〔762〕Re:ACFinder 071123test版 Hidemi Oya (07/11/23 21:42)
〔763〕CSV データを若干仕様変更 Hidemi Oya (07/11/23 22:10)
〔765〕SQL タブの引用符をシングルクォートに Hidemi Oya (07/11/23 22:49)

〔731〕CSV データを利用した ACFinder 開発のお願...
 Hidemi Oya WEB  (07/11/17 23:01)

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

 [#730] の CSV データは、ファイルサイズが薬検 Excel データの 1/4 程度なので、ISDN のようなナローバンドでもなんとか実用になります。また、Excel データの読み込みが不要になるので、データベース更新時間も短縮できるはずです。
 ということで、ACFinder がこちらのデータも使えるようにしていただけると、大変ありがたいです。

 なお、ZIP ファイルは、統合アーカイバプロジェクトの 7-zip32.dll でも解凍可能です。7-zip32.dll は LGPL ライセンスで、DLL 単体を ACFinder に同梱することが可能です(ドキュメントに 7-zip32.dll を使用していることと、ソースの入手先を記述しておく必要はありますが)。
 現在の ACFinder は、unlha32.dll を別途導入しなければならない点が敷居を高くしています。CSV データ対応版では、ぜひ 7-zip32.dll を同梱してください。

 さらに、フリーのインストーラの「EXEpress CX for free software Licensed Edition」か「簡単インストーラ」あたりを使えば、ユーザがもっと ACFinder を利用しやすくなります。ぜひ、インストーラパッケージの提供もご検討ください。

〔732〕Re:CSV データを利用した ACFinder 開発の...
 kabe WEB  (07/11/18 20:51)

引用なし
   >Hidemi Oyaさん

kabe です。
修正版の作成に取りかかり始めたのですが、ZIP の解凍ができません。
toroku.zip が 正しい zip 書庫かどうか確認お願いします。

〔733〕Re:CSV データを利用した ACFinder 開発の...
 Hidemi Oya WEB  (07/11/18 22:36)

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

>toroku.zip が 正しい zip 書庫かどうか確認お願いします。
 自宅サーバからレンタルサーバに自動転送する際に、ascii モードで転送しちゃってたようです。
 現在は修正してありますが、ブラウザのキャッシュを消去しないと新しいデータがダウンロードできない場合があるかもしれません。新ファイルのサイズは、1,277,019 バイトなので、ファイルサイズが異なる場合は、ブラウザのキャッシュをクリアしてください。

〔734〕CSV データメモ
 kabe WEB  (07/11/19 13:26)

引用なし
   >Hidemi Oyaさん

kabe です。

tekiyo.csv に部分的に全角の()[]が残っています。
というか元のExcelデータがそうなってるようです。
tekiyo.csvを作成する際に括弧記号の半角変換もしていただけるとありがたいです。

作物名
かき(西条)[熟柿栽培]
かき(太秋)
ぶどう(巨峰系4倍体品種)[巨峰を除く]
ぶどう(2倍体米国系品種)[デラウエアを除く]
病害虫名
一年生イネ科雑草(スズメノカタビラを除く)

作物と病害虫IDを摘要テーブルに作成する際に、検索システムから取得した名称と同じでないとIDが空になります。摘要データ側と検索システム側の両方を変換処理するとその分時間がかかるので、検索システム側の名称をtekiyo.csv に合わせるように変換しようと思います。上記のような例外があると結局、摘要側もチェックしないといけないので。

〔735〕ACFinder 071119test版
 kabe WEB  (07/11/19 21:59)

引用なし
   kabe です。

CSVデータ対応版を作成しました。
http://acfinder.kabe.info/acfinder071119test.zip

けっこう手直ししているので、動作確認お願いします。

CSVデータを利用するには、設定>基本設定>接続タブ から
ダウンロードサイトを携帯農薬検索実験室に設定してください。
デフォルトは薬検からダウンロードします。

データベースに作成した ACFinder のバージョンを記録し、ACFinder が更新された場合、データベース更新の必要があればダイアログを出すようにしました。

CSVデータから ACFinder のデータベース作成時の変換は
登録基本部は変換時に農薬通称名を作成する以外はそのまま取り込みます。
登録適用部は作物名、病害虫名の記号を半角変換、使用方法の m2 を u に変換しています。

〔736〕Re:CSV データメモ
 Hidemi Oya WEB  (07/11/19 23:00)

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

>tekiyo.csvを作成する際に括弧記号の半角変換もしていただけるとありがたいです。
 あるかどうかは分かりませんが、kihon.csv, tekiyo.csv ともに、全角英数字は全て半角に変換するようにしました。今まで 130 秒強で変換できてたんですが、一気に 230 秒弱かかるようになりました(^_^;)。
 ついでに、いろいろ試している間に tekiyo.csv 先頭のフィールド名レコードがおかしくなっていたので、修正しました。

〔737〕Re:ACFinder 071119test版
 Hidemi Oya WEB  (07/11/19 23:59)

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

>CSVデータ対応版を作成しました。
 素早い対応、誠にありがとうございます。

 CSV の場合、csv->acis.db変換が 11.4 秒、データベース更新が 20.8 秒でした。薬検のデータを使うと、xls->acis.db 変換が 15.2秒、データベース更新が 24.9 秒なので、トータルで8秒弱短縮できたことになります。もうちょっと速いかと思ったんですが、データベースの書込にそれなりに時間がかかってるってことですかね。
 しかし、何でデータベース更新まで短縮できるんでしょう? 農薬名等の英数字が半角になったので、データ量が若干減ったからでしょうかね?

〔738〕Re:CSV データメモ
 Hidemi Oya WEB  (07/11/20 3:29)

引用なし
   > あるかどうかは分かりませんが、kihon.csv, tekiyo.csv ともに、全角英数字は全て半角に変換するようにしました。
 これだと全角「〜」が半角「~」になってしまうことと、処理時間短縮のために、全角「()[]」を半角「()[]」に変換するだけにしました。

〔739〕Re:ACFinder 071119test版
 Hidemi Oya WEB  (07/11/20 3:40)

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

 071119test 版ですが、ZIP ファイル解凍の際に、すでにファイルが存在すると、処理確認ダイアログが表示されます。'-aoa' スイッチを付けて、強制上書きするようにしてください。

〔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 には登録番号をキーにして登録基本部から参照できる農薬名などのカラムは入れていません。別にこれはあってもかまわないのですが、その分データベースのファイルサイズは増えます。

〔741〕ACFinder 071120test版
 kabe WEB  (07/11/20 23:08)

引用なし
   kabe です。

071120test版です。
http://acfinder.kabe.info/acfinder071120.exe

zip書庫の解凍時に上書き確認ダイアログが出ないよう修正しました。
ExepressCX フリー版でインストーラーを作成してみました。
デフォルトインストール先がProgram Files で今のところインストール先を記憶しません。次回からレジストリに記録するようにします。
余力があればアンインストーラも作成します。

〔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 側で処理するのとどっちが速いだろう?

〔743〕Re:ACFinder 071120test版
 kabe WEB  (07/11/21 9:13)

引用なし
   kabe です。

CSVデータを極力変換しなくても済むよう、全角アルファベット、数字、記号は半角のままでいきます。
http://www.acis.famic.go.jp/toroku/dokusei.htm から取得した毒性データについても、同様の変換を行ってデータベースに取り込むよう修正しています。

で、spec.db が更新されない場合、薬剤タブでDDVP や MEP などのASCII文字列の毒性、魚毒性が表示されない不具合があります。
そのような場合は、データ更新ダイアログから拡張機能>毒性テーブル(spec.m_dokusei)更新を実行してください。
あるいは spec.db を削除してから acfinder を再起動してください。

〔744〕Re:ACFinder 071120test版
 Hidemi Oya WEB  (07/11/21 10:19)

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

>071120test版です。
 すみません。これに気づかず、CSV ファイルを仕様変更してしまいました。

 ということで、「071120test 版を評価中の皆様」へ
 新しい test 版が出るまで、当サイトの CSV データを利用すると、「u」は「m^2」と表示されますので、ご了承ください。

>ExepressCX フリー版でインストーラーを作成してみました。
 私自身は、インストーラの有無を選択できる場合は無しを選択する口ですが、やはりインストーラがあると便利ですね。今までは、新規インストールに
(1) LZH 解凍ソフトがなければ、まず解凍ソフトをインストール
(2) (1) で UNLHA32.DLL を使っていなければ、ダウンロードしてインストール
(3) ACFinder 用フォルダー作成と解凍
(4) ACFinder のショートカット作成
という手順が必要でしたが、(1), (2) の段階で挫折する人もいました。
 インストーラ付きなら (1), (3), (4) は不要で、CSV 利用がデフォルトになれば (2) も必須ではなくなるので、より多くの人に利用してもらえると思います。

>余力があればアンインストーラも作成します。
 勧めておいて私自身は ExpressCX をまともに使ったことがないのですが(^_^;)、インストーラを作成した時のデータでアンインストーラも自動作成されるのだと思ってました。

〔745〕Re:ACFinder 071119test版
 Hidemi Oya WEB  (07/11/21 10:29)

引用なし
   自己レスです(^_^;)。


> CSV の場合、csv->acis.db変換が 11.4 秒、データベース更新が 20.8 秒でした。薬検のデータを使うと、xls->acis.db 変換が 15.2秒、データベース更新が 24.9 秒なので、トータルで8秒弱短縮できたことになります。

> しかし、何でデータベース更新まで短縮できるんでしょう?

 「データベース更新」時間は、全体の時間でしたね。この事例では、ダウンロード、解凍はしていないので、csv->acis.db 変換と xls->acis.db 変換の時間差である約4秒が短縮されたということで、データベース更新の時間差と若干差があるのは誤差の範囲内と解釈するのが正しいです。

〔746〕CSV データダウンロード URL のユーザ指定
 Hidemi Oya WEB  (07/11/21 12:23)

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

 ひとつお願いがあるのですが、CSV データのダウンロード先を、ユーザが変更できるようにしていただけないでしょうか? ないとは思いますが、CSV データの利用者が転送量制限に引っかかるほど増えると、分室等でも薬検の許諾をとってデータを提供してもらわなくてはならなくなるかもしれません。
 また、これが可能になると、独自DB検索システム用のデータ更新も非常にやりやすくなります(というか、現状ではこちらの方の理由が大きいですけど^^;)。こちらのためだけなら、acfinder.ini の [NET] セクションに、UrlDownSite1 エントリが設定されていれば、その値を使うというようにしてもらえるだけでも OK です。

 薬検の URL も変更可能にしておけば、もし URL が変わってもプログラムを変更することなく、すぐに対応できますね。

〔747〕アイディア2つ
 Hidemi Oya WEB  (07/11/21 21:21)

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

 検索部分の本筋とは全く関係ありませんが、インストーラが付いて便利になったので、さらに便利にする案を。

1 データベース強制バージョンアップオプション
 071119test 版で、データベース更新が必要な場合に自動的にダイアログが表示されるようになったということですが、これをもう一歩進めて、インストール後データベースを強制的に更新してしまってはどうでしょう。どうせ更新しなければ使えませんし、インストーラ付きならインストール後の自動実行ソフトの指定もできますよね。
 /U オプションだと受信データが更新されてなければデータベースを更新しませんが、たとえば /V オプションで起動すると、受信データが更新されていなくてもデータベース更新をするようにしておきます。で、データベース構造が変わったときなどは、インストール後に /V オプションで ACFinder を起動するようにします。
 これ以外の方法もあるでしょうが、/V オプション方式だと、これから開発する独自DB検索システム(すでに薬検の許諾済み)のデータベース更新で、すでに作成済みの CSV ファイルをそのまま使えるようになってさらに便利になるメリットもあります(^_^;)。

2 ACFinder アップデート通知
 ACFinder がアップデートされていたら、自動的にダウンロード&インストールというのが理想ですが、新バージョンがあれば通知してくれるだけでもかなり便利になると思います。通知機能があれば、昨年の登録基本部のカラム変更、今年の URL 変更などのようなことがあっても、皆さんすぐに対応できます。
 通知だけなら、バージョンとチェンジログを記載したテキストか HTML ファイルを置いておき、現在のデータ更新チェックと同じ方法でチェックして、更新されていればその内容を表示するというのが最も簡単な実装方法だと思います。

〔748〕ACFinder 071121test版
 kabe WEB  (07/11/21 23:35)

引用なし
   kabe です。

071121test版です。
http://acfinder.kabe.info/acfinder071121.exe

CSVからテーブルへの読込みをシンプルにしました。
m^2 > u 変換のみ行います。
若干更新速度が速くなっています。

これを見ると、9万行の適用部でも、もっと劇的に早くなるのではないかと期待したのですが、思った程ではなかったです。
http://www.3rd-impact.net/Document/SQLite/Translation/Current/speed.html
1行毎に ExecSQL を実行しているせいかと思いましたが、そうでもないようです。

独自の接続先を選択できる機能を付けました。
設定>基本設定>ダウンロードタブを見てください。
接続先には update.txt toroku.zip の前までのURLを記入してください。

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

引用なし
   >Hidemi Oyaさん

kabe です。

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

〔750〕Re:ACFinder 071121test版
 Hidemi Oya WEB  (07/11/22 0:44)

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

>CSVからテーブルへの読込みをシンプルにしました。
>m^2 > u 変換のみ行います。
>若干更新速度が速くなっています。
 今回は、csv->acis.db 変換が 7.8 秒ということで、071119test に比べると約 30 %短縮されました。xls->acis.db 変換に比べると、ほぼ半分の時間です。
 適用データを最初にテンポラリテーブルとして作ると、メモリ搭載量でかなり速度が変わると思われますが、xls->acis.db 変換対比で 30 %以上の短縮率が得られれば、そこそこ速くなった感じはすると思います。

>1行毎に ExecSQL を実行しているせいかと思いましたが、そうでもないようです。
 でも、前から BEGIN/COMMIT が機能してないようには感じてます。大量の INSERT 文を発行できるように、ストリームから SQL を流し込めるようにした方が良いのかなあ…。

>独自の接続先を選択できる機能を付けました。
 ありがとうございます。バッチリ、自宅サーバからデータをダウンロードできるようになりました。

>接続先には update.txt toroku.zip の前までのURLを記入してください。
 最初、ディレクトリ名の後ろのスラッシュを付けてなかったので、失敗しました(^_^;)。文字列末尾がスラッシュでない場合は、自動的にスラッシュを付加してくれると、より使いやすさが増すと思います。

〔751〕ACFinder 071121test版バグ
 kabe WEB  (07/11/22 13:18)

引用なし
   kabe です。

アルファベット、記号を半角のままで利用することに伴うバグがありました。

定型処理で、きゅうり(露地) など半角の()が含まれる作物名を regexp で検索できません。
きゅうり(露地)のように全角の()はOKです。
また作物タブでも、作物名選択ダイアログの検索タブからチェックボックスで選択した場合は検索できません。ツリーから選択する場合は、全角括弧になっているため検索できます。

原因は全角の()は \(? に展開されますが、半角の ( は ( のままのためです。
作物タブの作物名覧に直接記述した場合は、エンターした時点で半角括弧が全角括弧に強制的に変換されるため検索できます。

連休中に修正版を作成しますが、それまでご注意ください。

〔752〕Re:ACFinder 071121test版
 kabe WEB  (07/11/22 20:35)

引用なし
   >Hidemi Oyaさん

kabe です。

> でも、前から BEGIN/COMMIT が機能してないようには感じてます。
あ〜、どうもそのようですね。
BeginTransaction と Commit をコメントアウトしても、同じ早さです。
こんなことに今頃、気付くとは…
こうなると私にはさっぱりわかりません。

〔753〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/22 23:23)

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

>原因は全角の()は \(? に展開されますが、半角の ( は ( のままのためです。
 あ゛〜、すみません、私の CsvToRegexp 関数のせいですね。あの当時は全角しか考えてませんでしたから(^_^;)。
 AcfUtil.pas の CsvToRegexp 関数で、
 s := AnsiReplaceStr(s, '(', '\(?');
 s := AnsiReplaceStr(s, ')', '\)?');
の下に
 s := AnsiReplaceStr(s, '(', '\(?');
 s := AnsiReplaceStr(s, ')', '\)?');
を追加してください。

〔754〕Re:ACFinder 071121test版
 Hidemi Oya WEB  (07/11/23 1:11)

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

>BeginTransaction と Commit をコメントアウトしても、同じ早さです。
 ですよね。BEGIN 文でオートコミットは中止されるはずですが、それが機能していない(たとえば、sqlite3_finalize API の呼び出しでオートコミットに戻ってるとか)か、オートコミットによる速度差がないのかのどちらかでしょう。

 前者の場合は、複数の SQL 文をまとめて発行すれば、改善される可能性はあります。とりあえずは、100〜1000 行程度の INSERT 文をまとめて ExecSQL する方法を試してみてもらえませんか?
 INSERT 文をまとめるのは、TStringList.Add() して行くのが手っ取り早いですが、行数が増えるにつれてどんどん遅くなります。string に連結して行く方がより効果的だと思います。

〔755〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/23 9:01)

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

 さらに、CsvToRegexp 関数に下記も追加しておいた方が良さそうですね。

s := AnsiReplaceStr(s, '[', '\[?');
s := AnsiReplaceStr(s, ']', '\]?');
s := AnsiReplaceStr(s, '[', '\[?');
s := AnsiReplaceStr(s, ']', '\]?');

〔756〕Re:ACFinder 071121test版
 kabe WEB  (07/11/23 9:10)

引用なし
   >Hidemi Oyaさん

kabe です。

> とりあえずは、100〜1000 行程度の INSERT 文をまとめて ExecSQL する方法を試してみてもらえませんか?
これ、string に連結する方法を試してみたのですが、返って遅くなりました。
1000行連結すると、5倍くらい遅くなります。
文字列を連結するよりは1行づつ INSERT した方がずっと早いです。

sqlite.pas の方で何か対策ありますか。

ここの一番最後のあたり、それらしいことを書いてあるような気がしますが私には理解できません。
http://hp.vector.co.jp/authors/VA002803/sqlite/capi3dll.htm

〔757〕Re:ACFinder 071121test版バグ
 kabe WEB  (07/11/23 9:21)

引用なし
   >Hidemi Oyaさん

kabe です。

ありがとうございます。
ただ半角の方を先に置換しないとまずいですね。

あと作物名に露地が含まれていれば、施設は除外するようにしてましたが、露地と施設の両方が含まれていると、施設を検索できなかったのでこの部分も修正します。

〔758〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/23 10:47)

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

>ただ半角の方を先に置換しないとまずいですね。
 あ゛あ゛あ゛〜〜〜、おっしゃるとおりでございます。寝ぼけてました。

>あと作物名に露地が含まれていれば、施設は除外するようにしてましたが、露地と施設の両方が含まれていると、施設を検索できなかったのでこの部分も修正します。
 ん? え〜っと、具体的にどういうケースでしょうか?
 将来的には、Aの露地とBの施設のみに登録というような場合もあるかもしれませんが、今のところそういうのはなさそうですが…。

〔759〕Re:ACFinder 071121test版
 Hidemi Oya WEB  (07/11/23 11:22)

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

>これ、string に連結する方法を試してみたのですが、返って遅くなりました。
>1000行連結すると、5倍くらい遅くなります。
 あちゃ〜、そんなに遅くなりますか…。文字列サイズが大きくなるとメモリの再割り当てが発生するので、最初に SetLength で十分な量のメモリを確保しておかなければならないのかもしれません。それと、もし INSERT 文を
 INSERT INTO table (..) VALUES (..);
にしているなら、
 INSERT INTO table VALUES (..);
にすればいくらか速くなるかも…。
 が、SQL が長すぎて sqlite3_prepare に時間がかかっているのだとすれば、上記対策をしても結果は同じでしょうね。10〜50 行程度でまとめた方が良いかもしれません。

>ここの一番最後のあたり、それらしいことを書いてあるような気がしますが私には理解できません。
 SQLite.pas の ExecSQL は、sqlite3_exec ではなく、sqlite3_prepare, sqlite3_setp, sqlite3_finalize を使っています。ということで、INSERT 文の連結でなんとかなるかなと思ったわけです。
 INSERT 文の連結でダメなら、紹介していただいた記事でやっているように、仮パラメータの INSERT 文を用意しておいて、実パラメータを bind していく方法くらいしかありません。が、SQLite には SQL 文に PREPARE/BIND がないので、API レベルで汎用的に実装する方法が思い浮かびません。それと、フィールドごとに分解して bind する処理に時間がかかりますから、今回のように CSV データを INSERT する場合は、前述のように単純に全フィールドを INSERT していく方が速いはずです。

〔760〕ACFinder 071123test版
 kabe WEB  (07/11/23 21:00)

引用なし
   kabe です。

071123test版です。
http://acfinder.kabe.info/acfinder071123test.zip
EXEのみです。

半角の () [] を含む作物名を検索できない場合がある不具合を修正しました。

CSVデータの読込み方法を若干変更していますが、速度にほとんど変化はありません。
10行ひとまとめにして INSERT するのがほんの少しだけ早そうなのでそのようにしています。
文字列変換は _1 〜 _5 を 1.〜5.に戻す処理を付けました。

薬剤タブの検索仕様を若干変更しました。
薬剤の絞り込みを行う場合、これまで用途コンボボックス(殺菌剤、除草剤などの選択)を選択すると、作物名が指定されていてもリセットしてました。
作物名が指定されていれば、その作物の殺菌剤や除草剤のみを検索するようにしました。
薬剤候補と用途は、どちらかが選択されると、片方はリセットされます。

〔761〕Re:ACFinder 071121test版バグ
 kabe WEB  (07/11/23 21:08)

引用なし
   >Hidemi Oyaさん

kabe です。

> ん? え〜っと、具体的にどういうケースでしょうか?
> 将来的には、Aの露地とBの施設のみに登録というような場合もあるかもしれませんが、今のところそういうのはなさそうですが…。
まあ、あまりないとは思いますが、きゅうり(露地栽培)ときゅうり(施設栽培)だけを同時に検索して使用時期の確認をしたいなどとという場合を想定しています。
071123test版はそのように変更しました。

〔762〕Re:ACFinder 071123test版
 Hidemi Oya WEB  (07/11/23 21:42)

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

>CSVデータの読込み方法を若干変更していますが、速度にほとんど変化はありません。
 今回は、csv->acis.db 変換が 7.9 秒ということで、071121test 版と変わりませんでした。恐らく、これが私のマシンで目一杯の速度だということでしょう。2つ併せて 10 万レコード近いですから、ある程度時間がかかるのはやむを得ないと思います。

>文字列変換は _1 〜 _5 を 1.〜5.に戻す処理を付けました。
 あれま、適用の本文中にも1.2.などの丸付き数字を使っているものがあったんですね。CSV データに変換する段階で、丸付き数字を (1), (2) に変換するようにしますので、次のバージョンからこの部分は削除していただいて結構です。

>作物名が指定されていれば、その作物の殺菌剤や除草剤のみを検索するようにしました。
 現在は検索が速くなったので、前の仕様でも速度的な問題はありませんでしたが、やはりこの方が分かりやすくて便利ですね。

 ひとつ気づいたのですが、毒性データの英数字が全角のままなので、2,4-PA とか MCPA とかの毒性が表示されなくなってしまいました。元データは英数字が半角、カナが全角なので、文字種変換しない方が良いですね。併せて、私の作った別名テーブルも、英数字を半角に変換してご利用ください。

〔763〕CSV データを若干仕様変更
 Hidemi Oya WEB  (07/11/23 22:10)

引用なし
   Hidemi Oya です。

>CSV データに変換する段階で、丸付き数字を (1), (2) に変換するようにしますので、次のバージョンからこの部分は削除していただいて結構です。
 ここで書いたように、丸付き数字は、_1, _2 ではなく、(1), (2) に変換するようにしました。

 このほか、様々なプラットフォームでなるべく問題が少なく、そのまま使いやすい形にするということで、「メートル」は「メートル」、「u」は「平方メートル」に変換するように修正しています。

〔765〕SQL タブの引用符をシングルクォートに
 Hidemi Oya WEB  (07/11/23 22:49)

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

 今更ながらなんですが…。SQL タブの SQL 作成支援で、文字列を囲む引用符がダブルクォートになっていますが、シングルクォートに変えていただけないでしょうか? sqlite3.dll のバージョンによるのかもしれませんが、以前、ダブルクォートだと日本語のハンドリングがやや不安定になることを経験したことがあります。

〔766〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/24 12:37)

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

>まあ、あまりないとは思いますが、きゅうり(露地栽培)ときゅうり(施設栽培)だけを同時に検索して使用時期の確認をしたいなどとという場合を想定しています。
 同じ作物でってことでしたか。
 しかし、考えてみれば当たり前なんですが、作物タブで「きゅうり(施設栽培),きゅうり(露地栽培)」なんていう検索もできたんですねえ…。やってみて初めて、上位作物だけでなく複数の作物を指定できることに、今更のように気がつきました(^_^;)。
 あと、きゅうりの有機銅剤のように、同一作物でも露地と施設で使用時期が異なるために、単に「きゅうり」ではなく、露地と施設がそれぞれ別個に登録されている農薬があるのも知りませんでした。いやいや、奥が深い…。

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