採用した方に1000pt差し上げます。

mdbまたはCSVファイルの置換ソフトを探しています。
前回質問したのですが、Accessのテーブル内にHTMLの構文(半角換算で8000~9000文字)が入っているフィールドがあり、置換が大変な状況です。
そこで一旦CSVなどに吐いて置換を出来ないかと思いました。
レコードは全部で10000位です。
大規模なデータが扱えることと、出来れば高速であること、置換機能に長けていることが重要です。
実際に使ったことのある方で、ある程度レビューを書いて頂けると助かります。
どうぞよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:2007/07/25 14:32:21
  • 終了:2007/07/25 19:41:14

回答(7件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982007/07/25 14:39:46

ポイント18pt

レコードを すべて選択して コピー。

エクセルに貼り付け。

エクセルで置換(Ctrl+F)して

アクセスに 変換後のテーブルを用意し、そこを開いて

貼り付けとする。

id:rupopon

エクセルでは置換出来る文字数が少なすぎました。ありがとうございました。

2007/07/25 15:17:10
id:rikuzai No.2

りくっち回答回数1366ベストアンサー獲得回数1412007/07/25 14:51:37

ポイント17pt

http://q.hatena.ne.jp/1185159566

↑の質問も拝見していたんですが、置換したい内容が漠然としすぎていて回答のしようがありませんでした。

htmlの構文に限らず、置換対象がもっと具体的であれば、

ACCESSやExcelの機能自体でもできる可能性はあります。

ちなみにACCESSのデータが重い場合csvに吐き出して別処理してACCESSに戻すということもよくありますが、

10000程度のデータならACCESSでも十分だと思います。

(処理内容がよほど複雑でなければ)


例えばhtmlのタグを取りたいということであれば、

http://q.hatena.ne.jp/1181571396#a727348

↑のllusallさんのモジュールでキレイに取れます。


こういったことでなければどんな処理をしたいのかをもう少し詳しく書かれてみてはどうでしょうか。

例えば

  • collarタグ内の#000000を#FFFFFFに変えたい
  • タイトルタグ内のタイトル名を変更したい

といった感じで箇条書きでもかまいません。


特にhtmlのタグの内容の書換えに関しては、

http://www.hi-ho.ne.jp/shige-umeka/page/kaisyu01.html

↑のようなhtmlに特化したものもありますから、

置換内容によっては紹介するソフトも違ってくると思います。



以上ご参考まで。

id:rupopon

説明不足で申し訳ございません。

例えば、半角換算で8000~9000文字のHTMLの

1500~2000文字位を一気に変換したい時があります。

ただ残りの6500~7000文字がレコードによって違うので、フィールド全体を一括で変えることは出来ません。

今はaccessで10数回に分けて置換しています。

accessも検索・置換出来る文字数が少ないので

もっと多い文字数を置換できる方法を探しています。

2007/07/25 15:29:19
id:mmasuda No.3

mmasuda回答回数7ベストアンサー獲得回数32007/07/25 15:23:51

ポイント17pt

恐らくこの様な答えを望んでいるとは思いませんが、アドバイス代わりに聞いてください。

これを機にsed/awk などの行指向形データの変換ツールに習熟することをお薦めします。

sed/awk なんて・・・・と思う向きにはperl/ruby/python などの言語などでもよろしいかと思います。

正規表現は確かにとっつきにくいですが、excel やテキストエディタで置き換え処理する時間がバカらしいほど簡単にすぐ終わりますよ。

id:rupopon

ちょっと高度すぎて分かりませんが、もし使えるようなら勉強してみます。

ありがとうございました。

2007/07/25 15:39:42
id:icchan0000 No.4

icchan0000回答回数85ベストアンサー獲得回数52007/07/25 15:48:35

ポイント17pt

accessのクエリで新規作成を選択し、ツールバーの「表示」メニューで「SQL ビュー」を選択し、SQL文編集モードにします。

そこで、

update [更新したいテーブル] set [更新したい列名] = replace([更新したい列名],'(更新対象となる文字列)','(更新後の内容)')

と入力し実行してみたらダメでしょうか。

メモ型のフィールドに20000文字ていどのサンプルデータを入れ、3000文字程度の文字列でテストしてみましたが、文字数制限のようなもので引っかかることはありませんでした。

レコード件数が多いので速度的にはやってみないとわかりませんが。

id:rupopon

下記の通りやってみたのですが、うまくいきません。

商品管理テーブルの商品説明というフィールドで、<ビーアール><センター>を<センター>に変えるという式です。(タグはどうやって書くのでしょうか?)

どこか間違っていますでしょうか。

UPDATE 商品管理 SET 商品管理.商品説明 = Replace(商品説明,'(<ビーアール><センター>)','(<センター>)');

2007/07/25 17:20:22
id:nyankochan No.5

nyankochan回答回数323ベストアンサー獲得回数92007/07/25 16:35:04

ポイント17pt

私は、これをよく使ってます。

http://www.sirmiles.com/software/repl_ace.htm

長い文章でも複数ファイル同時でも置換可能です。

今はヘッダーやフッターを別ファイルから読み出すような仕組みにして

いますが、以前はそういったことも無く、全ファイルに同じ表記をして

いたため、これを使って同じ表記の部分をいっきに全部変換したりしま

した。2000個のHTMLファイルの全フッタ置換とか・・・・。

jpgやgifのようなバイナリは無理ですが、テキストデータのファイルで

あれば、拡張子がなんであれいけるはずです。

id:rupopon

複数のファイルの時は良さそうですね。今回はファイルが一つでデータが多いです。少し試しましたが文字列が長いとスキップされてしまうようです。

2007/07/25 17:49:59
id:aside No.6

aside回答回数339ベストアンサー獲得回数312007/07/25 16:48:54

ポイント17pt

更新用のクエリの置換関数だと半角5000文字の置換ができるようです。

クエリ作成時、SQLビューで以下のクエリを作成

update 「対象テーブル」set '対象列' = replace('対象列', '5000文字ぐらいの置換対象', '置換後文字列');

id:rupopon

もしよろしければ例文を作っていただけないでしょうか。

商品管理テーブルの商品説明というフィールドで

<ビーアール><センター>を<センター>のみにするといった感じで作っていただけたら嬉しいです。

2007/07/25 17:56:55
id:icchan0000 No.7

icchan0000回答回数85ベストアンサー獲得回数52007/07/25 18:09:33

ポイント1000pt

UPDATE 商品管理 SET 商品管理.商品説明 = Replace(商品説明,'<BR><CENTER>','<CENTER>');

でどうですかね?

id:rupopon

ありがとうございます!出来ました!

2007/07/25 19:21:47
  • id:rupopon
    書き忘れました。置換する文字列がかなり長いので文字数に制限のないものか、もしくは極力長いものがいいです。
  • id:rikuzai
    ええとですね、それだけの文字列のを置換する場合、
    文字列そのものを置換しようとするのではなく、
    データの何文字目から何文字目までを、こっちの文字列と差し替えるといった処理にすることが多いです。
    それなら何文字だって問題ありません。
    検索文字列と置換文字列を交換するという固定概念を捨てないとなかなか解決しないと思いますよ。

    残りの6500~7000文字がレコードによって違うなら、
    検索文字の10文字目までと、終わり10文字を探して場所を特定するといった方法もあります。

    おそらくそうした抽出の条件を選定できていないのではと思います。
    (できていたらせめて箇条書きに出来ると思うので)
    個人的な内容は適当に変えられたらいいと思うので、
    実際の8000~9000文字のHTMLと変えたい1000~2000文字を何に変えたいかを例示されてはと思います。
  • id:taknt
    でしたら、秀丸等に貼り付けて 置換したらいかがでしょうか?
  • id:rikuzai
    推測で追加コメントします。
    過去の質問から思ったのですが、ネット通販をしているページやhtml形式のメールのソース自体をそのままデータベースにしているのではないですか?
    その商品情報のテキストを変換するといった作業なのではないかと。
    その場合ある程度置換したい文字列の前後のタグを特定することもできそうですが、
    それよりも文字列の内容を項目分けして、そのデータをhtmlのテンプレートに流し込むといった流れの方が効率的なのではと思います。
    (ページも整いやすいし)
    あくまで推測なのではずしていたらすいません。
  • id:rupopon
    お騒がせしました。icchan0000さんの方法でなんとかなりそうです。
    Accessはすごいですね^^;
  • id:taknt
    なーんだ。
    最初から
    >商品管理テーブルの商品説明というフィールドで
    <ビーアール><センター>を<センター>のみにするといった感じで作っていただけたら嬉しいです。

    と質問してくれたら 早かったのに。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません